回收mysql表的碎片
2007-12-06 18:58
211 查看
由于操作人员大量的删除了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后再执行这个命令,也不会出现这个问题!
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后再执行这个命令,也不会出现这个问题!
相关文章推荐
- mysql表碎片的查询自己回收 推荐
- mysql表碎片的查询自己回收
- mysql磁盘空间碎片回收
- 试试mysql数据碎片整理吧解决astgo经常死机变慢的问题
- 浅析MySQL数据碎片的产生
- Mysql知识碎片
- 辛星浅谈mysql中的数据碎片以及引擎为MyISAM下的操作
- Mysql 维护基础碎片
- mysql碎片知识(一般信息)
- MySQL优化——定期清理索引碎片
- MySQL 清除表空间碎片
- 5、Mysql的用户权限管理--查看,授权,回收
- Mysql的碎片查看与处理
- 解析mysql 表中的碎片产生原因以及清理
- 内存碎片以及垃圾回收
- 清理mysql碎片
- mysql操作命令梳理(4)-grant授权和revoke回收权限
- centos MySQL创建用户并给用户授权、回收权限。
- Mysql 用户授权与回收
- 解决MySQL建立连接问题,快速回收复用TCP的TIME_WAIT