Error number: MY-013877; Symbol: ER_IB_MSG_LOG_UPGRADE_FLUSH_FAILED__UNEXPECTED; SQLSTATE: HY000
Message: Cannot upgrade format (v%lu) of redo log files, because InnoDB failed to reach state in which redo log is logically empty. Please use an older version of MySQL – recover and shutdown (with innodb-fast-shutdown
错误说明:
MY-013877 ER_IB_MSG_LOG_UPGRADE_FLUSH_FAILED__UNEXPECTED 是MySQL中一个内部错误代码,该错误发生在用户尝试在MySQL中启用日志跟踪功能时。该错误代码是在MySQL 5.7.7 版本之后引入的,它指定了用户已成功启用了系统日志功能,但在启用log_type变量时无法刷新IB_MSG_LOG(Innodb的消息日志表)。
该错误可能会发生在用户想在自己的MySQL实例中启用日志跟踪功能时,而其表达式变量log_type未能正确调整的情况下。另外,在转移日志时也可能出现此错误。
解决方法:
一种可行的解决方法是,修改当前MySQL会话内的ib_massage_log表。用户必须确保在创建表时没有指定INNODB_MESSAGE_LOG_BLOCK_SIZE参数,否则将无法继续,因为表必须是动态压缩,而不是写到Innodb页中。如果用户在创建过程中使用了INNODB_MESSAGE_LOG_BLOCK_SIZE参数,则可以执行以下步骤来修复:
1. 关闭MySQL服务器
2. 到Innodb页中删除其中的表ib_message_log
3. 重新启动MySQL服务,并再次重新创建ib_message_log表,而不指定block_size参数
4. 重新启用日志跟踪功能,设置其表达式变量log_type
如果以上步骤仍未缓解MY-013877 ER_IB_MSG_LOG_UPGRADE_FLUSH_FAILED__UNEXPECTED错误,用户可以启用MySQL大部分错误代码的自动修复工具来解决该问题。但不建议用户继续尝试该工具,因为可靠性和可恢复性的风险,最好的方法是将数据库备份和恢复,以确保数据完整性。