删除旋转的MySQL二进制日志是否安全?

时间:2010-06-07 12:00:11

标签: mysql binary-log

我有一台激活二进制日志的MySQL服务器。一天日志文件被“轮换”,即MySQL似乎停止写入它并创建新的日志文件。例如,我目前在/ var / lib / mysql

中有这些文件
-rw-rw---- 1 mysql mysql 10485760 Jun  7 09:26 ibdata1
-rw-rw---- 1 mysql mysql  5242880 Jun  7 09:26 ib_logfile0
-rw-rw---- 1 mysql mysql  5242880 Jun  2 15:20 ib_logfile1
-rw-rw---- 1 mysql mysql  1916844 Jun  6 09:20 mybinlog.000004
-rw-rw---- 1 mysql mysql 61112500 Jun  7 09:26 mybinlog.000005
-rw-rw---- 1 mysql mysql 15609789 Jun  7 13:57 mybinlog.000006
-rw-rw---- 1 mysql mysql       54 Jun  7 09:26 mybinlog.index

和mybinlog.000006正在增长。

我可以简单地使用mybinlog.000004和mybinlog.000005,将它们压缩并转移到另一台服务器,或者我之前需要做其他事情吗?

mybinlog.index中存储了哪些信息?只有关于最新二进制日志的信息?

更新:我知道我可以使用更新mybinlog.index文件的PURGE BINARY LOGS删除日志。但是,我需要在删除之前将日志传输到另一台计算机(我测试备份是否在另一台计算机上有效)。为了减少传输大小,我希望bzip2文件。如果日志文件不再“存在”,PURGE BINARY LOGS会做什么?

4 个答案:

答案 0 :(得分:24)

您可以删除旧的二进制日志。使用同时更新PURGE BINARY LOGS文件的MySQL语句mybinlog.index更安全,而不是直接删除它们。此文件存储用于二进制日志记录的文件名,请参阅

http://dev.mysql.com/doc/refman/5.0/en/purge-binary-logs.html

此外,您可以将MySQL-Server配置为自动删除旧的二进制日志。将服务器配置中的变量max_binlog_sizeexpire_logs_days设置为适当的值。

ibdataib_logfile文件与二进制日志记录无关。它们由innodb存储引擎使用。不要误以为它们似乎没有增长:如果您的服务器上有innodb-tables,这些文件很重要,删除它们可能会导致数据丢失。您可以在文档中了解有关InnoDB的更多信息:

http://dev.mysql.com/doc/refman/5.0/en/innodb-configuration.html

答案 1 :(得分:6)

我终于在MySQL网站上找到了答案。如果有人需要这些信息:

  

在MySQL 5.0.60之前,当.index文件中列出的二进制日志文件已从系统中删除时,PURGE BINARY LOGS TO和PURGE BINARY LOGS之前的行为方式不同(并且两者都没有表现正常)一些其他方法(例如在Linux上使用rm)。从MySQL 5.0.60开始,在这种情况下,语句的两个变体都会失败并出现错误。 (Bug#18199,Bug#18453)要处理此类错误,请手动编辑.index文件(这是一个简单的文本文件)以确保它仅列出实际存在的二进制日志文件,然后再次运行PURGE BINARY LOGS声明失败了。

这意味着我应该手动编辑.index文件,一切都会好的。有趣的是.index文件是一个常规的文本文件。直到现在我才注意到这一点。

答案 2 :(得分:5)

mysql> PURGE BINARY LOGS BEFORE NOW() - INTERVAL 3 DAY; 

在3天之前删除所有bin文件!

PURGE MASTER LOGS BEFORE '2010-10-08 00:00:00';

答案 3 :(得分:-3)

mysql-bin.index通常包含所有.bin文件。如果您已删除某些文件,请编辑.index以反映所有可用文件。如果您已删除所有.bin文件,请删除.index文件。这将解决你的问题。