english简体中文繁体中文UTF8中文  设为主页   收藏我们  帮助 
 
首页 企业 服务 家政 二手 工作 商店 新闻 博览 交友 车友 论坛 博客 相册 软件 健康 报价
   帐号: 密码:   忘记密码   注册会员
推荐商品
十二月 2007
« 十一月   Jan »
 12
3456789
10111213141516
17181920212223
24252627282930
31  
BLOG最新评论

mysql数据库受到破坏的修复

归类: 电脑网络阿Q | 2007年12月16日 @ 10:36 pm (阅读: 1190)

修复数据表

多数情况下,数据库被破坏只是指索引文件受到了破坏,真正的数据被破坏掉的情况非常少。大多数形式的数据库破坏的的修复相当简单。
和前面的校验一样,修复的方式也有三种。

下面讲的方法只对MyISAM格式的表有效。其他类型的损坏需要从备份中恢复。

1。REPAIR TABLE SQL statement(mysql服务必须处于运行状态)。
2。命令mysqlcheck(mysql服务可以处于运行状态)。
3。命令myisamchk(必须停掉mysql服务,或者所操作的表处于不活动状态)。

在修复表的时候,最好先作一下备份。所以你需要两倍于原始表大小的硬盘空间。请确保在进行修复前你的硬盘空间还没有用完。

1>用”repair table”方式修复
语法:repair table 表名 [选项]
选项如下:
QUICK 用在数据表还没被修改的情况下,速度最快
EXTENDED 试图去恢复每个数据行,会产生一些垃圾数据行,万般无奈的情况下用
USE_FRM 用在.MYI文件丢失或者头部受到破坏的情况下。利用.frm的定义来重建索引

多数情况下,简单得用”repair table tablename”不加选项就可以搞定问题。但是当.MYI文件丢失或者头部受到破坏时,这样的方式不管用,例如:
mysql> REPAIR TABLE fixtures;
+————————-+——–+———-+———————————————+
| Table | Op | Msg_type | Msg_text |
+————————-+——–+———-+———————————————+
| sports_results.fixtures | repair | error | Can’t find file: ‘fixtures.MYI’ (errno: 2) |
+————————-+——–+———-+———————————————+

修复失败的原因时索引文件丢失或者其头部遭到了破坏,为了利用相关定义文件来修复,需要用USE_FRM选项。例如:
mysql> REPAIR TABLE fixtures USE_FRM;
+————————-+——–+———-+————————————+
| Table | Op | Msg_type | Msg_text |
+————————-+——–+———-+————————————+
| sports_results.fixtures | repair | warning | Number of rows changed from 0 to 2 |
| sports_results.fixtures | repair | status | OK |
+————————-+——–+———-+————————————+

我们可以看到Msg_test表项的输出信息”ok”,表名已经成功修复受损表。

2>用mysql内建命令mysqlcheck来修复
当mysql服务在运行时,也可以用mysql内建命令mysqlcheck来修复。
语法:mysqlcheck -r 数据库名 表名 -uuser -ppass
%mysqlcheck -r sports_results fixtures -uuser -ppass
sports_results.fixtures OK

利用mysqlcheck可以一次性修复多个表。只要在数据库名后列出相应表名即可(用空格隔开)。或者数据库名后不加表名,将会修复数据库中的所有表,例如:

%mysqlcheck -r sports_results fixtures events -uuser -ppass
sports_results.fixtures OK
sports_results.events OK

%mysqlcheck -r sports_results -uuser -ppass
sports_results.fixtures OK
sports_results.events OK

3>用myisamchk修复
用这种方式时,mysql服务必须停掉,或者所操作的表处于不活动状态(选项skip-external-locking没被使用)。记着一定要在相关.MYI文件的路径下或者自己定义其路径。
语法:myisamchk [选项] [表名]
下面是其选项和描述
–backup, -B 在进行修复前作相关表得备份
–correct-checksum 纠正校验和
–data-file-length=#, -D # 重建表时,指定数据文件得最大长度
–extend-check, -e 试图去恢复每个数据行,会产生一些垃圾数据行,万般无奈的情况下用
–force, -f 当遇到文件名相同的.TMD文件时,将其覆盖掉。
keys-used=#, -k # 指定所用的keys可加快处理速度,每个二进制位代表一个key.第一个key为0
–recover, -r 最常用的选项,大多数破坏都可以通过它来修复。如果你的内存足够大,可以增大
参数sort_buffer_size的值来加快恢复的速度。但是遇到唯一键由于破坏而不唯一
的表时,这种方式不管用。
–safe-recover -o 最彻底的修复方式,但是比-r方式慢,一般在-r修复失败后才使用。这种方式读出 所有的行,并以行为基础来重建索引。它的硬盘空间需求比-r方式稍微小一点,因 为它没创建分类缓存。你可以增加key_buffer_size的值来加快修复的速度。
–sort-recover, -n mysql用它类分类索引,尽管结果是临时文件会非常大
–character-sets-dir=… 包含字符集设置的目录
–set-character-set=name 为索引定义一个新的字符集
–tmpdir=path, -t 如果你不想用环境变量TMPDIR的值的话,可以自定义临时文件的存放位置
–quick, -q 最快的修复方式,当数据文件没有被修改时用,当存在多键时,第二个-q将会修改 数据文件
–unpack, -u 解开被myisampack打包的文件

myisamchk应用的一个例子

% myisamchk -r fixtures
- recovering (with keycache) MyISAM-table ‘fixtures.MYI’
Data records: 0

标签:

相关文章:

发表评论

抱歉,您必须登录后才可以发表评论。


TAG标签:

Google Linux MPX mysql Paypal SIGMA tar 安溪 安装 贝宝 蔡氏古民居 狄恩.卡门 电脑网络 俄罗斯方块 发明 法学园地 公司企业 共享 孤单 官桥 海滩 喝麻 红塔湾 后深溪 互联网 惠女水库 教育学习 经济金融 镜头 开源运动 科学技术 老家 理财 路由器 旅游自然 码表 密码 女儿 女人 皮肤病 清源山 日志 森林公园 山地车 少儿乐园 社会文化 社团 生活资讯 收款 手机 手术 数据 双绞线 獭窟 体育竞技 土耳其烤肉歌 外汇 维基 文学世界 我想我不够爱你 无题 无线 西格玛 厦门 新年 新闻出版 幸福 雪峰寺 医药健康 医院 艺术之窗 隐私 硬盘 游泳 有情人终成眷属 娱乐休闲 樟脚 祝福 赚钱

  版权说明| 隐私保护| 网站地图| 天气预报| 记事日历| 友情链接| 关于我们| 联系我们
 闽ICP备05016518号 Powered by qzsq © 2004-2007 泉州社区服务信息的网站空间由【阿Q网络】提供 WAP RSS