MySQL 5.0及更高版本默认启用MySQL Binary Log。 长期运行保留MySQL Binary Log会占用大量磁盘空间。 可以删除较旧的MySQL Binary日志,以节省硬盘空间。
MySQL Binary Log以非常详细的方式存储查询事件,例如添加,删除和更新。 二进制日志用于两个主要目的:
- 在主服务器和从服务器之间进行复制,在主服务器上进行的声明稍后会将其发送到从服务器。
- 恢复,某些恢复作业需要将数据存储在MySQL Binary Log中。
MySQL Binary Log位于数据库的根文件夹,其命名约定为mysql-bin
。
我可以删除MySQL二进制日志吗
当然可以,只要将数据复制到从服务器,就可以安全删除文件。 建议仅删除1个月以上的MySQL Binary Log。
不过,如果主要目的是恢复数据,则建议存档MySQL Binary Log。
删除或清理MySQL Binary Log的方法有多种,不建议手动清理文件,手动意味着运行remove
命令。
使用RESET MASTER语句删除MySQL二进制日志
Reset Master语句用于在复制Master和Slave服务器期间启动新数据库。 该语句可用于删除所有二进制日志。
清理Master服务器上的二进制日志:
shell> mysql -u username -p
mysql> RESET MASTER;
清理Slave服务器上的二进制日志:
mysql -u username -p
mysql> RESET SLAVE;
使用PURGE BINARY LOGS语句删除MySQL二进制日志
PURGE BINARY LOGS语句可以删除基于日期的Binary Log或最多Binary Log序列号。
基于上面显示的二进制日志示例,我想删除直到mysql-bin.000015
(保留)的二进制文件:
shell> mysql -u username -p
mysql>PURGE BINARY LOGS TO 'mysql-bin.000015';
或者,你可以删除早于特定日期的二进制文件:
shell> mysql -u username -p
mysql> PURGE BINARY LOGS BEFORE '2009-05-01 00:00:00';
使用mysqladmin flush-logs命令删除MySQL Binary Log
另一种方法是运行mysqladmin flush-logs命令,它将删除超过3天的二进制日志。
shell> mysqladmin -u username -p flush-logs
将MySQL二进制日志保存X天
以上所有方法都需要监视磁盘使用情况,以滚动并保持二进制日志x天数。 可以在MySQL的配置文件/etc/my.cnf
上配置以下选项:
[mysqld]
expire_logs_days = 7
命令行上可以用:
mysql> SET GLOBAL expire_logs_days = 7;
如果未在数据库服务器上部署MySQL复制,并且恢复不是主要问题,请考虑关闭MySQL二进制日志。