Myisamchk使用
2015-12-20 17:01
295 查看
Myisam损坏的情况:
1、服务器突然断电导致数据文件损坏;强制关机,没有先关闭mysql 服务;mysqld 进程在写表时被杀掉。因为此时mysql可能正在刷新索引。
2、
磁盘损坏。
3、
服务器死机。
4、 mysql 本身的bug 。
MySQL中MyISAM表损坏的症状
1 、查询数据时报出错误:Incorrect key file for table: '...'. Try to repair it2 、查询不能在表中找到行或返回不完全的数据。
3 、Error: Table '...' is marked as crashed and should be repaired 。
4 、打开表失败: Can't open file: '×××.MYI' (errno: 145) 。
注意点
:只用于Myisam表,不支持分区表在执行表修复的时候,最好对要修复的表进行备份
需要注意的是:必须确保没有其他的程序在用着想要修复的表。最好关闭数据库,或者锁定所有的表flush tables table_name,包括缓存中的表,也要刷新否则会出现warning: clients are using or haven't closed the table properly
使用
命令格式: myisam [options] tbl_name参数
--slient,-s 只输出错误,-ss更少的输出
--extend-check, -e 完全的检查表,如果表有很多的索引的话,那么将很慢,可以增加key_buffer_size变量
--fast,-F 检查那些,没有合理关闭的表
--force,-f 如果发现任何错误,它将会自动执行修复工作,不建议使用,可能会出现数据丢失
--medium-check,-m 比--extend-check 快点,一般可以修复大部分的错误。比较常用
--bakkup,-B 数据文件MYD将被备份为file_name-time.BAK
--quick,-q 只对索引文件进行修复,不对数据文件操作
--recover,-r 可以修复大部分的情况的错误,除了唯一键不唯一except unique keys that are not unique,即出现两此同样的数据。一般首先尝试这项来修复表。
--safe-recover,-o 一般--recover修复不了的问题可以使用这项在来修复,按顺序读取所有的表,但时间巨大
实际上,-r,-o就是遍历或者扫描整个表,中间建立临时文件存放抽取的信息,最后把源文件给删除,所以在使用-r,-o时,最好加上-B参数
没有指定参数myisam只是简单的检查表
在使用Myisam时,如果没有在数据库目录下,指定好路径。
检测索引文件:myisamchk /path/to/database_dir/*.MYI
推荐快速的检查表文件myisamchk --silent --fast /path/to/datadir/*/*.MYI
如果想检查并修复任何的表损坏的地方,可以使用
myisamchk --silent --force --fast --update-state
--key_buffer_size=64M --myisam_sort_buffer_size=64M \
--read_buffer_size=1M --write_buffer_size=1M \
/path/to/datadir/*/*.MYI
如果用Myisamchk来修复很大的表的时候,而此时你的内存空闲的很多,那么可以适当的增大Myisamchk在操作时可使用的内存,另外磁盘的剩余空间最好可达到数据文件的两倍。
Example:
if you have more than 512MB RAM available, you could use options such as these (in addition to any other
options you might specify):
shell> myisamchk --myisam_sort_buffer_size=256M \
--key_buffer_size=512M \
--read_buffer_size=64M \
--write_buffer_size=64M
Using --myisam_sort_buffer_size=16M is probably enough for most cases.
常用的检查命令:
快速的检查
myisamchk -im /usr/local/mysql/data/testx/t2
只检查没有正常关闭的表
myisamchk -iFm /usr/local/mysql/data/testx/t2
仅显示表的最重要的信息
myisamchk -eim /usr/local/mysql/data/testx/t2
myisamchk优化表
-r tbl_name 碎片整理
-S 对索引进行排序,优化键值的速度
-R 1 对指定的索引进行排序(show index from tbl_name)
一般检查修复的办法
1.首先根据mysql客户终端或myisamchk -im ..检查错误码或者问题
然后perror查看具体的问题
2.关闭mysqld或者锁表
3.常用的修复命令
myisamchk -rq tbl_name
myisamchk -Br tbl_name
myisamchk -Br tbl_name
EXAMPLE:
使用Myisamchk恢复丢失的索引文件
先把.MYD文件mv到其他目录下
使用锁定表结构。
重新创建.MYD 和 .MYI文件。注意权限是mysql
修复表repair tables t2 use_frm;
copy会刚才的数据文件.MYD
修复表myisamchk -r t2;
相关文章推荐
- React使用rAF动画介绍
- 【Java CV与Android】在Android工程里配置JavaCV
- 医药采购之操作权限拦截器
- Java异常1
- PAT乙级 旧键盘 (20)
- 期末总结
- POJ 题目3045 Cow Acrobats(贪心)
- [转]递归算法
- 期末总结
- 本站已稳定运行了XX天,网页时间显示功能实现方法
- 在线影音页面的制作方法
- Node.js实现的指定目录xml文件标签对去除及转换为txt文本文件
- 大规模互联网应用Redis架构要点(转)
- OpenCV笔记(九)
- <LeetCode OJ> 191. Number of 1 Bits
- 自己开始在这里写博客
- 使用HTML5开发离线应用 - cache manifest(5)
- hdoj I can do it! 3552 (贪心&模拟)
- 重装mysql
- android-Advanced NFC