mysql主从开启时,会产生大量如mysql-bin.000*** log的文件,当磁盘空间较小时,会大量耗费硬盘空间,所以对mysql进行合适的配置,能够定期清理binlog文件。
自动清理
开启主从时,可以配置参数expire_logs_days,设置日志保留多长时间,比如:
1、在my.cnf文件中增加配置项(重启mysql后生效)
expire_logs_days = 15
该参数表示二进制日志自动删除的天数。默认值为0,表示不自动删除。
2、mysql里设置expire_logs_days
mysql> set global expire_logs_days = 15;
mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 15 |
+------------------+-------+
1 row in set (0.01 sec)
手工清理
手工清理,需要确认当前slave数据库没有读取正在删除的日志,否则会删除失败,并报错。可以通过在slave数据库上执行命令确认正在读取的日志:
mysql> show slave status \G;
如果slave服务器不是复制状态,日志删除后,slave启动后想要读取该日志,则不能复制。
手工清理步骤:
1、查看当前日志
mysql> show binary logs;
+------------------+------------+
| Log_name | File_size |
+------------------+------------+
| mysql-bin.000250 | 1079996807 |
| mysql-bin.000251 | 1073743418 |
| mysql-bin.000252 | 1073742306 |
| mysql-bin.000253 | 1073745466 |
| mysql-bin.000254 | 1073742709 |
| mysql-bin.000255 | 1073745324 |
| mysql-bin.000256 | 1073745689 |
| mysql-bin.000257 | 1073742061 |
| mysql-bin.000258 | 1073744683 |
| mysql-bin.000259 | 1073742241 |
| mysql-bin.000260 | 1073742576 |
| mysql-bin.000261 | 1073742085 |
| mysql-bin.000262 | 891734696 |
+------------------+------------+
13 rows in set (0.00 sec)
2、执行清除命令
清除mysql-bin.000250日志
mysql> PURGE MASTER LOGS TO 'mysql-bin.000250';
清除2019-12-23 13:00:00前binlog日志,BEFORE变量的date自变量可以为’YYYY-MM-DD hh:mm:ss’格式。
mysql> PURGE MASTER LOGS BEFORE '2019-12-23 13:00:00';
清除15天前binlog日志,用DATE_SUB() 函数,从现在日期减去指定的时间间隔。
mysql> PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 15 DAY);
附录:
MySQL Date 函数
函数 | 描述 |
---|---|
NOW() | 返回当前的日期和时间 |
CURDATE() | 返回当前的日期 |
CURTIME() | 返回当前的时间 |
DATE() | 提取日期或日期/时间表达式的日期部分 |
EXTRACT() | 返回日期/时间按的单独部分 |
DATE_ADD() | 给日期添加指定的时间间隔 |
DATE_SUB() | 从日期减去指定的时间间隔 |
DATEDIFF() | 返回两个日期之间的天数 |
DATE_FORMAT() | 用不同的格式显示日期/时间 |