介绍
我是本际云服务器推荐网的小编小本本,在MySQL数据库维护工作中,表数据损坏是一种非常糟糕的情况。本文将针对两种具有代表性的情况进行模拟,并介绍相应的解决方法。

状况一:系统表损坏
如果发生了数据库系统表损坏,首先登录备库查看系统表是否正常。如果有备库,且备库是正常的,可以进行VIP切换,再使用备库备份重建原主库。当然,情况也可能更糟糕,也就是主备库系统表同时损坏。这时,可以尝试使用/usr/local/mysql/share下.sql脚本文件进行重建。具体步骤为:
- 模拟系统表损坏。
- 重启动数据库,无法正常启动。
- 出现错误日志。
- 修改参数文件,添加innodb_force_recovery=6,强制启动数据库,存在丢失少量数据风险。
- 修改参数文件,还原innodb_force_recovery=0,再重新启动。
- 删除损坏表。
- 进入系统目录,查看创建系统表脚本mysql_system_tables.sql。
- 登录数据库,进行表结构创建。
- 再次进行重启动数据库,加载数据。
状况二:数据表损坏(InnoDB)
如果数据表损坏,同样首先要登录备库查看是否正常。如果备库正常,进行VIP切换后,可以通过备库的备份来重建原主库。然而,如果主备库数据表同时损坏,只能尽可能降低损失,最大限度的恢复数据。可以通过设定参数innodb_force_recovery级别,选择尽可能低的丢失数据风险,启动数据库后,进行数据表的恢复。具体步骤为:
- InnoDB表文件损坏恢复方法。
- 模拟表数据文件.ibd损坏。
- 无法登录数据库,log出现错误。
- 尝试备份损坏表,无法连接。
- 参数文件添加innodb_force_recovery=4,强制启动数据库。
- 进行损坏表的备份,只能备份出正常数据。
- 删除损坏表。
- 将参数innodb_force_recovery=4清除,重启动数据库后,进行数据导入。
需要说明的是:innodb_force_recovery=4代表相对比较安全,只有一些在损坏的多带带页面上的数据会丢失。如果是innodb_force_recovery=6,数据库页将被留在一个陈旧的状态,这个状态反过来可以引发对B树和其它数据库结构的更多破坏。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6437.html
