日志清理方法
一:永久策略,自动清理
- 修改my.cnf配置文件,设置清理策略,binlog日志大小
# 编辑my.cnf配置,加入下面的内容
max_binlog_size = 277M # 设置binlog日志的大小为500M
expire_logs_days = 30 # 设置日期的过期时间,大于30天的日志自动清理
- 重启mysql服务
二:临时策略,手动清理
- 进入mysql进行清理
mysql -u root -p
-- mysql8.0 以下版本
show variables like 'expire_logs_days';
# 默认为0,表示永不过期; 此参数最大值为90Days
set global expire_logs_days = 60;
-- mysql8.0 以上版本
# 以秒为单位,默认2592000 30天 14400 4小时;86400 1天;259200 3天
show variables like '%binlog_expire_logs_seconds%;
set global binlog_expire_logs_seconds=259200;
-- 刷新logs日志
flush logs;
过期删除的策略
MySQL_binlog过期删除策略
- MySQL是根据binlog文件的操作系统最近修改时间,来判断binlog是否过期
- 在触发MySQL过期删除时,MySQL先检查bin.index文件,找到目前最老的binlog*,然后检查该文件的系统时间,会有如下两种情况:
- 如果发现该文件未过期,则认为目前没有binlog日志过期,不进行删除,即使此时有其他binlog已过期。
- 如果发现该文件已经过期,则会找下一个binlog,判断是否过期,同样存在两种情况(过期或者未过期),如此往复,直到找到第一个过期的binlog 即停止继续查找,并删除该binlog及所有该binlog之前的所有日志
用到的数据库命令汇总
-- 查看binlog列表
show binary logs;
-- mysql 8.0 版本以上
show variables like '%binlog_expire_logs_seconds%';
set global binlog_expire_logs_seconds=259200;
-- mysql 8.0 版本以下
show variables like 'expire_logs_days';
set global expire_logs_days = 90;
-- 刷新logs日志
flush logs;