17370845950

如何查看登录记录_mysql安全日志分析
MySQL无专用登录日志,但可通过启用general_log(记录Connect事件)、分析error_log中的“Access denied”、执行SHOW PROCESSLIST查看实时连接,或查询mysql.general_log表(需log_output=TABLE)获取登录行为。

MySQL 本身不提供“登录记录”专用日志,但可通过多种方式间接获取用户连接行为,关键在于启用并合理使用已有日志机制。重点不是找一个现成命令,而是确认日志是否开启、路径是否可读、内容是否包含连接事件。

确认 general_log 是否已启用

这是最直接获取登录动作(Connect)的方式。执行以下 SQL:

SHOW VARIABLES LIKE 'general_log';
若返回值为 OFF,需手动开启(注意:仅建议临时启用,长期开启影响性能):

  • SET GLOBAL general_log = ON;
  • SHOW VARIABLES LIKE 'general_log_file'; 查看日志写入位置,如 /var/log/mysql/general.log

日志中每条 Connect 行即代表一次登录尝试(含成功/失败),例如:

2025-12-23T08:22:15.123456Z 42 Connect root@192.168.1.100 on using SSL/TLS

从错误日志中提取登录失败线索

即使 general_log 关闭,MySQL 错误日志(error_log)通常默认开启,会记录认证失败事件,格式清晰:

2025-12-23T08:22:17.789012Z 43 [Note] Access denied for user 'test'@'10.0.0.5' (using password: YES)

常用分析命令:

  • grep "Access denied" /var/log/mysql/error.log —— 汇总所有失败尝试
  • grep -E "(Connect|Access denied)" /var/log/mysql/error.log | tail -20 —— 查看最近连接动态

实时查看当前活跃连接

不依赖日志文件,快速掌握“此刻谁在线”:

SHOW PROCESSLIST;
或更完整版:

SELECT ID, USER, HOST, DB, COMMAND, TIME, STATE, INFO FROM information_schema.PROCESSLIST;

字段说明:
USER/HOST:登录用户名与来源 IP
COMMAND:当前状态,Connect 表示刚建立连接,Sleep 表示空闲连接
TIME:持续秒数,长时间 Sleep 可能是未关闭的连接

用 mysql.general_log 表结构化查询(需 log_output=TABLE)

如果配置了 log_output='TABLE'(而非 FILE),登录记录会存入系统表:

SELECT event_time, user_host, command_type, argument FROM mysql.general_log WHERE command_type = 'Connect' ORDER BY event_time DESC LIMIT 50;

优势:支持 SQL 过滤、按时间排序、关联用户分析;缺点:需额外配置且占用内存,生产环境慎用。

检查当前输出方式:
SHOW VARIABLES LIKE 'log_output';