Linux下MySQL日志管理实操指南
一 日志类型与用途
二 查看与临时调整日志配置
SHOW VARIABLES LIKE 'log_error';SHOW VARIABLES LIKE 'general_log%';SHOW VARIABLES LIKE 'slow_query_log%';、SHOW VARIABLES LIKE 'long_query_time';SHOW VARIABLES LIKE 'log_bin%';SET GLOBAL general_log = ON|OFF;SET GLOBAL slow_query_log = ON|OFF;SET GLOBAL long_query_time = 2;(单位:秒;会话级可再 SET SESSION long_query_time = 2;)SET sql_log_bin = 0|1;(常用于导入/迁移时临时关闭,注意仅影响当前会话)tail -f /var/log/mysql/mysql_error.log、less /var/log/mysql/mysql_slow.log三 配置文件开启与路径设置
[mysqld]
# 错误日志
log_error = /var/log/mysql/error.log
# 通用查询日志(调试时开启,生产建议关闭)
general_log = 0
general_log_file = /var/log/mysql/general.log
# 慢查询日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
# 二进制日志(用于复制与PITR)
log_bin = /var/log/mysql/mysql-bin
server_id = 1
binlog_format = ROW
sudo mkdir -p /var/log/mysqlsudo touch /var/log/mysql/{error.log,general.log,slow.log}sudo chown mysql:mysql /var/log/mysql/*.logsudo systemctl restart mysql。四 日志轮转与清理
/etc/logrotate.d/mysql/var/log/mysql/*.log {
daily
rotate 7
compress
missingok
notifempty
create 640 mysql mysql
sharedscripts
postrotate
/usr/bin/systemctl reload mysql >/dev/null 2>&1 || true
endscript
}
sudo logrotate -d /etc/logrotate.d/mysqlsudo logrotate -vf /etc/logrotate.d/mysqlSHOW BINARY LOGS;PURGE BINARY LOGS BEFORE '2025-12-01 00:00:00'; 或 PURGE BINARY LOGS TO 'mysql-bin.000123';RESET MASTER;(主从复制环境禁用)FLUSH LOGS;(会关闭并重新打开错误日志,旧日志可归档)五 监控与最佳实践
df -h、du -sh /var/log/mysqlls -lh /var/log/mysql/、tail -f 实时查看SET GLOBAL slow_query_log = 0;(临时关闭写入)SELECT * FROM mysql.slow_log WHERE start_time > NOW() - INTERVAL 1 DAY;(建议配合 pt-query-digest 做深度分析)long_query_time(如 1–2 秒)。