首页 > 解决方案 > MySQL,mysqlbinlog加载错误后恢复数据库?

问题描述

我正在从初始转储文件和转储后创建的二进制日志集复制 MySQL 数据库。

转储的初始负载很好。然后,在使用 mysqlbinlog 加载二进制日志时,会发生其中一个文件将失败,例如,出现“服务器已消失”错误。

有什么方法可以从失败的 mysqlbinlog 运行中恢复,或者数据库副本现在是否已无法修复?我知道哪个日志失败了,但我不能只是重新运行该日志,因为错误可能发生在日志中的任何查询中。

有没有办法处理这个向前发展?

我可以首先考虑将出现错误的可能性降到最低,但如果加载过程中的任何 MySQL 问题完全破坏了数据库,这似乎不是一个恢复过程(或主/从过程)。我觉得我一定是错过了什么。

标签: mysqlmysqlbinlog

解决方案


我会检查max_allowed_packet. 默认情况下它非常小(4MB 或 64MB 取决于 MySQL 版本)。你可能需要增加它。

请注意,您需要在服务器和应用二进制日志的客户端中增加该选项。数据包大小的有效限制是服务器和客户端的配置值中的较小者。

即使 binlog 通过复制成功,在重放 binlog 时也可能不会成功,因为您需要mysql在指定--max-allowed-packet选项时重放。

有关您遇到的错误的更多说明,请参阅https://dev.mysql.com/doc/refman/8.0/en/gone-away.html


如果您不知道上次成功的 binlog 事件的 binlog 坐标,则必须重新开始:删除部分恢复的实例并再次从备份中恢复,然后应用 binlog。


推荐阅读