当前位置:  开发笔记 > 后端 > 正文

如何修复InnoDB表?

如何解决《如何修复InnoDB表?》经验,为你挑选了3个好方法。

我们(显然)昨晚的Solaris MySQL数据库引擎执行得很糟糕.至少有一些InnoDB表已损坏,事务日志中的时间戳乱序错误,以及有关索引损坏的特定错误.

我们知道可用于MyISAM表修复的工具,但找不到InnoDB的任何内容.

附注:尝试表优化(在我尝试重建损坏的索引时)会导致数据库服务器崩溃.



1> Jon Topper..:

首先停止服务器并对光盘进行成像.只有一次射击是没有意义的.然后看看这里.


.只有一次射击是没有意义的.然后看看

2> 小智..:

停止您的应用程序...或停止您的从属设备,以便不添加新行

create table  like ;
insert  select * from ;
truncate table  ;
insert  select * from ;

重启服务器或从服务器


不知道为什么会这样,但它解决了我的问题.

3> jpetazzo..:

以下解决方案的灵感来自Sandro的上述提示.

警告:虽然它对我有用,但我不知道它是否适合你.

我的问题如下:从表中读取一些特定的行(让我们调用这个表broken)会使MySQL崩溃.甚至SELECT COUNT(*) FROM broken会杀了它.我希望你PRIMARY KEY在这张桌子上有一个(在下面的例子中,它是id).

    确保你有一个损坏的MySQL服务器的备份或快照(以防万一你想回到第1步并尝试别的东西!)

    CREATE TABLE broken_repair LIKE broken;

    INSERT broken_repair SELECT * FROM broken WHERE id NOT IN (SELECT id FROM broken_repair) LIMIT 1;

    重复步骤3直到它崩溃数据库(您可以使用LIMIT 100000然后使用较低的值,直到使用LIMIT 1崩溃数据库).

    看看你是否拥有所有东西(你可以SELECT MAX(id) FROM broken与行数比较broken_repair).

    此时,我显然已经拥有了所有行(除了那些可能被InnoDB野蛮截断的行).如果你错过了一些行,你可以尝试添加OFFSETLIMIT.

祝好运!

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有