MySQL数据库中部分数据损坏恢复过程

苍蓝困兽

苍蓝困兽

2016-01-29 14:51

MySQL数据库中部分数据损坏恢复过程,MySQL数据库中部分数据损坏恢复过程

前几天因为MySQL数据库部分数据损坏原因,我尝试了下恢复数据,之后整理以下文档,供各位参考,以备各位同事以后如有类似问题,可以少走些弯路,尽快解决问题。

环境:Windows2003

数据库:MySQL

损坏数据文件名:function_products

将数据库内容物理文件直接导入到mysqldata下,每只表各3个文件,依次分别为:.frm .myd .myi。首先我第一想到的是去网上搜索,寻找类似的工具,试图通过工具来恢复已损坏的文件,于是我在google上查找,找到一款名为mysqlrecovery的工具,安装后我用其进行恢复,只可惜效果太不理想,几十MB大的数据文件,恢复之后它提示我竟然只有几十KB。我又想到了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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/mysql/)

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

% myisamchk /usr/local/mysql/var/dbname/*.myi

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/mysql/)

要检查所有数据库中的所有表,可以使用两个通配符:

% myisamchk /usr/local/mysql/var/*/*.myi

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

% myisamchk --extend-check /path/to/tblname

对错误的检查是没有破坏性的,这意味着你不必担心执行对你的数据文件的检查会使已经存在的问题变得更糟。另一方面,修复选项,虽然通常也是安全的,但是它对你的数据文件的更改是无法撤消的。因为这个原因,我们强烈推荐你试图修复一个被破坏的表文件时首先做个备份,并确保在制作这个备份之前你的MySQL服务是关闭的。

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

注:此为记录我当时操作的全部过程d:documents and settingsadministratorc:c:cd MySQLc:mysqlcd datac:mysqldatacd hw_enterpricec:mysqldatahw_enterpricemyisamchk function_products.frm'myisamchk' 不是内部或外部命令,也不是可运行的程序或批处理文件。c:mysqldatahw_enterpricecdc:cd mysqlc:mysqlcd bin注:查看myisamchk的帮助信息c:mysqlbinmyisamchkmyisamchk  ver 2.6 for win95/win98 at i32by monty, fo      
展开更多 50%)
分享

猜你喜欢

MySQL数据库中部分数据损坏恢复过程

MySQL mysql数据库
MySQL数据库中部分数据损坏恢复过程

MySQL数据库备份与恢复

编程语言 网络编程
MySQL数据库备份与恢复

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

MySQL数据库和备份与恢复

MySQL mysql数据库
MySQL数据库和备份与恢复

妙用phpMyBackupPro备份恢复Mysql数据库

编程语言 网络编程
妙用phpMyBackupPro备份恢复Mysql数据库

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何使用MYSQL数据库进行备份数据恢复

MySQL mysql数据库
如何使用MYSQL数据库进行备份数据恢复

mysql 数据库设计

编程语言 网络编程
mysql 数据库设计

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

将你的网站从MySQL改为PostgreSQL

将你的网站从MySQL改为PostgreSQL

《唐门》英雄组合技巧详解

《唐门》英雄组合技巧详解
下拉加载更多内容 ↓