视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MySQL损坏数据的恢复(1)_MySQL
2020-11-09 17:13:18 责编:小采
文档


此文档是一位高手同事Hewei的原创实践总结,过是精彩,最后修复损坏数据库取得效果,值得收藏的一篇好文章

环境:windows2003
数据库:mysql
损坏数据文件名:function_products

将数据库内容物理文件直接导入到mysqldata下,每只表各3个文件,依次分别为:.frm .MYD .MYI

首先我第一想到的是去网上搜索,寻找类似的工具,试图通过工具来恢复已损坏的文件,于是我在GOOGLE上查找,找到一款名为MySQLRecovery 的工具,安装后我用其进行恢复,只可惜效果太不理想,几十M大的数据文件,恢复之后它提示我竟然只有几十K,令我吐血...
我又想到了mysql下应有自己本身的修复程序等,于是想通过其来进行恢复,心想应不会太差劲吧,在网上查找了资料,提示:
由于临时断电,使用kill -9中止MySQL服务进程,或者是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服务是关闭的。

我在win2003下通过命令提示符,输入:

注:此为记录我当时操作的全部过程

D:Documents and SettingsAdministrator>c:

C:>cd mysql

C:mysql>cd data

C:mysqldata>cd hw_enterprice

C:mysqldatahw_enterprice>myisamchk function_products.frm'myisamchk' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

C:mysqldatahw_enterprice>cd

C:>cd mysql

C:mysql>cd bin

下载本文
显示全文
专题