Error number: MY-013504; Symbol: ER_WARN_RPL_RECOVERY_NO_ROTATE_EVENT_FROM_MASTER_EOF; SQLSTATE: HY000
Message: Server was not able to find a rotate event from master server to initialize relay log recovery for channel ‘%s’. Skipping relay log recovery for the channel.
错误说明:
MySQL 数据库错误 ER_WARN_RPL_RECOVERY_NO_ROTATE_EVENT_FROM_SOURCE_EOF(错误号:MY-013504,SQLSTATE:HY000)指出,在加载源日志中发现已到达了文件末尾,但是未检测到 rotate 事件,因而无法正确进行恢复操作。
当一个MySQL实例下如果有多个MySQL用户,一个用户在数据表上的更新或者删除操作,这个操作会先写入SQL日志,然后客户端会读取SQL日志,以实现多个MySQL实例的数据同步,然而,在进行日志恢复时,如果找不到 roate 事件,就会导致ER_WARN_RPL_RECOVERY_NO_ROTATE_EVENT_FROM_SOURCE_EOF错误,无法正确进行数据恢复操作。
解决方法:
1. 首先确定原因,通过排查 MySQL 日志及服务器状态,搜索与错误信息相关的内容,确定错误的原因,并采取相应的解决措施。
2. 重新加载 MySQL 数据:若存在日志文件或者备份文件,可尝试通过将错误的更新到被修改或删除原数据库上,重新将数据文件复制或者恢复。
3. 将建议级别更改为 INFO:如果 ER_WARN_RPL_RECOVERY_NO_ROTATE_EVENT_FROM_SOURCE_EOF 错误在不应该发生的情况下发生,应将错误报警级别更改为 INFO,以便给出更明确的提示信息,加强错误信息处理能力。
4. 适当增加 binlog_expire_logs_seconds 参数:在部分情况下,ER_WARN_RPL_RECOVERY_NO_ROTATE_EVENT_FROM_SOURCE_EOF 错误本身不会造成数据丢失,因此可以适当将 binlog_expire_logs_seconds 参数增大,以便有效提升日志备份的效率。
5. 使用 –stop-never 恢复日志模式:开启 –stop-never 恢复日志模式时,MySQL 会在检测到 rotate 事件后恢复 binlog 日志,而无需等待服务完全停止,对某些只能在下线情况下恢复的应用,可尝试开启 –stop-never 模式,以便快速恢复 binlog 日志。