删除mysql-bin文件安全吗?


92

我有MM复制在MySQL和我想挤在框中一些自由空间是删除不必要的文件,我在这些进来mysql-bin的文件里面/var/db/mysql/有数百这些文件的像mysql-bin.000123mysql-bin.000223等我已经做检查MySQL复制show master statusshow slave status他们在某些位置使用一些mysql-bin文件,但是我想所有其他bin文件都是剩余的,将不再使用。在这种情况下,删除复制当前指向的所有mysql-bin文件是否安全?

如果可以安全删除,那么在不使用这些文件时,我有什么办法可以自动删除这些文件?

Answers:


136

请不要只是在操作系统中删除它们。

您需要让mysqld为您做到这一点。这是mysqld如何管理它:

该文件mysql-bin.[index]保留mysqld生成并自动旋转的所有二进制日志的列表。清除binlog的机制mysql-bin.[index]包括:

PURGE BINARY LOGS TO 'binlogname';
PURGE BINARY LOGS BEFORE 'datetimestamp';

这些将在您刚刚指定的binlog或时间戳之前清除所有二进制日志。

例如,如果您运行

PURGE BINARY LOGS TO 'mysql-bin.000223';

这将删除之前的所有二进制日志mysql-bin.000223

如果你跑

PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 3 DAY) + INTERVAL 0 SECOND;

这将清除3天前午夜之前的所有二进制日志。

如果您希望binlog自动转走并保持3天有效,只需设置以下内容:

mysql> SET GLOBAL expire_logs_days = 3;

然后添加到 /etc/my.cnf

[mysqld]
expire_logs_days=3

和mysqld将为您删除它们的日志

显示从站状态\ G

这很关键。运行时SHOW SLAVE STATUS\G,您将从主服务器上看到两个二进制日志:

  • Master_Log_File
  • Relay_Master_Log_File

当复制几乎没有延迟或没有延迟时,这些值通常是相同的。当复制延迟很大时,这些值是不同的。只是为了简单起见,选择任何东西Relay_Master_Log_File,然后再回到Master并运行

PURGE BINARY LOGS TO 'Whatever Relay_Master_Log_File Is';

这样,复制不会中断。


1
请注意输入错误-下划线,而不是破折号:([mysqld] expire_logs_days=3并且您必须包括此[mysqld]部分
changokun 2014年

@changokun这不是错字。my.cnf将接受破折号。SET GLOBAL expire_logs_days = 3;从mysql客户端运行不会接受它们。例如,在MySQL的文档:dev.mysql.com/doc/refman/5.5/en/mysqld-option-tables.html
RolandoMySQLDBA

这对我有用。问题,... mysql> SET GLOBAL expire_logs_days = 3;expire-logs-days=3in /etc/my.cnf.. 和有什么不一样?这是多余的吗?或者,重要的是先运行SET GLOBAL...然后再添加expire-logs-days=..?谢谢。
Nino Paolo 2015年

显然,快速删除所有日志:PURGE BINARY LOGS BEFORE DATE(NOW());为什么没有合理的默认设置?我无处可寻,从来没有明确地将日志文件的大小更改为巨大的数量。运行此命令后,我有一个10.0 GB的日志文件,我的mysql.bin文件夹大小缩小到1.6GB。
Michael Trouw

20

这实际上取决于您的备份策略。保留二进制日志的主要原因之一是将数据库还原到“时间点”。如果数据库崩溃并需要还原,则将还原最新的完整备份,然后从完整备份的位置开始播放二进制日志。

因此,如果您每天进行一次完整备份,并且拥有价值7天的二进制日志,则很可能可以删除过去价值4-6天的二进制日志。您可以控制使用该expire_logs_days设置保留多少天的二进制日志。

您可以通过先查看要保留的最旧的日志来删除不需要的二进制日志:

ls -lh /path/to/binary/logs/mysql-bin.0*

然后在mysql中:

mysql> PURGE BINARY LOGS TO 'mysql-bin.XXXXX';

4

尝试这个:

RESET MASTER;

文件所述:

使用RESET MASTER可以删除任何二进制日志文件及其相关的二进制日志索引文件,从而使主数据库恢复到开始二进制日志记录之前的状态。

这将删除所有相关的二进制日志文件,这可能不是您想要的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.