BR> 5) 再试试标准表修复方法。
为了恢复该表的描述文件,可先从备份文件中恢复,然后再试着用标准修复方法。如果由于某些原因没有备份,但知道建立表的CREATE TABLE 语句,则仍可以恢复该文件:
1) 定位到包含崩溃表的数据库目录中。
2) 将该表的数据文件移动到安全的地方。如果想要使用索引的话,还需将索引文件移走。
3) 调用mysql并发布CREATE TABLE 语句建立该表。
4) 退出mysql,将原始数据文件移回数据库目录中,替换刚才新建的数据文件。如果在步骤2移动了索引文件,则也要将其移回数据库目录中。
5) 再试试标准表修复方法。
避免与MySQL服务器交互作用
当您正在运行表的检查/修复实用程序时,您或许不想让MySQL服务器和实用程序同时访问一个表。如果两个程序都向表中写数据显然是一件坏事,但是,当一个程序在写入时另一个程序在读取也不是件好事。如果表正由一个程序写入,同时进行读取的另一个程序会被
搞乱。
如果您关闭服务器,就可以保证在服务器和myisamchk 或isamchk 之间没有交互作用。但是管理员极不愿意使服务器完全地脱机,因为这使得没有故障的数据库和表也不可用。本节中讨论的过程将帮助您避免服务器和myisamchk 或isamchk 之间的交互作用。
服务器有两种类型的锁定方法。它使用内部锁定避免客户机的请求相互干扰──例如,避免客户机的SELECT 查询被另一个客户机的UPDATE查询所干扰。服务器还使用外部锁定(文件级锁)来防止其他程序在服务器使用表时修改该表的文件。通常,在表的检查操作中服务器将外部锁定与myisamchk 或isamchk 组合使用。但是,外部锁定在某些系统中是禁用的,因为它不能可靠地进行工作。对运行myisamchk 和isamchk 所选择的过程取决于服务器是否能使用外部锁定。如果不使用,则必须使用内部锁定协议。
如果服务器用--skip-locking 选项运行,则外部锁定禁用。该选项在某些系统中是缺省的,如L i n ux。可以通过运行mysqladmin variables 命令确定服务器是否能够使用外部锁定。检查skip_locking 变量的值并按以下方法进行:
如果skip_locking 为o ff,则外部锁定有效。您可以继续并运行任一个实用程序来检查表。服务器和实用程序将合作对表进行访问。但是,在运行任何一个实用程序之前,应该用mysqladmin flush-tables 刷新表的高速缓存。为了修复表,应该使用表的修复锁定协议。
如果skip_locking 为o n,则禁用外部锁定,但在myisamchk 或isamchk 检查或修复一个表时服务器并不知道,最好关闭服务器。如果坚持使服务器保持开启状态,需要确保在您使用此表时没有客户机来访问它。必须使用恰当的锁定协议告诉服务器使该表独处,并阻塞客户机对其访问。
这里所描述的锁定协议使用服务器的内部锁定机制,以防止服务器在您利用my i s a m c h k或isamchk 工作时访问表。通常的办法是调用mysql并对要检查或修复的表发布L O C K TABLE 语句。然后,在mysql空闲时(即运行,但除了保持该表锁定外不用它做任何事情),运行myisamchk 或i s a m c h k。在myisamchk 或isamchk 结束后,可以切换到mysql会话中并释放该锁以告诉服务器程序执行完毕此表可以再次使用了。
检查和修复的锁定协议有点区别。对于检查,您只需要获得读锁。在这种情况下,只能读取表,但不能修改它,因此它也允许其他客户机读取它。读锁足以防止其他客户机修改表。对于修复,您必须获得写锁以防止任何客户机在您对表进行操作时修改它。
锁定协议使用LOCK TABLE 和UNLOCK TABLE 语句获得并释放锁。协议还使用F L U S H TABLES 告诉服务器刷新磁盘中任何未决的改变,并

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







