西西河

主题:【原创】用 TMD 文件修复损坏的 mysql 的数据库某个表 -- 铁手

共:💬6 🌺7
分页树展主题 · 全看首页 上页
/ 1
下页 末页
  • 家园 【原创】用 TMD 文件修复损坏的 mysql 的数据库某个表

    今天数据库中的某个表出现故障,写出修复过程,可能对他人有用。

    今天数据库出现问题,其中的一个表出现故障,无法访问。用 repair table, 错误信息为没有这个表。用 mysqlcheck,同样的错误信息。关闭数据库服务,用 myisamchk,还是同样的错误信息。这里说明一下,mysqlcheck 用在数据库服务器在运行的时候,而 myisamchk 必须是在数据库服务器被关闭的时候。因为它可能会和数据库本身的操作起冲突,会导致你的错误还没被修复,而新的损坏确已经出现。务必务必!!

    询问服务商的技术支持,回复是数据文件不见了,损伤无法修复,可能的话,需要从备份中恢复数据,并问我有没有备份。

    想来想去,不是很死心。因为用备份的内容的话,至少有一天的内容就会很难恢复。铁手会很没面子的!

    然后就到服务器去看了看,发现在数据库的数据目录中,那个表的内容的确是不见了,但是却出现了一个从来没见过的文件后缀 .TMD 我当时正恼火,一看到这个后缀,还真是不由自主的乐了。还有这样的名字,不知道取这个名的是不是中国人,当时是不是也很恼火。

    正常情况下,一个表有三个文件支持,比如表 dddd:

    dddd.MYI --> 索引文件

    dddd.MYD --> 数据内容文件

    dddd.frm --> 表结构文件

    这个时候,却变成了

    dddd.MYI --> 索引文件

    dddd.TMD --> ????这个是什么东东???

    dddd.frm --> 表结构文件

    mysql 的网站上没找到相关说明,只看到说是修复损坏的表的时候,有一个选项是强制覆盖这个文件,这个文件是什么,有什么用,却没有找到说明。

    网上查找,也是不够幸运,没找到说明,也没找到这种情况下该怎么修复。

    看文件大小觉得倒是和原来的数据文件有关联,尺寸不算小。于是该名为 dddd.MYD,先不管是不是。

    结果是没效果:myisamchk 老是抱怨没有这个文件,而这个文件却是实实在在的存在在那里。

    差点就放弃了。

    想想可能还是用备份吧。决定先把目前的先备份,然后再用原来的备份,然后再想办法把半丢没丢的内容找回来。

    在关闭数据库服务器的情况下,用 mysqldump

    完了以后,嘿,没想到,这个表居然活过来了!原来老说不存在的,现在也认为是存在了。看了看表的内容,好象也没丢失什么。

    总结一下:

    关闭数据库服务器 shut down mysql

    改文件后缀 .TMD --> .MYD

    mysqldump 这个表

    重启mysql, restart mysql

    然后 check table 确认无误。

    不太理解的是,在DUMP之前,数据文件明明存在(可以list),不知道为什么myisamchk却老是认为没有。是不是和文件的LOCK有关?不过不重要了。

分页树展主题 · 全看首页 上页
/ 1
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河