18

我有一个启用二进制日志记录的 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

4 回答 4

25

您可以删除旧的二进制日志。与其直接删除它们,不如使用 MySQL 语句PURGE BINARY LOGS来更新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

于 2010-06-07T12:42:09.480 回答
6

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

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

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

于 2010-06-09T08:55:44.180 回答
6
mysql> PURGE BINARY LOGS BEFORE NOW() - INTERVAL 3 DAY; 

3 天前删除所有 bin 文件!

或者

PURGE MASTER LOGS BEFORE '2010-10-08 00:00:00';
于 2014-11-21T05:48:38.253 回答
-3

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

于 2018-05-05T08:40:23.957 回答