在通过表修复实用程序修改表后重新打开该表。您必须从单个mysql会话中执行所有L O C K、FLUSH 和UNLOCK 语句。如果锁定一个表然后退出mysql,则该锁将释放,且运行myisamchk 或isamchk 将不再是安全的!
如果保持打开两个窗口的状态,且一个运行mysql,而另一个运行myisamchk 或i s a m c h k,则运行锁定过程将会变得很容易。这样允许您很容易地在程序之间进行切换。如果不是运行在视窗环境中,当运行myisamchk 或isamchk 时,将需要使用外壳程序的作业控制工具暂停和恢复mysql。下面的指导显示出对myisamchk 或isamchk 的命令,可用与您正在使用的表相对应的那个命令。
1. 对检查操作锁定表
此过程只针对表的检查,不针对表的修复。在窗口1中,调用mysql并发布下列语句:
% mysqldb_name
mysql>LOCK TABLE tbl_name READ;
mysql>FLUSH TABLES;
该锁防止其他客户机在检查时写入该表和修改该表。FLUSH 语句导致服务器关闭表的文件,它将刷新仍然在高速缓存中的任何未写入的改变。
当mysql空闲时,切换到窗口2 并检查该表:
% myisamchk tbl_name
% isamchk tbl_name
当myisamchk 或isamchk 结束时,切换回到窗口1的mysql会话并释放该表锁:
mysql>UNLOCK TABLE;
如果myisamchk 或isamchk 指出发现该表的问题,将需要执行表的修复。
2. 对修复操作锁定表
修复表的锁定过程类似于检查表的过程,但有两个区别。第一,您必须得到写锁而非读锁。由于您将要修改表,因此根本不允许客户机对其进行访问。第二,必须在执行修复之后发布FLUSH TABLE 语句,因为myisamchk 和isamchk 建立了新的索引文件,除非再次刷新
该表的高速缓存否则服务器将不会注意到它:
% mysqldb_name
mysql>LOCK TABLE tbl_name WRITE;
mysql>FLUSH TABLES;
利用mysql的空闲切换到窗口2,做该表的数据库文件的拷贝,然后运行myisamchk 或i s a m c h k:
% cp tbl_name.* |some|other|directory
% myisamchk --recover tbl_name
% isamchk --recover tbl_name
--recover 选项只是针对安装而设置的。这些特殊选项的选择将取决于您执行修复的类型。myisamchk 或isamchk 运行完成后,切换回到窗口1的mysql会话,再次刷新该表的高速缓存并释放表锁:
mysql>FLUSH TABLES;
mysql>UNLOCK TABLE;
快速运行myisamchk 和i s a m c h k
myisamchk 和isamchk 的运行可能会花很长时间,尤其是您正在处理一个大表或使用一个更广泛的检查或修复方法时。通过告诉这些程序在运行时使用更多的内存,能够提高它们的速度。这两个实用程序都有几个可设置的操作参数。其中最重要的是控制程序使用的缓冲
区大小的变量:
变量 含义
key _ buffer _ s i z e 用于存放索引块的缓冲区大小
r e a d _ buffer _ s i z e 读操作用的缓冲区大小
sort _ buffer _ s i z e 排序用的缓冲区大小
w r i t e _ buffer _ s i z e 写操作用的缓冲区大小
要想查看任一个程序使用的这些变量的缺省值,可用--help 选项运行该程序。要想指定其他的值,可在该命令上使用--set-variable variable=value 或-O variable=value。您可以将变量的名字简化成key、r e a d、sort 和w r i t e。例如,可告诉myisamchk 使用16MB 的排序缓冲区和1MB 的读写缓冲区,其调用如下:
% myisamchk -0 sort=16M -0 read=1M write=1M ...
sort _ buffer_size 只能利用--recover 选项来使用(而不是利用-

全国销售热线:
售后服务热线:(0)13949036533







