贝利信息

mysql的日志清理与日志轮转设置方法

日期:2026-01-18 00:00 / 作者:P粉602998670
MySQL binlog必须用PURGE命令或binlog_expire_logs_seconds配置清理,严禁rm删除;error log和slow log需用logrotate+copytruncate或FLUSH命令轮转,且须确保主从同步完成后再清理binlog。

MySQL 的 binlog 日志如何安全清理

直接 rm -f 删除 binlog 文件会破坏 MySQL 复制和恢复能力,必须通过 SQL 命令或配置自动过期控制。

设置 binlog 自动过期时间(expire_logs_days 已弃用)

MySQL 8.0.11+ 推荐使用 binlog_expire_logs_seconds 替代旧参数,精度更高且支持秒级控制。

SET PERSIST binlog_expire_logs_seconds = 604800;  -- 7 天,单位:秒
-- 永久生效需写入 my.cnf:
# [mysqld]
# binlog_expire_logs_seconds = 604800

错误日志(error log)轮转不靠 MySQL 内置机制

MySQL 本身不提供 error log 的自动轮转,依赖外部工具(如 logrotate)或手动触发 FLUSH ERROR LOGS

/var/log/mysql/error.log {
    daily
    missingok
    rotate 30
    compress
    copytruncate
    create 640 mysql mysql
}

慢查询日志(slow query log)轮转与清理要点

慢查询日志默认不轮转,开启后若长期不处理,单个文件极易达到 GB 级别。

SET GLOBAL slow_query_log = OFF;
-- mv /var/log/mysql/mysql-slow.log /var/log/mysql/mysql-slow.log.20250501
SET GLOBAL slow_query_log = ON;

MySQL 日志管理最易被忽略的是 binlog 清理与主从同步状态的耦合——删早了从库追不上,删晚了磁盘爆掉。error log 和 slow log 轮转则常因依赖 FLUSH 命令却未配合外部工具而失效。