我有一台激活二进制日志的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会做什么?
答案 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_size
和expire_logs_days
设置为适当的值。
ibdata
和ib_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文件。这将解决你的问题。