用Myisamchk让MySQL数据表更健康

2011-03-15 09:15 水太深 ITPUB 字号:T | T

为了让MySQL数据库中的数据表“更健康”,就需要对其进行定期体检。在这里笔者推荐使用Myisamchk工具来对数据表进行不定期的检查。同时笔者给出了一些相关的注意事项以及使用技巧。

AD:51CTO 网+首届APP创新评选大赛火热启动——超百万资源等你拿!

在MySQL数据库中,数据表数以百计,数据库管理员不可能有这么多的时间和精力去依次检查表的有效性,所以他们急需要一种工具,能 够对相关的数据表进行体检,以判断表是否存在一些问题。这就好像我们每年都需要体检一样,发现小问题,即时进行修复,以免到时候病入膏肓。在这里笔者推荐 使用Myisamchk工具来对数据表进行不定期的检查。在使用这个工具时,笔者要强调一下相关的注意事项以及使用技巧。

一、大表要增加内存的容量

Myisamchk工具的使用效率主要跟表的大小有关。如果数据表比较大,则其运行的速度就会比较慢。在这种情况下,数据库管理员可能需奥调整内存的配置。

通常情况下,-O参数决定Myisamchk工具运行时所能够使用的内存大小。当运行Myisamchk时内存分配给其使用的空间不能够超过这个参 数所指定的大小。如果数据库管理员需要对每一个大表使用Myisamchk工具时,往往需要首先确定这个数据表的大小,并依此判断所需要占用内存的大小。 默认情况下,恢复时可以采用的内存大小只有3M。对于大表来说,这点内存是不够的。此时数据库管理员可以调整内存的大小,让Myisamchk工具运行的 更快一点。

如果有需要的话,可以使用-O参数将内存调整为合适的大小。如-O sort=8M等等。一般情况下,这个值设置为16M即可。不需要太大,否则的话,会影响其它作业的运行。总之,在运行Myisamchk工具之前,数据 库管理员先需要评估一下数据库中各个数据表的大小。如果有比较大的数据表,可以先将其过滤出来(如通过通配符等形式)。然后再调整内存的大小,并单独对这 些大表进行检查。这是提高Myisamchk运行效率的一个不错的办法。

二、利用Myisamchk工具恢复数据时需要大量的硬盘空间

在使用Myisamchk检查数据表时,如果发现某些表存在问题,还可以使用Myisamchk这个工具对其进行恢复。不过在恢复时,需要先确保有足够的硬盘空间。否则的话,就可能导致数据表恢复失败。

通常情况下,所需要使用的硬盘空间是数据表的一倍大小。即如果需要对2G的数据表进行恢复,那么所需要的剩余空间至少应该还有2G。即需要将数据文 件大小扩大为原来的一倍。如果硬盘空间不足,该怎么办呢?此时数据库管理员可以考虑使用—quick选项。使用这个选项之后,进行修复时就不需要这么多的 空间。不过需要注意,此时数据库系统只是创建了索引文件。

在某些情况下,在修复时需要重新创建索引文件。此时代替旧索引文件的新索引文件也需要占用一定的磁盘空间。虽然说在修复工作一开始的时候,数据库系 统就会对就索引文件进行删减。但是为了安全起见,笔者还是建议为其保留足够的硬盘空间。并且在文件系统上所需要的这个存储空间的大小与原数据文件是相同 的。

另外在使用Myisamchk这个工具时,数据库管理员可能会使用—Recover选项。如果数据库管理员采用这个选项的话,那么就可以修复几乎所 有一切的问题。不过注意这里有一个关键字几乎。这也就是说,大部分数据表问题都可以通过这个选项来解决。但是也有一些例外。如当遇到唯一的键不唯一等问题 时,即时采用这个选项也是没有办法。一般情况下,数据库管理员在恢复工作时可以先试用这个选项。当系统报告这个选项不可用时,再尝试使用另外的恢复方式。 不过需要注意的是,使用这个选项时需要用到排序缓冲区空间。大致大小一般为数据的2倍。

