MySQL中MyISAM文件损坏时的一种修复方法

来源:互联网 发布:淘宝天猫优惠券网站 编辑:程序博客网 时间:2024/05/27 09:45

文章来源:http://blog.csdn.net/huanglong8/article/details/53837822

这里以Navicat应用做为工具。

MySQL在新建表时,在选项一栏会选择引擎,有很多种,关于每种的意义,大家可以自己查。

默认是Innodb,但是我们项目中使用的是MyISAM,所以这里仅介绍MyISAM的情况,Innodb被收购后,MyISAM算式MySQL主打的数据格式。

MyISAM的格式存储分为三个文件。.frm,.MYD,.MYI其中各文件的意义为:

  • .frm 表示数据表结构,可以理解为Create Table
  • .MYD 表示数据表的实际数据内容,就是记录集,My data的缩写估计。
  • .MYI 表示数据表的索引结构,在Navicat下可以看到每个表都是自己的索引,这个就是存它用的。My Index。

    现在我们来谈谈坏表。

    坏表的原因很多,不过我猜的应该和大量的IO操作有关,在项目中遇到的,以Windows下最多出现,Linux下确实很少或几乎没有,原因我也在找,但还不知道,仅是靠修复来保证用户使用了。
    当坏表的时候,在Navicat下是打不开这个表,提示你修复,当然,在实际用户环境下,我们应该提供更好的办法,就是程序化。

    MySQL提供一些工具集,在MySQL/bin目录下,命令行为:

mysqlcheck.exe -r mydatabase -uroot -pmypassword -h127.0.0.1
参数依次是 数据库名,账户,密码,IP地址。这个命令行是一次修复数据库中所有表的,你也可以通过如下命令行修复单个表
mysqlcheck.exe -r mydatabase mytable -uroot -pmypassword -h127.0.0.1

如果通过命令行能修复的话,那么OK,一切都好办,集成到项目中合适的位置即可。但还有一种情况,就是报错,错误内容如下:
Can’t find xxx.MYI 等这样的找不到文件的意思。我们跟去原目录下查看,不出意外的话,你会在原目录中发现有xxx.frm,xxx.MYD,xxx.TMP这三个文件,那么xxx.TMP就是在数据表

损坏前,MYSQL替咱们备份的副本,修改其后缀为MYI,再次使用修复命令即可。当然这是没有异常的情况下。

所以在项目开发过程中,如果使用MySQL,还需要做好充分的架构设计,我个人提出的小白级建议是:

  1. 使用主从数据库,多从负责读,主负责写,主主备份。
  2. 小型项目可以考虑 每次变更表结构或表索引时,对其两个文件的备份。
  3. 做好数据MYD内容的备份,应该实际经验告诉我们,如果数据表损坏了,可以修复,但可能会丢失一部分数据。
0 0
原创粉丝点击