binlog 管理
MySQL 5.7
配置
[mysqld]
log-bin=mysql-bin
server-id=1
binlog_format=ROW
expire_logs_days=7 # 自动清理 N 天前的 Binlog(5.7 主要用这个)
max_binlog_size=1G
sync_binlog=1
保留策略
SHOW VARIABLES LIKE 'log_bin%';
SHOW VARIABLES LIKE 'expire_logs_days';
-- 动态修改保留天数(需 GLOBAL,5.7 无 SET PERSIST)
SET GLOBAL expire_logs_days = 14;
SET GLOBAL max_binlog_size = 2 * 1024 * 1024 * 1024; -- 2GB
查看 Binlog
SHOW BINARY LOGS;
SHOW MASTER LOGS;
SHOW MASTER STATUS;
手动管理 Binlog
-- 刷新日志(轮转新文件,并按 expire_logs_days 清理)
FLUSH BINARY LOGS;
-- 按文件或时间清理
PURGE BINARY LOGS TO 'mysql-bin.000010';
PURGE BINARY LOGS BEFORE '2024-01-01 00:00:00';
-- 旧写法(等价)
PURGE MASTER LOGS TO 'mysql-bin.000010';
PURGE MASTER LOGS BEFORE '2024-01-01 00:00:00';
-- 清空全部 Binlog(慎用;有从库时需先停复制)
RESET MASTER;
参考:MySQL 5.7 — PURGE BINARY LOGS
MySQL 8.0
配置
[mysqld]
log-bin=mysql-bin
server-id=1
binlog_format=ROW
expire_logs_days=7 # 已废弃,建议改用下面项
binlog_expire_logs_seconds=604800 # 推荐:7 天 = 604800 秒
max_binlog_size=1G
sync_binlog=1
保留策略
SHOW VARIABLES LIKE 'log_bin%';
SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';
-- 动态修改保留时间(推荐,可持久化到 mysqld-auto.cnf)
SET PERSIST binlog_expire_logs_seconds = 86400; -- 1 天
SET GLOBAL max_binlog_size = 2 * 1024 * 1024 * 1024; -- 2GB
查看 Binlog
SHOW BINARY LOGS;
SHOW MASTER LOGS;
SHOW MASTER STATUS;
手动管理 Binlog
-- 刷新日志(轮转并按 binlog_expire_logs_seconds 清理)
FLUSH BINARY LOGS;
-- 按文件或时间清理(从库在线时可用)
PURGE BINARY LOGS TO 'mysql-bin.000010';
PURGE BINARY LOGS BEFORE '2024-01-01 00:00:00';
-- 清空全部 Binlog 与 GTID 历史(慎用)
RESET MASTER;
MySQL 8.4
配置
[mysqld]
log-bin=mysql-bin
server-id=1
binlog_format=ROW
binlog_expire_logs_seconds=86400 # 仅此项;无 expire_logs_days
binlog_expire_logs_auto_purge=ON # 默认 ON,按秒数自动 purge
max_binlog_size=1G
sync_binlog=1
保留策略
SHOW VARIABLES LIKE 'log_bin%';
SHOW VARIABLES LIKE 'binlog_expire_logs%';
SET PERSIST binlog_expire_logs_seconds = 604800; -- 7 天
SET GLOBAL max_binlog_size = 2 * 1024 * 1024 * 1024; -- 2GB
查看 Binlog
SHOW BINARY LOGS;
SHOW BINARY LOG STATUS;
8.4 已移除
SHOW MASTER STATUS,请用SHOW BINARY LOG STATUS。
手动管理 Binlog
-- 刷新日志
FLUSH BINARY LOGS;
-- 按文件或时间清理(从库在线时可用)
PURGE BINARY LOGS TO 'mysql-bin.000010';
PURGE BINARY LOGS BEFORE '2024-01-01 00:00:00';
-- 清空全部 Binlog 与 GTID 历史(慎用;8.4 无 RESET MASTER)
RESET BINARY LOGS AND GTIDS;
-- 可选:指定新 Binlog 序号起点
RESET BINARY LOGS AND GTIDS TO 1234;
注意:
- 日常删旧文件用
PURGE BINARY LOGS;彻底清空用RESET BINARY LOGS AND GTIDS(会清空 GTID 历史)。 - 有副本运行时不要执行
RESET BINARY LOGS AND GTIDS。
参考: