请输入
菜单

数据库损坏修复方法

下载

1. 基本的修复方法

1) 修改 my.ini 添加参数

innodb_force_recovery=1

2) 依次尝试修改为 123456的时候,数据库是否能启动成功

3) 如果数据启动成功,导出数据库脚本

4) 把参数注释掉,COPY一个新的正常的数据库data文件过来,重新启动数据库,然后创建新的数据库并恢复脚本

 

2. 重建数据库表结构,导出表空间,覆盖ibd文件,然后重新导表空间

1) 前提条件:有备库,并且表结构与现有表结构一致,没有删除或者添加过字段

2) 替换备库,并启动数据库

3) 分别生成该导出的表空间和导入表空间的SQL脚本

-- 执行下面的语句,生成导出表空间的语句,复制出来并保存

SELECT

CONCAT('ALTER TABLE ',TABLE_NAME,' DISCARD TABLESPACE;')  AS sql_discard

FROM information_schema.TABLES

WHERE TABLE_SCHEMA='ldcrm' AND TABLE_TYPE='BASE TABLE' AND `ENGINE`='InnoDB';

 

-- 执行下面的语句,生成导表空间的语句,复制出来并保存

SELECT

CONCAT('ALTER TABLE ',TABLE_NAME,' IMPORT TABLESPACE;') AS sql_import

FROM information_schema.TABLES

WHERE TABLE_SCHEMA='ldcrm' AND TABLE_TYPE='BASE TABLE' AND `ENGINE`='InnoDB';

4) 在当前数据库执行下面的语句:忽略表之间的约束关系

SET FOREIGN_KEY_CHECKS=0;

5) 运行上面步骤3生成的导出表空间的脚本,分离数据库表和数据

6) 搜索损坏数据库文件中所有 .ibd 后缀的文件,复制出来覆盖到当前数据库

7) 运行上面生成的导入表空间的脚本,导入表空间

8) 在当前数据库执行下面的语句:取消忽略表之间的约束关系

SET FOREIGN_KEY_CHECKS=1;

9) 恢复成功。此时也可以导出数据库脚本,再重新恢复一下。

 

 

上一个
数据库常用表介绍
下一个
触发器和存储过程的基本概念和应用案例
最近修改: 2025-08-12