Myisam损坏的情况:


服务器突然断电导致数据文件损坏;强制关机,没有先关闭mysql 服务;mysqld 进程在写表时被杀掉。因为此时mysql可能正在刷新索引。


磁盘损坏。


服务器死机。

、 mysql 本身的bug 。

MySQL中MyISAM表损坏的症状

1 、查询数据时报出错误:Incorrect key file for table: '...'. Try to repair it

2 、查询不能在表中找到行或返回不完全的数据。

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;

最新文章

  1. 重置EntityFramework数据迁移到洁净状态
  2. python password输入
  3. phongap+ jquery + asp.net +android,我把我遇到的问题和处理方法的连接总结一下
  4. Javascript之动画1
  5. windows8 64位 IIS8 PHP5.5 安装 Imagemagick 组件
  6. 在.NET MVC下不用iframe实现局部加载html
  7. 由于jsp include 很多文件后导致java类大小超过65535 bytes 的解决方法(转载)
  8. Struts2五、Struts1与Struts2的区别
  9. c++中string.erase()函数的用法(转)
  10. 【转】Spring 中三种Bean配置方式比较
  11. alpha-咸鱼冲刺day6
  12. BZOJ_3670_[Noi2014]动物园_KMP
  13. java 线程方法 ---- join()
  14. 洛谷P3396 哈希冲突
  15. 【python】廖雪峰python教程学习--基础
  16. Faster rcnn代码理解(4)
  17. asp.net mvc 3.0 知识点整理 ----- (4).asp.net mvc 3 和asp.net mvc 4 对比
  18. 白鹭引擎 - 本地坐标和舞台坐标的转化 ( globalToLocal, localToGlobal )
  19. 【ASP.NET 问题】Win7中IIS被防火墙阻止导致外网无法访问的解决方法。
  20. <Think Python>中统计文献单词的处理代码

热门文章

  1. es 300G 数据删除 执行计划 curl REST 操作
  2. dedecms时间格式调用标签汇总
  3. html5--6-13 CSS3中的颜色表示方式
  4. silverlight DataGrid 内嵌ComboBox 实现加载和保存
  5. Erlang-VM节点启动名冲突问题
  6. hdu-5719 Arrange(组合数学)
  7. UISwitch用法:
  8. Ruby: Print WIN32OLE method names in Ruby
  9. MFC程序中的 _T("") 什么意思?
  10. 量子纠缠1——量子比特、Bell态、EPR佯谬