mysql - MySQL,mysqlbinlog加载错误后恢复数据库?
问题描述
我正在从初始转储文件和转储后创建的二进制日志集复制 MySQL 数据库。
转储的初始负载很好。然后,在使用 mysqlbinlog 加载二进制日志时,会发生其中一个文件将失败,例如,出现“服务器已消失”错误。
有什么方法可以从失败的 mysqlbinlog 运行中恢复,或者数据库副本现在是否已无法修复?我知道哪个日志失败了,但我不能只是重新运行该日志,因为错误可能发生在日志中的任何查询中。
有没有办法处理这个向前发展?
我可以首先考虑将出现错误的可能性降到最低,但如果加载过程中的任何 MySQL 问题完全破坏了数据库,这似乎不是一个恢复过程(或主/从过程)。我觉得我一定是错过了什么。
解决方案
我会检查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。
推荐阅读
- ruby-on-rails - Rails 路线 - 使用相同的路线添加更多范围
- angular - 'zxing-scanner' 不是已知元素: 1. 如果 'zxing-scanner' 是 Angular 组件,则验证它是否是该模块的一部分
- javascript - 根据视口大小下载js库
- python - 如何在 Python 中更改 .env 文件路径?
- tensorflow - 如何创建自定义 keras 优化器?
- java - Eclipse - 在不关闭浏览器的情况下从控制台终止?
- javascript - 将特定百分比机会添加到某些随机生成的数字范围 0-90 的方法
- javascript - 清理函数?
- authentication - 无需登录即可刷新 Facebook 长寿命令牌
- python - 如何在python中创建由矩阵组成的列表?