我们有一些分布式服务器连接到同一个 MySQL 服务器。我们需要一个日志,其中包含 MySQL 用户上次登录的日期/时间。我该怎么做?
答案1
您可以使用多种方式来实现:创建常规日志并存储信息,例如这个答案:
您可能想要使用通用查询日志。
通用查询日志是 mysqld 正在执行的操作的一般记录。当客户端连接或断开连接时,服务器将信息写入此日志,并记录从客户端收到的每个 SQL 语句。
为了安全起见,记录日志的一个重要事项是攻击者无法访问日志来抹去其存在的痕迹,因此请考虑使用仅追加文件。
或者在数据库中创建一个表,并通过存储过程将每个登录信息存储在其中,如中所述此网页
-- SET GLOBAL init_connect="";
SET GLOBAL init_connect="CALL tracking.login_trigger()";
DELIMITER //
CREATE PROCEDURE login_trigger()
SQL SECURITY DEFINER
BEGIN
INSERT INTO login_tracking (user, host, ts)
VALUES (SUBSTR(USER(), 1, instr(USER(), '@')-1), substr(USER(), instr(USER(), '@')+1), NOW())
ON DUPLICATE KEY UPDATE ts = NOW();
END;
//