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

来源:这里教程网 时间:2026-02-28 20:45:03 作者:

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]<br>log_error = /var/log/mysql/error.log<br>slow_query_log = ON<br>slow_query_log_file = /var/log/mysql/slow.log<br>long_query_time = 2

修改后重启MySQL或执行

SET GLOBAL slow_query_log = ON;
(部分参数需重启才生效)。

配置logrotate规则

创建独立配置文件

/etc/logrotate.d/mysql
,内容示例:

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

说明:

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;

相关推荐