kill -9中止MySQL服务进程,所有的这些都可能会毁坏MySQL的数据文件。如果在被干扰时,服务正在改变文件,文件可能会留下错误的或不一致的状态。因为这样的毁坏有时是不容易被发现的,当你发现这个错误时可能是很久以后的事了。于是,当你发现这个问题时,也许所有的备份都有同样的错误。这里,甲驭科技数据恢复中心小编给大家介绍一下mysql数据库损坏修复方法。

MySQL参考手册的第十五章讲述了MySQL自带的myisamchk的功能,以及如何使用它检查和修复你的MySQL数据文件。虽然这一章对于每个想要搭建一个强壮的MySQL服务的人都是推荐阅读的,我们还是有必要在这里对其中的要点进行讨论。

myisamchk程序对用来检查和修改的MySQL数据文件的访问应该是唯一的。如果MySQL服务正在使用某一文件,并对myisamchk正在检查的文件进行修改,myisamchk会误以为发生了错误,并会试图进行修复--这将导致MySQL服务的崩溃!这样,要避免这种情况的发生,通常我们需要在工作时关闭MySQL服务。作为选择,你也可以暂时关闭服务以制作一个文件的拷贝,然后在这个拷贝上工作。当你做完了以后,重新关闭服务并使用新的文件取代原来的文件(也许你还需要使用期间的变更日志)。

MySQL数据目录不是太难理解的。每一个数据库对应一个子目录,每个子目录中包含了对应于这个数据库中的数据表的文件。每一个数据表对应三个文件,它们和表名相同,但是具有不同的扩展名。tblName.frm文件是表的定义,它保存了表中包含的数据列的内容和类型。tblName.MYD文件包含了表中的数据。tblName.MYI文件包含了表的索引(例如,它可能包含lookup表以帮助提高对表的主键列的查询)。

myisamchk(在MySQL的bin目录下)并提供文件的位置和表名,或者是表的索引文件名:

myisamchk /usr/local/mysql/var/dbName/tblName

myisamchk /usr/local/mysql/var/dbName/tblName.MYI

  上面的两个命令都可以执行对指定表的检查。要检查数据库中所有的表,可以使用通配符:

myisamchk /usr/local/mysql/var/dbName/*.MYI

myisamchk /usr/local/mysql/var/*/*.MYI

myisamchk将对表文件执行普通的检查。如果你对一个表有怀疑,但是普通的检查不能发现任何错误,你可以执行更彻底的检查(但是也更慢!),这需要使用--extend-check选项:

myisamchk --extend-check /path/to/tblName

MySQL服务是关闭的。

--这通常是上一次修复操作遗留下来的。

  这三种修复方法如下所示:

myisamchk --recover --quick /path/to/tblName

myisamchk --recover /path/to/tblName

myisamchk --safe-recover /path/to/tblName

;而最后一种是最慢的,用来修复一些其它方法所不能修复的问题。

MySQL数据文件

  如果上面的方法无法修复一个被损坏的表,在你放弃之前,你还可以试试下面这两个技巧:

(*.MYI)发生了不可修复的错误,甚至是丢失了这个文件,你可以使用数据文件(*.MYD)和数据格式文件(*.frm)重新生成它。首先制作一个数据文件(tblName.MYD)的拷贝。重启你的MySQL服务并连接到这个服务上,使用下面的命令删除表的内容:

mysql DELETE FROM tblName;

(tblName.MYD)覆盖新的(空)数据文件。最后,使用myisamchk执行标准的修复(上面的第二种方法),根据表的数据的内容和表的格式文件重新生成索引数据。

(tblName.frm)丢失了或者是发生了不可修复的错误,但是你清楚如何使用相应的CREATE TABLE语句来重新生成这张表,你可以重新生成一个新的.frm文件并和你的数据文件和索引文件(如果索引文件有问题,使用上面的方法重建一个新的)一起使用。首先制作一个数据和索引文件的拷贝,然后删除原来的文件(删除数据目录下有关这个表的所有记录)。

MySQL服务并使用当初的CREATE TABLE文件建立一个新的表。新的.frm文件应该可以正常工作了,但是最好你还是执行一下标准的修复(上面的第二种方法)。

mysql语句,用 CHECK TABLE $table; //其中$table代表数据表的名字,检测表是否损坏,如果损坏可以REPAIR TABLE $table 来修复,如果一次不行,可以多修复几次!

WIN服务器,可以先登陆DB服务器,进入此路径,不用进mysql里

D:\CD MYSQL
D:\mysql>CD BIN
D:\mysql\bin>MYISAMCHK -r d:\mysql\data\guild\msg_table.myi(msg_table)
- check key delete-chain
- check record delete-chain
- recovering (with sort) MyISAM-table 'd:\mysql\data\guild\msg_table.myi'
Data records: 23
- Fixing index 1
D:\mysql\bin>MYISAMCHK --safe-recover d:\mysql\data\guild\msg_table.myi
- recovering (with keycache) MyISAM-table 'd:\mysql\data\guild\msg_table.myi'
Data records: 89
D:\mysql\bin>
mysql数据库:
use guild;
desc msg_table; 看msg_table有没有坏
MYSQL数据库中打命令检查!

SQL数据库丢失,数据库损坏,数据库备份损坏,数据库日志损坏等故障下的数据恢复。赤兔SQL Serve数据库恢复软件下载地址:http://www.sysfix.cn/windowschanpin/shujuhuifu/shujukuleihuifu/2014/0616/1240.html