视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
如何回收mysql表的碎片
2020-11-09 13:55:46 责编:小采
文档


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

下载本文
显示全文
专题