MySQL自动清理binlog日志的正确方法

开启MySQL binlog日志的服务器,如果不设置自动清理日志,默认binlog日志一直保留着,时间一长,服务器磁盘空间被binlog日志占满,导致MySQL数据库出错。

使用下面方法可以安全清理binlog日志

一、没有主从同步的情况下清理日志

  • mysql 定时清理5天前的binlog
mysql -uroot -p123456 -e 'PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ),INTERVAL 5 DAY)';  
mysql -u root -p  #进入mysql 控制台  
reset master;  #重置binlog  

二、MySQL主从同步下安全清理binlog日志

1、mysql  -u root -p   #进入从服务器mysql控制台  
show slave status\G;   #检查从服务器正在读取哪个日志,有多个从服务器,选择时间最早的一个做为目标日志。

2、进入主服务器mysql控制台

show master log;   #获得主服务器上的一系列日志  
PURGE MASTER LOGS TO 'binlog.000058';   #删除binlog.000005之前的,不包括binlog.000058  
PURGE MASTER LOGS BEFORE '2021-11-22 11:00:00';  #清除2021-11-22 11:00:00前binlog日志  
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);  #清除3天前binlog日志  

三、设置自动清理MySQL binlog日志

  • /etc/my.cnf #编辑配置
expire_logs_days = 15 #自动删除15天前的日志。默认值为0,表示从不删除。  
log-bin=mysql-bin #注释掉之后,会关闭binlog日志  
binlog_format=mixed #注释掉之后,会关闭binlog日志