手动清理binlog
- 查看主库和从库正在使用的binlog是哪个文件
show master status show slave status\G
- 开始手动清除binlog,删除指定日期以前的日志
-- 删除指定日期以前的日志索引中binlog日志文件 purge master logs before '2016-09-01 17:20:00'; -- 删除指定日志文件的日志索引中binlog日志文件 purge master logs to'mysql-bin.000022';
- 在删除binlog日志之前,首先对binlog日志备份,以防万一
- 使用该语法,会将对应的文件和mysql-bin.index中对应路径删除
- 时间和文件名一定不可以写错,尤其是时间中的年和文件名中的序号,以防不下心将正在使用的binlog删除!!!切勿删除正在使用的binlog
自动删除binlog文件
- 在mysql中修改
show variables like 'expire_logs_days'; # 设置binlog 7天过期 set global expire_logs_days = 7;
- 设置之后不会立即清除,触发条件是以下之一:
- binlog大小超过max_binlog_size,max_binlog_size默认为1G
- 手动执行flush logs
如果binlog非常多,不要轻易设置该参数,有可能导致IO争用,这个时候可以使用purge命令予以清除:
-- 将bin.000055之前的binlog清掉 purge binary logs to 'bin.000055'; -- 将指定时间之前的binlog清掉 purge binary logs before '2017-05-01 13:09:51';
- 配置文件my.cnf中修改
# 设置过期时间为30天 expire_logs_days = 30 -- max_binlog_size使用默认值即可
过期时间设置的要适当,对于主从复制,要看从库的延迟决定过期时间,避免主库binlog还未传到从库便因过期而删除,导致主从不一致!