综上所述,在利用Myisamchk这个工具对表进行恢复操作时,需要保证其有足够的磁盘空间。笔者的建议时,至少要有两倍以上的数据文件大小的磁盘空间。

三、逐步修复收损坏的数据表

如果不幸你的数据表受到损坏时,该怎么进行修复呢?笔者认为,应该采用逐步修复的方式。不过在执行修复操作是,有两个必要的步骤需要做。一是停止运行数据库服务器,二是对相关的数据文件进行备份。虽然说Myisamchk工具是一个相对安全的数据检查工具,但是在对数据进行恢复之前对数据文件进行必要的备份,仍然是一个必要的安全措施。在对对数据进行恢复时,通常可以按照下面的顺序来操作。

一是检查数据表,以判断到底哪些数据表出现了问题,以及出现问题的大小。为了安全与效率的考虑,在修复时一般只 修复那些出现问题的数据表。在检查数据表时,可以使用-update-state选项来告诉Myisamchk工具哪些数据表是检查过的,并且对有问题的 表格会进行标识。 然后再修复时,可以指定Myisamchk工具只修复那些报告有错误的表格。

二是进行简单安全的修复。在刚开始修复数据时,最好采用“快速恢复模式”。在这个模式下,数据库系统并不接触数 据文件来修复索引文件。如果数据文件包含它应有的一切内容和指向数据文件内正确的删除连接,此时使用快速恢复模式就可以修复损坏的数据表,如果即使采用简 单安全的修复,最好在修复开始之前对数据表做好备份工作。然后使用Myisamchk –r 表名字 来恢复指定的数据表。运行这个命令之后,系统将从数据文件中删除不正确的纪录和已经被删除的记录,并会重新创建索引文件。如果采用这个模式还不能够修复数 据文件时,则采用下面一个恢复模式。

三是索引文件破坏情况下的恢复模式。如果数据库表格的索引文件的第一个16K块被破坏掉,或者说包含不正确的信 息,又或者整个索引文件丢失,在这种情况下,就需要创建一个新的索引文件。此时就需要用到下面谈到的恢复模式。此时数据库管理员需要先将数据文件转移到安 全地方,然后使用表描述文件来创建新的数据文件和索引文件。然后再将老的数据文件复制到新创建的数据文件之中。然后再使用命令Myisamchk –r-q来恢复数据表。如果只是索引文件出现了问题,那么使用这个命令就可以恢复数据。

四是最极端的情况,即表描述文件也受到了损坏。此时就不能够采用上面这个恢复模式。因为已经无法使用表描述文件 来创建新的数据文件和索引文件。此时笔者建议,要采用数据库恢复的方式,来恢复全部的数据文件。在MySQL数据库中,可以根据需要设置完全备份或者增量 备份。如果表描述文件也损坏时,那么采用数据库恢复的方式,无疑是最安全的方法。

当然Myisamchk工具的功能不只上面这些。其下面有很多有趣的内容。如可以根据需要,修复某个指定的数据表。也可以使用通配符批量的检查文 件。甚至可以对独立的数据文件进行检查等等。不过需要注意的是,无论是采用哪种方式,都需要先对数据库进行必要的备份。虽然说Myisamchk这个工具 相对来说是比较安全的。但是养成在任何检查与修复之前先对原有的数据进行备份,仍然是一个不错的数据库管理习惯。

不过需要注意的是,Myisamchk工具并不是万能的。对于一些极端性的损坏,如表格描述文件损坏,这个工具就没有用武之地了。为此数据库管理员还是需要最好数据库日常的备份工作。

