="t18">你可能在使用MySQL过程中
![](/icons/57339dou.gif)
各种意外导致数据库表
![](/icons/57339de.gif)
损坏
![](/icons/57339dou.gif)
而且这些数据往往是最新
![](/icons/57339de.gif)
数据
![](/icons/57339dou.gif)
通常不可能在备份数据中找到
![](/icons/57339dou2.gif)
本章将继上篇文章中检查出表
![](/icons/57339de.gif)
问题后
![](/icons/57339dou.gif)
告诉你如何修复表
![](/icons/57339yi.gif)
张损坏
![](/icons/57339de.gif)
表
![](/icons/57339de.gif)
症状通常是查询意外中断并且你能看到例如这些
![](/icons/57339cuowu.gif)
:
◆ “tbl_name.frm”被锁定不能改变
![](/icons/57339dou2.gif)
◆ 不能找到文件“tbl_name.MYI”(Errcode :### )
![](/icons/57339dou2.gif)
◆ 从表处理器
![](/icons/57339de.gif)
得到
![](/icons/57339cuowu.gif)
###(此时
![](/icons/57339dou.gif)
![](/icons/57339cuowu.gif)
135是
![](/icons/57339yi.gif)
个例外)
![](/icons/57339dou2.gif)
◆ 意外
![](/icons/57339de.gif)
文件结束
![](/icons/57339dou2.gif)
◆ 记录文件被毁坏
![](/icons/57339dou2.gif)
在这些情况下
![](/icons/57339dou.gif)
你必须修复表
![](/icons/57339dou2.gif)
表
![](/icons/57339de.gif)
修复是
![](/icons/57339yi.gif)
项非常困难
![](/icons/57339de.gif)
工作
![](/icons/57339dou.gif)
很多情况下令人束手无策
![](/icons/57339dou2.gif)
然而
![](/icons/57339dou.gif)
有
![](/icons/57339yi.gif)
些常规
![](/icons/57339de.gif)
知道思想和过程
![](/icons/57339dou.gif)
可以遵循它们来增加修正表
![](/icons/57339de.gif)
机会
![](/icons/57339dou2.gif)
通常
![](/icons/57339dou.gif)
开始是可以用最快
![](/icons/57339de.gif)
修复思路方法
![](/icons/57339dou.gif)
看看能否袖珍故障
![](/icons/57339dou2.gif)
如果发现不成功
![](/icons/57339dou.gif)
可以逐步升级到更彻底
![](/icons/57339de.gif)
但更慢
![](/icons/57339de.gif)
修复思路方法
![](/icons/57339dou2.gif)
如果仍旧难以修复
![](/icons/57339dou.gif)
就应该从备份中恢复了
![](/icons/57339dou2.gif)
在上
![](/icons/57339yi.gif)
章已经详细介绍了这
![](/icons/57339yi.gif)
部分内容
![](/icons/57339dou2.gif)
简单安全
![](/icons/57339de.gif)
修复
为了修复
![](/icons/57339yi.gif)
个表执行下列步骤:
◆ 首先
![](/icons/57339dou.gif)
用--recover,-r选项修正表
![](/icons/57339dou.gif)
并且用--quick
![](/icons/57339dou.gif)
-q选项
![](/icons/57339dou.gif)
来只根据索引文件
![](/icons/57339de.gif)
内容进行恢复
![](/icons/57339dou2.gif)
这样不接触数据文件来修复索引文件
![](/icons/57339dou2.gif)
(-r意味着“恢复模式”)
myisamchk -r -q tbl_nameisamchk -r -q tbl_name
◆ 如果问题仍旧存在
![](/icons/57339dou.gif)
则忽略--quick选项
![](/icons/57339dou.gif)
允许修复
![](/icons/57339chengxu.gif)
修改数据文件
![](/icons/57339dou.gif)
![](/icons/57339yinwei.gif)
这可能存在问题
![](/icons/57339dou2.gif)
下面
![](/icons/57339de.gif)
命令将从数据文件中删除不正确
![](/icons/57339de.gif)
记录和已被删除
![](/icons/57339de.gif)
记录并重建索引文件:
myisamchk -r tbl_nameisamchk -r tbl_name
◆ 如果前面
![](/icons/57339de.gif)
步骤失败
![](/icons/57339dou.gif)
使用
![](/icons/57339dou2.gif)
安全恢复模式使用
![](/icons/57339yi.gif)
个老
![](/icons/57339de.gif)
恢复思路方法
![](/icons/57339dou.gif)
处理常规恢复模式不行
![](/icons/57339de.gif)
少数情况(但是更慢)
myisamchk --safe-recover tbl_nameisamchk --safe-recover tbl_name
困难
![](/icons/57339de.gif)
修理
如果在索引文件
![](/icons/57339de.gif)
第
![](/icons/57339yi.gif)
个16K块被破坏
![](/icons/57339dou.gif)
或包含不正确
![](/icons/57339de.gif)
信息
![](/icons/57339dou.gif)
或如果索引文件丢失
![](/icons/57339dou.gif)
你只应该到这个阶段
![](/icons/57339dou2.gif)
在这种情况下
![](/icons/57339dou.gif)
创建
![](/icons/57339yi.gif)
个新
![](/icons/57339de.gif)
索引文件是必要
![](/icons/57339de.gif)
![](/icons/57339dou2.gif)
按如下这样
![](/icons/57339de.gif)
步骤做:
◆ 定位到包含崩溃表
![](/icons/57339de.gif)
数据库目录中
◆ 把数据文件移更安全
![](/icons/57339de.gif)
地方
![](/icons/57339dou2.gif)
◆ 使用表描述文件创建新
![](/icons/57339de.gif)
(空)数据和索引文件:
shell> mysql db_namemysql> DELETE FROM tbl_name;mysql> quit
上述语句将重新创建新
![](/icons/57339de.gif)
空表
![](/icons/57339dou.gif)
并使用表
![](/icons/57339de.gif)
![](/icons/57339de.gif)
描述文件tbl_name.frm重新生成新
![](/icons/57339de.gif)
数据和索引文件
![](/icons/57339dou2.gif)
◆ 将老
![](/icons/57339de.gif)
数据文件拷贝到新创建
![](/icons/57339de.gif)
数据文件的中
![](/icons/57339dou2.gif)
(不要只是将老文件移回新文件的中;你要保留
![](/icons/57339yi.gif)
个副本以防某些东西出错
![](/icons/57339dou2.gif)
)
◆ 在使用标准
![](/icons/57339de.gif)
修复思路方法
![](/icons/57339dou2.gif)
现在myisamchk -r -q应该工作了
![](/icons/57339dou2.gif)
(这不应该是
![](/icons/57339yi.gif)
个无限循环)
![](/icons/57339dou2.gif)
如果你拥有表
![](/icons/57339de.gif)
备份文件
![](/icons/57339dou.gif)
那么
![](/icons/57339yi.gif)
切过程就容易
![](/icons/57339de.gif)
多
![](/icons/57339dou2.gif)
从备份文件中可以恢复表
![](/icons/57339de.gif)
描述文件
![](/icons/57339dou.gif)
然后在检查表
![](/icons/57339dou.gif)
有可能还要继续使用标准
![](/icons/57339de.gif)
修复思路方法
![](/icons/57339dou.gif)
应该纠可以解决问题了
![](/icons/57339dou2.gif)
非常困难
![](/icons/57339de.gif)
修复
只有描述文件也破坏了
![](/icons/57339dou.gif)
你才应该到达这个阶段
![](/icons/57339dou2.gif)
这应该从未发生过
![](/icons/57339dou.gif)
![](/icons/57339yinwei.gif)
在表被创建以后
![](/icons/57339dou.gif)
描述文件就不再改变了
![](/icons/57339dou2.gif)
从
![](/icons/57339yi.gif)
个备份恢复描述文件并且回到阶段2
![](/icons/57339dou2.gif)
你也可以恢复索引文件并且回到阶段1
![](/icons/57339dou2.gif)
对于后者
![](/icons/57339dou.gif)
你应该用myisamchk -r启动
![](/icons/57339dou2.gif)
如果
![](/icons/57339yinwei.gif)
某种原因
![](/icons/57339dou.gif)
数据
![](/icons/57339de.gif)
备份文件丢失或者没有备份文件
![](/icons/57339dou.gif)
但是你还记得建立表
![](/icons/57339de.gif)
CREATE TABLE语句
![](/icons/57339dou.gif)
那么太好了
![](/icons/57339dou.gif)
这样还是可以恢复索引文件:
◆ 定位到包含崩溃表
![](/icons/57339de.gif)
数据库目录中
◆ 把数据文件移更安全
![](/icons/57339de.gif)
地方
![](/icons/57339dou2.gif)
再把数据库目录中
![](/icons/57339de.gif)
对应
![](/icons/57339de.gif)
目录删去.
![](/icons/57339dou2.gif)
◆
![](/icons/57339diaoyong.gif)
mysql并发复CREATE TABLE语句建立该表
![](/icons/57339dou2.gif)
◆ 退出mysql
![](/icons/57339dou.gif)
将原始
![](/icons/57339de.gif)
数据文件和索引文件移回到数据库
![](/icons/57339de.gif)
目录中
![](/icons/57339dou.gif)
替换刚才新建
![](/icons/57339de.gif)
文件
![](/icons/57339dou2.gif)
◆ 然后回到阶段2
![](/icons/57339dou.gif)
修复表
![](/icons/57339dou2.gif)
也可以只移回数据文件
![](/icons/57339dou.gif)
这样保留新
![](/icons/57339de.gif)
描述和索引文件
![](/icons/57339dou.gif)
然后回到阶段1
![](/icons/57339dou.gif)
继续用标准
![](/icons/57339de.gif)
思路方法修复表
延伸阅读
- 2010-12-9-- mysql数据库,网上提供的最简便的MySql数据库备份的方法
- 2010-12-9-- mysql数据库,VMware中Linux共享mysql数据库的方法
- 2010-12-9-- 数据库增加字段,在mysql数据库原有字段后增加新内容
- 2010-12-9-- mysql数据库,MYSQL代码 定期备份Mysql数据库
- 2010-12-9-- mysql数据库,linux下改良版本mysqldump来备份MYSQL数据库
- 2010-12-9-- mysql数据库,dmysql自己封装的mysql库
- 2010-12-9-- mysql数据库,推荐没有虚拟主机的小巧的Mysql数据库备份脚本(PHP)
- 2010-12-9-- 数据库查询优化,mysql数据库查询优化 mysql效率
- 2010-12-9-- mysql数据库,MySQL优化全攻略-相关数据库命令
- 2010-12-9-- mysql数据库,PHP5 操作MySQL数据库基础代码
最新评论