我有几个已损坏的MySQL (MyISAM)表。运行检查表mytable返回:
> +-----------------+-------+----------+----------------------------------- |
> clldata.mytable | check | warning | Table is marked as crashed
> clldata.mytable | check | warning | Size of datafile is: 4654864 Should be: 4602520
> clldata.mytable | check | error | Wrong bytesec: 0-0-0 at linkstart: 0
> clldata.mytable |
> check | error | Corrupt
> |
> +-----------------+-------+----------+-------------------------------------------------------+4行设置(0.01秒)
运行修复表mytable会截断表中大约90%的行( .MYD文件的大小也缩小了90%)。而且mytable中的大多数剩余行显然都来自其他损坏的表之一。
是否有希望从这样的表格中恢复数据?
发布于 2014-06-13 05:08:52
MyISAM仅在MyISAM密钥缓冲区中缓存索引页。MyISAM从不缓存数据。注意检查表中的消息是如何只提到数据文件(即.MYD文件)的。
因为MyISAM数据完全依赖于操作系统,所以行数据只能缓存在操作系统中。崩溃发生时,损坏的MyISAM表有打开的文件句柄(无论是mysqld崩溃还是崩溃的OS )
无法恢复数据。
将来,请对所有表使用InnoDB。InnoDB对崩溃有更高的容忍度,因为它有事务日志和双写缓冲区来恢复已提交但尚未写入的数据,以及用于回滚未提交事务的回滚段和撤消日志。
试试看!!
https://dba.stackexchange.com/questions/68187
复制相似问题