用Myisamchk让MySQL数据表更健康的更多相关文章

  1. MYSQL数据表损坏的原因分析和修复方法小结

    MYSQL数据表损坏的原因分析和修复方法小结 1.表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. ...

  2. MySQL 数据表修复及数据恢复

    1. MYSQL数据表在什么情况下容易损坏? 服务器突然断电导致数据文件损坏. 强制关机,没有先关闭mysql 服务等.   2. 数据表损坏后的主要现象是什么? 从表中选择数据之时,得到如下错误:I ...

  3. 设置MySQL数据表主键

    设置MySQL数据表主键: 使用“primary key”关键字创建主键数据列.被设置为主键列不允许出现重复的值,很多情况下与“auto_increment”递增数字相结合.如下SQL语句所示: My ...

  4. 谈谈MySQL数据表的类型(转)

    谈谈MySQL数据表的类型 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其 ...

  5. mysql数据表修复

    当数据库表被破坏,运行报错: Table './database/tablename' is marked as crashed and last (automatic?) repair failed ...

  6. MySql数据表设计,索引优化,SQL优化,其他数据库

    MySql数据表设计,索引优化,SQL优化,其他数据库 1.数据表设计 1.1数据类型 1.2避免空值 1.3text类型优化 2.索引优化 2.1索引分类 2.2索引优化 3.SQL优化 3.1分批 ...

  7. 随机获取Mysql数据表的一条或多条记录

    随机获得Mysql数据表的一条或多条记录有很多方法,下面我就以users(userId,userName,password......)表(有一百多万条记录)为例,对比讲解下几个方法效率问题: sel ...

  8. (转)MySQL数据表中带LIKE的字符匹配查询

    MySQL数据表中带LIKE的字符匹配查询 2014年07月15日09:56    百科369 MySQL数据表中带LIKE的字符匹配查询 LIKE关键字可以匹配字符串是否相等. 如果字段的值与指定的 ...

  9. mysql数据表增删改查

    http://www.runoob.com/mysql/mysql-tutorial.html 一.MySQL 创建数据表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以 ...

随机推荐

  1. Android 获取图片exif信息

    使用android api读取图片的exif信息 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/r ...

  2. 数据存储与IO(一)

    应用程序沙盒简介:iOS应用程序只能在系统为它分配的文件区域内读写文件,这个区域就是此应用程序的沙盒,Application目录下的GUID文件夹就是沙盒,这个文件夹是系统随机命名的.程序所有的非代码 ...

  3. 基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送

    前言 写了一个简单的JMS例子,之所以使用JNDI 是出于通用性考虑,该例子使用JMS规范提供的通用接口,没有使用具体JMS提供者的接口,这样可以保证我们编写的程序适用于任何一种JMS实现(Activ ...

  4. SQL Server 分页方法汇总

    PageSize = 30 PageNumber = 201 方法一:(最常用的分页代码, top / not in) UserId UserId from UserInfo order by Use ...

  5. java web 开发 购物车功能的实现

    为了方便自己以后复习,所以写的比较仔细,记录下自己的成长..... 既然是做购物车,那么前提条件是首先需要一系列商品,也就是要建一个实体,这里建了一个商品表. 通过查询在浏览器上显示 基本显示已经做好 ...

  6. mybatis oracle BLOB类型字段保存与读取

    一.BLOB字段 BLOB是指二进制大对象也就是英文Binary Large Object的所写,而CLOB是指大字符对象也就是英文Character Large Object的所写.其中BLOB是用 ...

  7. cocos2d-x之 利用富文本控件解析xhml标签(文字标签,图片标签,换行标签,标签属性)

    执行后效果: 前端使用: 后台SuperRichText解析code void SuperRichText::renderNode(tinyxml2::XMLNode *node){ while (n ...

  8. srping MVC 工程简单搭建

    Spring版本:3.2.2.RELEASE 第一步:导入必须的jar包 spring-beans.jar spring-context.jar spring-core.jar spring-expr ...

  9. cat,tac,more

    cat VS tac cat是查看文本文件的内容,tac是cat反过来,反向查看文件 $cat 1.txt ls: cannot access ee: No such file or director ...

  10. Windows 安装ELK

    在Windows服务器上安装ELK logstash在windows平台下不能监控磁盘文件,用nxlog代替,监控文件并把内容发送到logstash 部署环境 Os :Windows 7 logsta ...