1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

MySQL维护之–表损坏如何挽回

介绍

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

MySQL维护之--表损坏如何挽回

状况一:系统表损坏

如果发生了数据库系统表损坏,首先登录备库查看系统表是否正常。如果有备库,且备库是正常的,可以进行VIP切换,再使用备库备份重建原主库。当然,情况也可能更糟糕,也就是主备库系统表同时损坏。这时,可以尝试使用/usr/local/mysql/share下.sql脚本文件进行重建。具体步骤为:

  1. 模拟系统表损坏。
  2. 重启动数据库,无法正常启动。
  3. 出现错误日志。
  4. 修改参数文件,添加innodb_force_recovery=6,强制启动数据库,存在丢失少量数据风险。
  5. 修改参数文件,还原innodb_force_recovery=0,再重新启动。
  6. 删除损坏表。
  7. 进入系统目录,查看创建系统表脚本mysql_system_tables.sql。
  8. 登录数据库,进行表结构创建。
  9. 再次进行重启动数据库,加载数据。

状况二:数据表损坏(InnoDB)

如果数据表损坏,同样首先要登录备库查看是否正常。如果备库正常,进行VIP切换后,可以通过备库的备份来重建原主库。然而,如果主备库数据表同时损坏,只能尽可能降低损失,最大限度的恢复数据。可以通过设定参数innodb_force_recovery级别,选择尽可能低的丢失数据风险,启动数据库后,进行数据表的恢复。具体步骤为:

  1. InnoDB表文件损坏恢复方法。
  2. 模拟表数据文件.ibd损坏。
  3. 无法登录数据库,log出现错误。
  4. 尝试备份损坏表,无法连接。
  5. 参数文件添加innodb_force_recovery=4,强制启动数据库。
  6. 进行损坏表的备份,只能备份出正常数据。
  7. 删除损坏表。
  8. 将参数innodb_force_recovery=4清除,重启动数据库后,进行数据导入。

需要说明的是:innodb_force_recovery=4代表相对比较安全,只有一些在损坏的多带带页面上的数据会丢失。如果是innodb_force_recovery=6,数据库页将被留在一个陈旧的状态,这个状态反过来可以引发对B树和其它数据库结构的更多破坏。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6437.html