MySQL在线删除多余的binlog文件

时间:2022-06-27 13:22:43

如果你的MySQL搭建了主从同步 , 或者数据库开启了log-bin日志(MySQL默认开启) , 那么随着时间的推移 , 你的数据库data 目录下会产生大量的日志文件

ll /opt/mysql/data/
-rw-rw----. 1 mysql mysql 63278 9月 11 02:03 mysql-bin.000001
-rw-rw----. 1 mysql mysql 10966 9月 11 02:03 mysql-bin.000002
-rw-rw----. 1 mysql mysql 133 9月 11 02:04 mysql-bin.000003
-rw-rw----. 1 mysql mysql 133 9月 12 02:00 mysql-bin.000004
-rw-rw----. 1 mysql mysql 271 9月 12 18:25 mysql-bin.000005
-rw-rw----. 1 mysql mysql 133 9月 12 18:55 mysql-bin.000006
-rw-rw----. 1 mysql mysql 133 9月 12 19:48 mysql-bin.000007
-rw-rw----. 1 mysql mysql 133 9月 12 21:21 mysql-bin.000008
-rw-rw----. 1 mysql mysql 321 9月 18 17:30 mysql-bin.000009

生产环境中这些文件都会很大,默认每个1G左右大小,长期不处理会占满硬盘空间
下面来介绍几种解决方法:

1、如果你的数据库没有搭建主从同步这样的服务 , binlog日志也不用的情况下 , 你可以将/etc/my.cnf文件下面行删除或注释掉
log-bin=mysql-bin
如果你需要这样的文件 , 那么建议你在主配置文件 /etc/my.cnf 中添加如下行 , 来限制 binlog日志文件存在时间 , 过期自动删除
expire_logs_days = 7 #只保留7天的日志文件

2、如果你服务器上面的binlog日志已经影响到了磁盘空间,那么你可以使用下面命令清除
mysql> reset master; #清空所有binlog文件

3、如果你的服务器 , mysql做了主从同步 , 那么上面的命令就不适合你了 , 因为binlog文件不能全部删除 , 否则会导致数据不同步
mysql> show slave status\G;   #在slave上查看从库读binlog读到了哪里
Master_Log_File: mysql-bin.000009   # 我们可以看到是mysql-bin.000009
mysql> purge master logs to 'mysql-bin.000009';    #在master中执行这条指令 , 将mysql-bin.000009前的binlog都删掉
mysql> purge master logs before '2014-11-18 00:00:00';    #将此日期前的binlog都删掉

参考链接:http://www.linuxidc.com/Linux/2016-03/129647.htm