MySQL的InnoDB数据文件损坏如何修复

MySQL的InnoDB数据文件损坏如何修复,第1张

因为被破坏的地方只在索引的部分,所以当使用innodb_force_recovery = 1运行InnoDB时, *** 作如下:

执行check,repair table 都无效

alter table email_status engine =myisam#也报错了,因为模式是innodb_force_recovery =1。

ERROR 1025 (HY000): Error on rename of '...' to '....' (errno: -1)

建立一张表:create table email_status_bak #和原表结构一样,只是把INNODB改成了MYISAM。把数据导进去insert into email_status_bak select * from email_status

删除掉原表:

drop table email_status

注释掉innodb_force_recovery 之后,重启。

重命名:

rename table edm_email_status_bak to email_status

最后该回存储引擎

alter table edm_email_status engine = innodb

总结:

这里的一个重要知识点就是 对 innodb_force_recovery 参数的理解了,要是遇到数据损坏甚至是其他的损坏。可能上面的方法不行了,需要尝试另一个方法:insert into tb select * from ta limit X;甚至是dump出去,再load回来。

InnoDB表损坏

InnoDB拥有内部恢复机制,假如数据库崩溃了,InnoDB通过从最后一个时间戳开始运行日志文件,来尝试修复数据库。

大多数情况下会修复成功,而且整个过程是透明的。

假如InnoDB自行修复失败,那么数据库将不能启动。

在继续 *** 作前,先浏览下MySQL的日志文件,确定数据库是因为InnoDB表的损坏而崩溃。

有一种方法是更新InnoDB的日志文件计数器以跳过引起崩溃的查询,这种情况下,将造成数据的不一致性而且会经常使主从复制中断。

一旦确定MySQL因为InnoDB表损坏无法启动时,就可以按照以下5步进行修复:

1.添加如下配置到/etc/my.cnf文件中

innodb_force_recovery = 4

2.这时就可以重新启动数据库了,在innodb_force_recovery配置的作用,所有的插入与更新 *** 作将被忽略

3.导出所有的数据表

4.关闭数据库并删除所有数据表文件及目录,再运行 mysql_install_db来创建MySQL默认数据表

5.在/etc/my.cnf中删除innodb_force_recovery这一行,再启动MySQL(这时MySQL正常启动)

6.从第3步备份的文件中恢复所有的数据。

您好,很高兴为您解答。

可能是InnoDB数据文件损坏。先不要继续 *** 作了,先把数据和配置文件备份一下防止乱弄把数据全弄坏了,然后再用副本试着恢复。

关于InnoDB的数据恢复 错误日志提示参照下面的网址:

http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.html

可以试着设定不同的innodb_force_recovery系统变量来重新启动MySQL 看看是不是有可以启动起来的值


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6182270.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-17
下一篇 2023-03-17

发表评论

登录后才能评论

评论列表(0条)

保存