我们有一个简单的1:1主-从复制配置。主服务器崩溃了,但是我们恢复了,复制看起来很好(通过pt-心跳和显示从属状态来确认),但是我们发现了一个小的、奇怪的问题:有一个旧的、空的、绕过的中继日志挂在奴隶上。
我们正在中继。000725,而这个是中继。000724,所以我们已经过去了。更重要的是,它不包含任何实际查询。只是元数据。
我能删除这个吗?是什么引起的?
> /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!40019 SET
> @@session.max_insert_delayed_threads=0*/; /*!50003 SET
> @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER
> /*!*/;
> # at 4
> #140704 3:36:04 server id 16 end_log_pos 107 Start: binlog v 4, server v 5.5.38 created 140704 3:36:04 BINLOG '
> ZFm2Uw8QAAAAZwAAAGsAAAAAAAQANS41LjM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
> AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==
> '/*!*/;
> # at 107
> #140721 4:22:51 server id 14 end_log_pos 1073741944 Rotate to bin-log.006142 pos: 4
> # at 148
> #140704 3:36:04 server id 16 end_log_pos 187 Rotate to relay.000725 pos: 4 DELIMITER ;
> # End of log file ROLLBACK /* added by mysqlbinlog */; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET
> @@SESSION.PSEUDO_SLAVE_MODE=0*/;发布于 2014-07-21 18:39:12
你可以毫无问题地删除它。为什么?
查找文件relay-log.index并显示它
# cat relay-log.index您将看到中继日志、MySQL复制需要和旋转的列表。如果relay.000724不在relay.index中,则可以删除relay.000724而不破坏任何内容。
为什么还在附近?可能是任何东西。在愤怒之后设置复制、跳过SQL错误、简单地启动和停止以及低过期之间,可能会留下一个或多个中继日志。
根据这些情况,如果中继日志没有出现在relay.index中,则可以删除它。
它与复制用于旋转到下一个中继日志的机制有关。你不会经常看到这些烦人的小文件。我看到它们的唯一一次是带着下列之一:
在这两种情况下,IO线程都会继续收集binlog事件。当中继日志达到1G或任何最大值_联木_大小或最大值_继电器_日志_大小时,没有触发旋转,而是在两个没有任何内容的小中继日志中标记会发生旋转的位置。
由于relay-log.index都是中继日志,所以您可以做两件事:
relay-log.000001将所有中继日志重新设置为STOP SLAVE;SHOW SLAVE STATUS\GRelay_Master_Log_File (假设它是mysql-bin.001234)Exec_Master_Log_File (假设它是123789456)CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.001234',MASTER_LOG_POS=123789456;START SLAVE;https://dba.stackexchange.com/questions/71992
复制相似问题