MySQL无专用登录日志,但可通过启用general_log(记录Connect事件)、分析error_log中的“Access denied”、执行SHOW PROCESSLIST查看实时连接,或查询mysql.general_log表(需log_output=TABLE)获取登录行为。
MySQL 本身不提供“登录记录”专用日志,但可通过多种方式间接获取用户连接行为,关键在于启用并合理使用已有日志机制。重点不是找一个现成命令,而是确认日志是否开启、路径是否可读、内容是否包含连接事件。
这是最直接获取登录动作(Connect)的方式。执行以下 SQL:
SHOW VARIABLES LIKE 'general_log';
若返回值为 OFF,需手动开启(注意:仅建议临时启用,长期开启影响性能):
/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)
常用分析命令:
不依赖日志文件,快速掌握“此刻谁在线”:
SHOW PROCESSLIST;
或更完整版:
SELECT ID, USER, HOST, DB, COMMAND, TIME, STATE, INFO FROM information_schema.PROCESSLIST;
字段说明:
– USER/HOST:登录用户名与来源 IP
– COMMAND:当前状态,Connect 表示刚建立连接,Sleep 表示空闲连接
– TIME:持续秒数,长时间 Sleep 可能是未关闭的连接
如果配置了 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';