在 mysql 的配置文件 my.cnf 里找到 [mysqld] 字段下, 添加 innodb_force_recovery = 1
如果 innodb_force_recovery = 1 不生效, 则可尝试 2--6 几个数字然后重启 mysql, 重启成功. 然后使用 mysqldump 或 pma 导出数据, 执行修复操作等. 修复完成后, 把该参数注释掉, 还原默认值 0. 配置文件的参数: innodb_force_recoveryinnodb_force_recovery 影响整个 InnoDB 存储引擎的恢复状况. 默认为 0, 表示当需要恢复时执行所有的恢复操作 (即校验数据页 / purge undo/insert buffer merge/rolling back&forward), 当不能进行有效的恢复操作时, mysql 有可能无法启动, 并记录错误日志; innodb_force_recovery 可以设置为 1-6, 大的数字包含前面所有数字的影响. 当设置参数值大于 0 后, 可以对表进行 select,create,drop 操作, 但 insert,update 或者 delete 这类操作是不允许的.
具体介绍
1(SRV_FORCE_IGNORE_CORRUPT): 忽略检查到的 corrupt 页.
2(SRV_FORCE_NO_BACKGROUND): 阻止主线程的运行, 如主线程需要执行 full purge 操作, 会导致 crash.
3(SRV_FORCE_NO_TRX_UNDO): 不执行事务回滚操作.
4(SRV_FORCE_NO_IBUF_MERGE): 不执行插入缓冲的合并操作.
5(SRV_FORCE_NO_UNDO_LOG_SCAN): 不查看重做日志, InnoDB 存储引擎会将未提交的事务视为已提交.
6(SRV_FORCE_NO_LOG_REDO): 不执行前滚的操作.
三, 解析方案
一般修复方法参考:
第一种方法
建立一张新表: create table demo_bak #和原表结构一样, 只是把 INNODB 改成了 MYISAM. 把数据导进去 insert into demo_bak select * from demo; 删除掉原表: drop table demo; 注释掉 innodb_force_recovery 之后, 重启. 重命名: rename table demo_bak to demo; 最后改回存储引擎: alter table demo engine = innodb
第二种方法
另一个方法是使用 mysqldump 将表格导出, 然后再导回到 InnoDB 表中. 这两种方法的结果是相同的. 备份导出 (包括结构和数据):mysqldump -uroot -p123 test> test.sql 还原方法 1:use test;source test.sql 还原方法 2(系统命令行):mysql -uroot -p123 test <test.sql; 注意, CHECK TABLE 命令在 InnoDB 数据库中基本上是没有用的.
第三种方法
1, 配置 my.cnf
配置 innodb_force_recovery = 1 或 2--6 几个数字, 重启 MySQL
2, 导出数据脚本
mysqldump -uroot -p123 test> test.sql 导出 SQL 脚本. 或者用 Navicat 将所有数据库 / 表导入到其他服务器的数据库中. 注意: 这里的数据一定要备份成功. 然后删除原数据库中的数据.
3, 删除 ib_logfile0,ib_logfile1,ibdata1
备份 MySQL 数据目录下的 ib_logfile0,ib_logfile1,ibdata1 三个文件, 然后将这三个文件删除
4, 配置 my.cnf
将 my.cnf 中 innodb_force_recovery = 1 或 2--6 几个数字这行配置删除或者配置为 innodb_force_recovery = 0, 重启 MySQL 服务
5, 将数据导入 MySQL 数据库
mysql -uroot -p123 test < test.sql; 或者用 Navicat 将备份的数据导入到数据库中. 此种方法下要注意的问题: 1,ib_logfile0,ib_logfile1,ibdata1 这三个文件一定要先备份后删除; 2, 一定要确认原数据导出成功了 3, 当数据导出成功后, 删除原数据库中的数据时, 如果提示不能删除, 可在命令行进入 MySQL 的数据目录, 手动删除相关数据库的文件夹或者数据库文件夹下的数据表文件, 前提是数据一定导出或备份成功.
来源: http://www.bubuko.com/infodetail-2755298.html