首页 > 数据库 > mysql教程 > 如何回收mysql表的碎片

如何回收mysql表的碎片

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
发布: 2016-06-07 16:17:27
原创
1343 人浏览过

由于操作人员大量的删除了relationship表的数据达2千万行,但是mysql并不自动回收空间,所以决定做碎片整理(先测试): myisamchk -r relationship 在mysql运行下做的,结果做完后查询的时候出现下面的问题: ERROR 1030 (00000): Got error 127 from table h

  由于操作人员大量的删除了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后再执行这个命令,也不会出现这个问题!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
如何配置 bcmath
来自于 1970-01-01 08:00:00
0
0
0
java如何生成token?
来自于 1970-01-01 08:00:00
0
0
0
phpstudy 自带apache如何升级openssl到1.0.2o版本
来自于 1970-01-01 08:00:00
0
0
0
多个参数如何
来自于 1970-01-01 08:00:00
0
0
0
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板