我们的从属服务器磁盘驱动器已满,复制停止,因此我们清除了空间,然后再次开始复制。好吧,一切都很好,直到我们在从属服务器上遇到了损坏的中继 bin 文件(使用 mysqllogbin 来确保)。
我们该怎么办?我们可以删除损坏的 bin 文件,然后重新启动,希望它能重建该文件吗?
有点不知道该做什么,任何帮助都将非常有帮助。
我们正在运行 5.1,有一个主服务器和一个从服务器。
我可能缺少一些信息,或者表达不够清楚,如果是这样,请告诉我,我可以告诉你。
答案1
SHOW SLAVE STATUS\G
Relay_Master_Log_File
记录和显示的值Exec_Master_Log_Pos
,它们显示主服务器二进制日志中成功执行的最后一个位置。
使用 CHANGE MASTER 使从属服务器从该点再次复制二进制日志,并用新的中继日志替换:
STOP SLAVE;
CHANGE MASTER TO
master_log_file='<Relay_Master_Log_File>',
master_log_pos=<Exec_Master_Log_Pos>;
-- replace those two tags with the values you recorded earlier
START SLAVE;
答案2
如果损坏了,您可以尝试跳过 1 条记录。您可以这样做:
set global sql_slave_skip_counter=1; start slave;
然后做
show slave status\G
看看是否还可以。
您可以重复此操作几次,直到它开始正确复制。
另一方面,如果您觉得丢失了太多数据并且从属服务器不同步,那么您可以对主服务器执行新的 mysqldump 来重新同步它们。
最后,maatkit 有一个同步工具,它将对两个表进行校验并尝试为您同步它们。