如何回收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后再执行这个命令,也不会出现这个问题!

时间: 2024-10-30 08:11:00

如何回收mysql表的碎片的相关文章

mysql optimize 清理碎片

---定期清理脚本 0 1  * * 4 root /root/qingli_mysql.sh [root@newmysql5 ~]# cat qingli_mysql.sh #!/bin/bash date=`date +"%Y-%m-%d %H:%M:%S"` echo $date >>/root/qingli.log tables=$(mysql -u root -p"tina" 2>/dev/null -e "select con

mysql表优化、分析、检查和修复的方法详解_Mysql

本文实例讲述了mysql表优化.分析.检查和修复的方法.分享给大家供大家参考,具体如下: 这里介绍对数据库的管理常规就是进行预防性的维护,以及修复那些出现问题的内容. 进行检查和修复通常具有四个主要的任务: 1. 对表进行优化 2. 对表进行分析(分析并存储MyISAM和BDB表中键的分布) 3. 对表进行检查(检查表的错误,并且为MyISAM更新键的统计内容) 4. 对表进行修复(修复被破坏的MyISAM表) 一.对表进行优化 优化表有很多方式实现: OPTIMIZE TABLE语句.mysq

php列出mysql表所有行和列的方法

 这篇文章主要介绍了php列出mysql表所有行和列的方法,涉及php操作mysql数据库的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php列出mysql表所有行和列的方法.分享给大家供大家参考.具体实现方法如下: 代码如下: <html> <head> <title>Selecting Data</title> </head> <body> <?php $user = "root&quo

mysql 检测 脚本-mysql 表检及自动修复测脚本

问题描述 mysql 表检及自动修复测脚本 我想写一个bat脚本,来检测哪些表损坏了,并能根据检测到的结果对损坏的表进行自动关机修复.用mysqlcheck不行,我的存储引擎是innoDB

mysql 修改表引擎:php批量转换mysql表引擎

有些时候可能需要批量转换mysql表的引擎,如下为php操作实现<?php/*** 批量转换mysql表引擎*/error_reporting(e_all);// 数据库连接配置$host = 'localhost';$username = 'root';$passwd = '';$database = 'test';// 要转换的库名配置,多库转换增加配置元素即可$configs = array($database);// 转换配置$convert_rule = array('from' =>

MySQL表结构的同步

现在全身心投入到MySQL中. 项目要求:将开发环境中的数据库的修改同步至线上环境. 开发者给出的解决办法是:利用像Python 中的South框架,自动将开发环境的变更同步至生产环境.这个对于DBA来说是无法承受的(除非是创建数据库结果类似的语句).数据库变更在生产环境执行,必须事先经过评估.对业务的影响降到最低,这个就设计到了重新设计索引,或者采用在线修改工具之类的.本文暂时先不讨论,下面给出表同步的解决办法. 以前的做法是通过navicate的工具将一个一个的数据库进行对比或者自己写脚本M

教你实现MySQL表数据迁移自动化

一.背景 之前我写过关于SQL Server的数据迁移自动化的文章:SQL Server 数据库迁移偏方,在上篇文章中设计了一张临时表,这个临时表记录搬迁的配置信息,用一个存储过程读取这张表进行数据的迁移,再由一个Job进行迭代调用这个存储过程. 在这次MySQL的实战中,我的数据库已经做了4个分片,分布在不同的4台机器上,每台机器上的数据量有1.7亿(1.7*4=6.8亿),占用空间260G(260*4=1040G),这次迁移的目的就是删除掉一些历史记录,减轻数据库压力,有人说这为什么不使用表

修复mysql表错误

普通修复 mysql> repair table cab_data; +---------------------+--------+----------+------------------------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +---------------------+--------+----------+------------------

Win7系统如何使用CMD命令导出MySQL表数据

  Win7系统如何使用CMD命令导出MySQL表数据         操作方法: 1.打开始菜单中运行命令提示符: 2.然后输入命令: 假设导出tomtopportal数据库下的t_article_base表数据到E:/xitongcheng.com.txt文件.执行命令如下: mysqldump -h localhost -u root -p tomtopportal t_article_base >e:xitongcheng.com.txt 3.命令行指示输入mysql的root用户密码(