11.2 解决腐败问题

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

mysqlbackup: Re-reading page at offset 0 3185082368 in /sqldata/mts/ibdata15
mysqlbackup: Re-reading page at offset 0 3185082368 in /sqldata/mts/ibdata15
mysqlbackup: Error: page at offset 0 3185082368 in /sqldata/mts/ibdata15 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重写磁盘上的校验和值。

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