您的位置:首页 > 数据库 > SQL

mysql 数据库的维护与修复

2013-11-08 10:23 260 查看
简单记录下我学习mysql的心得,方便以后查看~

检查数据库表
myisamchk和isamchk提供了表的检查方法,这些方法在彻底检查表的程度方面有差异。
标准的方法检查表
通常用标准的方法就足够了。对表使用标准的方法进行检查,不使用任何选项直接调用即可,或用-s或--silent选项的任何一个:
myisamchk tbl_name
isamchk tbl_name
这能找出所有错误的99.99%。它不能找出的是仅仅涉及数据文件的损坏(这很不常见)。
完全彻底的数据检查
为了执行扩充检查,使用--extend-check或-e选项,这个选项检查数据:
myisamchk -e tbl_name
isamchk -e tbl_name
它做一个完全彻底的数据检查(-e意思是“扩展检查”)。它对每一行做每个键的读检查以证实他们确实指向正确的行。这在一个有很多键的大表上可能花很长时间。myisamchk通常将在它发现第一个错误以后停止。如果你想要获得更多的信息,你能增加--verbose(-v)选项。这使得myisamchk或isamchk继续一直到最多20个错误。在一般使用中,一个简单的标准检查(没有除表名以外的参数)就足够了。
中等程度的检查
指定选项--medium-check或-m
myisamchk -m tbl_name
中的程度的检查不如扩展检查彻底,但速度快一些。其意义不大,较少使用。

可能有用的检查选项:
1、-i或—information 打印统计信息,例如:
myisamchk -e -i tbl_name
象前面的命令一样,但是-i选项告诉myisamchk还打印出一些统计信息。
2、-C, --check-only-changed

只检查上一次检查后被修改的表

修复数据库表

1、简单安全的修复
为了修复一个表执行下列步骤:
首先,用--recover,-r选项修正表,并且用--quick,-q选项,来只根据索引文件的内容进行恢复。这样不接触数据文件来修复索引文件。(-r意味着“恢复模式”)
myisamchk -r -q tbl_name
isamchk -r -q tbl_name
如果问题仍旧存在,则忽略--quick选项,允许修复程序修改数据文件,因为这可能存在问题。下面的命令将从数据文件中删除不正确的记录和已被删除的记录并重建索引文件:
myisamchk -r tbl_name
isamchk -r tbl_name
 如果前面的步骤失败,使用。安全恢复模式使用一个老的恢复方法,处理常规恢复模式不行的少数情况(但是更慢)。
myisamchk --safe-recover tbl_name
isamchk --safe-recover tbl_name

2、困难的修理
如果在索引文件的第一个16K块被破坏,或包含不正确的信息,或如果索引文件丢失,你只应该到这个阶段 。在这种情况下,创建一个新的索引文件是必要的。按如下这样的步骤做:
(1)定位到包含崩溃表的数据库目录中
(2)把数据文件移更安全的地方。
(3)使用表描述文件创建新的(空)数据和索引文件:
shell> mysql db_name
mysql> DELETE FROM tbl_name;

mysql> quit
上述语句将重新创建新的空表,并使用表的的描述文件tbl_name.frm重新生成新的数据和索引文件。
(1)将老的数据文件拷贝到新创建的数据文件之中。(不要只是将老文件移回新文件之中;你要保留一个副本以防某些东西出错。)
(2) 在使用标准的修复方法。现在myisamchk -r -q应该工作了。(这不应该是一个无限循环)。
如果你拥有表的备份文件,那么一切过程就容易的多。从备份文件中可以恢复表的描述文件,然后在检查表,有可能还要继续使用标准的修复方法,应该纠可以解决问题了。

指定维护过程中使用的内存
myisamchk和isamchk的运行可能会花很长的时间,尤其是正在处理一个达标或者使用一个更广泛的检查和修复方法时。当你运行myisamchk和isamchk时,内存分配很重要。myisamchk和isamchk使用不超过你用-O选项指定的内存量。如果你想在很大的文件上使

用myisamchk和isamchk,你首先应该确定你想要它使用多少内存。缺省仅使用大约 3M 来修复。通过使用更大的值,你能使myisamchk和isamchk更快地操作。下面列出最重的控制程序使用的缓冲区大小的变量:
变量                                             含义

key_buffer_size           用于存放索引块的缓冲区大小

read_buff_size            读操作用的缓冲区大小

sort_buffer_size          排序用的缓冲区大小

write_buffer_size        写操作用的缓冲区大小

要想查看任一个程序使用的这些变量的缺省值,可用--help选项运行该程序。要想使用其它的值,可在该命令上使用--set-variable variable=value 或 –O variable=value。有些材料上说,您可以将变量的名字简化成key,read,sort和write,但是不是所有的分发的维护程序都可以这样,例如,如果有两个变量sort_buffer_size和sort_key_size,sort不能唯一决定使用那个变量,会产生一个错误。因此建议你用完整的值。
例如,如果你有多于32M内存,你能使用例如这些选项(除了任何你可能指定的选项):
shell> myisamchk -O sort_buffer_size=16M -O key_buffer_size=16M -O read_buff_size =1M -O write_buffer_size =1M ...
shell> myisamchk -O sort_buffer_size=16M -O key_buffer_size=16M -O read_buff_size =1M -O write_buffer_size =1M ...
使用-O sort=16M应该可能对大多数情形就足够了。
--sort_buffer_size只能利用--recover选项来使用(而不是利用--safe_recover),并且在这种情况下,key_buffer不能使用。
必须明白,myisamchk和isamchk使用在TMPDIR里面的临时文件。如果TMPDIR指向一个内存文件系统,你可能很容易得到内存溢出的错误。如果它发生,设定TMPDIR指向有更多空间的某个目录并且重启myisamchk和isamchk。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息