17.2 解决腐败问题

有时操作系统或硬件会在不会导致数据库错误的位置损坏数据文件页面,但会阻止mysqlbackup完成:

170225 10:46:18 PCR1    INFO: Re-reading page at offset 0 in D:/temp/5.7_source/test/emp2.ibd
170225 10:46:18 PCR1    INFO: Re-reading page at offset 0 in D:/temp/5.7_source/test/emp2.ibd
...
170225 10:46:26 PCR1 ERROR: Page at offset 0 in D:/temp/5.7_source/test/emp2.ibd seems corrupt!

损坏问题可能有不同的原因。以下是一些处理它的建议:

  • 如果 MySQL 服务器太忙,就会出现此问题。在尝试其他解决方案之前,您可能希望使用以下mysqlbackup选项 的一些非默认设置再次执行备份:

    • --page-reread-time= MS。尝试将该值设置为0.05,以便在校验和失败期间更快地重新读取。

    • --page-reread-count= retry_limit。尝试将该值设置为1000,以允许在 MySQL Enterprise Backup 放弃并抛出错误之前在校验和失败期间进行更多重读。

  • 即使磁盘上的数据实际上没有损坏,内存中的加扰数据也会导致问题。重启数据库服务器和存储设备,查看问题是否存在。

  • 如果在数据库服务器和存储设备重启后问题仍然存在,您的磁盘可能真的损坏了。您可能会考虑从较早的备份中恢复数据并“前滚”最近的更改以使数据库恢复到当前状态。

  • 如果你想让 MySQL Enterprise Backup 在你去调查问题的根本原因之前完成备份,你可以通过在服务器上运行 innochecksum实用程序来重写磁盘上的校验和值:

    innochecksum --no-checksum --write=crc32

    该选项--no-checksum禁用该工具的验证功能,该选项 --write=crc32使 innochecksum重写磁盘上的校验和值。

重要提示:不要将腐败问题视为小烦恼。找出导致损坏的系统问题——但是,此类故障排除超出了本手册的范围。