MySQL,mysqlbinlog加载错误后恢复数据库?
MySQL, recover database after mysqlbinlog loading error?
我正在从初始转储文件和转储后创建的二进制日志集复制 MySQL 数据库。
转储的初始加载没有问题。然后,在使用 mysqlbinlog 加载二进制日志时,发生的情况是其中一个文件将失败,例如,出现 "server has gone away" 错误。
是否有任何方法可以从失败的 mysqlbinlog 运行 中恢复,或者数据库副本现在是否已经不可修复地损坏?我知道哪个日志失败了,但我不能只重新运行那个日志,因为错误可能发生在日志中的任何查询中。
有没有办法解决这个问题?
我可以考虑将出现错误的可能性降到最低,但如果有的话,这似乎不是一个恢复过程(或 master/slave 过程)MySQL 加载过程中的问题完全破坏了数据库。我觉得我一定是漏掉了什么。
我会检查 max_allowed_packet
的配置值。默认情况下这是非常小的(4MB 或 64MB,取决于 MySQL 版本)。您可能需要增加它。
请注意,您需要在服务器和应用二进制日志的客户端中增加该选项。数据包大小的有效限制是服务器和客户端配置值的较小。
即使binlog复制成功,重放binlog时也不一定成功,因为需要在指定--max-allowed-packet
选项时用mysql
重放
有关您遇到的错误的更多解释,请参阅 https://dev.mysql.com/doc/refman/8.0/en/gone-away.html。
如果您不知道最后一次成功的 binlog 事件的 binlog 坐标,您将不得不重新开始:删除 partially-restored 实例并再次从备份中恢复,然后应用 binlog。
我正在从初始转储文件和转储后创建的二进制日志集复制 MySQL 数据库。
转储的初始加载没有问题。然后,在使用 mysqlbinlog 加载二进制日志时,发生的情况是其中一个文件将失败,例如,出现 "server has gone away" 错误。
是否有任何方法可以从失败的 mysqlbinlog 运行 中恢复,或者数据库副本现在是否已经不可修复地损坏?我知道哪个日志失败了,但我不能只重新运行那个日志,因为错误可能发生在日志中的任何查询中。
有没有办法解决这个问题?
我可以考虑将出现错误的可能性降到最低,但如果有的话,这似乎不是一个恢复过程(或 master/slave 过程)MySQL 加载过程中的问题完全破坏了数据库。我觉得我一定是漏掉了什么。
我会检查 max_allowed_packet
的配置值。默认情况下这是非常小的(4MB 或 64MB,取决于 MySQL 版本)。您可能需要增加它。
请注意,您需要在服务器和应用二进制日志的客户端中增加该选项。数据包大小的有效限制是服务器和客户端配置值的较小。
即使binlog复制成功,重放binlog时也不一定成功,因为需要在指定--max-allowed-packet
选项时用mysql
重放
有关您遇到的错误的更多解释,请参阅 https://dev.mysql.com/doc/refman/8.0/en/gone-away.html。
如果您不知道最后一次成功的 binlog 事件的 binlog 坐标,您将不得不重新开始:删除 partially-restored 实例并再次从备份中恢复,然后应用 binlog。