首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql错误的bytesec: 0-0-0在链接开始:0

mysql错误的bytesec: 0-0-0在链接开始:0
EN

Database Administration用户
提问于 2014-06-13 00:41:50
回答 1查看 2.3K关注 0票数 3

我有几个已损坏的MySQL (MyISAM)表。运行检查表mytable返回:

代码语言:javascript
复制
> +-----------------+-------+----------+----------------------------------- |

> 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中的大多数剩余行显然都来自其他损坏的表之一。

是否有希望从这样的表格中恢复数据?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2014-06-13 05:08:52

我的哀悼

MyISAM仅在MyISAM密钥缓冲区中缓存索引页。MyISAM从不缓存数据。注意检查表中的消息是如何只提到数据文件(即.MYD文件)的。

因为MyISAM数据完全依赖于操作系统,所以行数据只能缓存在操作系统中。崩溃发生时,损坏的MyISAM表有打开的文件句柄(无论是mysqld崩溃还是崩溃的OS )

无法恢复数据。

未来的考虑事项

切换到InnoDB

将来,请对所有表使用InnoDB。InnoDB对崩溃有更高的容忍度,因为它有事务日志和双写缓冲区来恢复已提交但尚未写入的数据,以及用于回滚未提交事务的回滚段和撤消日志。

仍然希望使用MyISAM

  • 您应该定期备份MyISAM。
  • 即使不使用复制,也应该启用二进制日志。这样,您可以使用MyISAM表的备份,并使用二进制日志来重播插入、更新和删除,直到崩溃之前。
  • 您应该设置MySQL回复,以便奴隶拥有相同表的良好副本。

试试看!!

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/68187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档