回收mysql表的碎片

因为操做人员大量的删除了relationship表的数据达2千万行,可是mysql并不自动回收空间,因此决定作碎片整理(先测试):
myisamchk -r relationship
在mysql运行下作的,结果作完后查询的时候出现下面的问题:
ERROR 1030 (00000): Got error 127 from table handler
这个问题很郁闷,应该不会出现问题的呀,后来查阅资料发现了问题:
若是你用--skip-locking运行mysqld(它在一些系统上是缺省的,如Linux),当
mysqld正在使用同一个表时,你不能可靠地使用myisamchk检查一张表。若是你能
确定在你运行myisamchk时没有人经过mysqld正在存取表,在你开始检查表以前,
你仅需作mysqladmin flush-tables。若是你不能保证, 那么当你检查表时,你必
须停掉mysqld。若是你在mysqld正在更新表时运行myisamchk,你可能获得一个表
已破坏的警告,即便它没有。
若是你没使用--skip-locking,你能在任什么时候间使用myisamchk检查表。当你这样
时,全部试图更新表的客户在继续前将等到myisamchk就绪。
若是你使用myisamchk修复或优化表,你必须老是保证mysqld服务器不在使用表(如
果你正在使用--skip-locking,这也适用)。若是你不停掉mysqld,在你运行
myisamchk前,你至少应该作一个mysqladmin flush-tables。
而个人数据库刚好在linux下,而且是skip-locking启动的,就出现了这个问题!
1)这个命令也能够中止mysql后再作,就不会出现这个问题
2)也能够在线作后重启数据库
3)也能够先运行mysqladmin flush-tables后再执行这个命令,也不会出现这个问题!
相关文章
相关标签/搜索