mysql日志轮转怎么做_日志管理方法

12次阅读

mysql日志轮转依赖logrotate工具与MySQL刷新机制协同实现,错误日志、慢查询日志等由logrotate按日归档压缩并用kill -USR1通知MySQL重开,binlog则由MySQL自身通过max_binlog_size和expire_logs_days控制。

mysql日志轮转怎么做_日志管理方法

MySQL日志轮转不是靠MySQL自身完成的,而是依赖linux系统的logrotate工具配合MySQL的刷新机制来实现。核心在于:让日志文件按时归档、压缩、清理,同时确保MySQL继续写入新文件,不中断服务。

确认日志路径并启用对应日志

先检查MySQL当前使用的日志路径和开关状态:

  • 登录MySQL执行:SHOW varIABLES LIKE 'log_Error';SHOW VARIABLES LIKE 'slow_query_log_file';SHOW VARIABLES LIKE 'general_log_file';
  • 确保配置文件(如/etc/my.cnf/etc/mysql/my.cnf)中已明确指定路径,例如:

[mysqld]
log_error = /var/log/mysql/error.log
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

修改后重启MySQL或执行SET GLOBAL slow_query_log = ON;(部分参数需重启才生效)。

配置logrotate规则

创建独立配置文件/etc/logrotate.d/mysql,内容示例:

/var/log/mysql/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 mysql adm
sharedscripts
postrotate
if [ -f /var/run/mysqld/mysqld.pid ]; then
kill -USR1 `cat /var/run/mysqld/mysqld.pid`
fi
endscript
}

说明:

  • daily:每天检查一次,满足条件即轮转;也可加size 500M作为补充触发条件(防单日暴增)
  • postrotate中用kill -USR1通知MySQL重开错误日志和慢日志;若含通用日志或binlog,建议改用mysqladmin flush-logs更稳妥
  • create 640 mysql adm确保新日志权限正确,MySQL进程可写

处理二进制日志(binlog)的特殊方式

binlog不由logrotate管理,应交由MySQL自身控制:

  • [mysqld]段添加:log_bin = /var/log/mysql/mysql-bin(注意不带扩展名)
  • 设置max_binlog_size = 100M限制单个文件大小
  • 启用自动清理:expire_logs_days = 7(MySQL 8.0+推荐用binlog_expire_logs_seconds = 604800
  • 手动清理可用:PURGE BINARY LOGS BEFORE '2025-12-16 00:00:00';

验证与日常维护

不要等磁盘报警才检查:

  • 测试配置是否语法正确:logrotate -d /etc/logrotate.d/mysql
  • 手动触发一次:logrotate -f /etc/logrotate.d/mysql,然后检查/var/log/mysql/下是否有.log.1.gz等归档文件
  • 定期运行:du -sh /var/log/mysql,监控增长趋势
  • 检查MySQL是否成功切换日志:查看新日志文件时间戳,或执行SHOW BINARY LOGS;select @@log_error;

text=ZqhQzanResources