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

本文实例讲述了mysql表优化、分析、检查和修复的方法。分享给大家供大家参考,具体如下:

这里介绍对数据库的管理常规就是进行预防性的维护,以及修复那些出现问题的内容。

进行检查和修复通常具有四个主要的任务:

1. 对表进行优化

2. 对表进行分析(分析并存储MyISAM和BDB表中键的分布)

3. 对表进行检查(检查表的错误,并且为MyISAM更新键的统计内容)

4. 对表进行修复(修复被破坏的MyISAM表)

一、对表进行优化

优化表有很多方式实现: OPTIMIZE TABLE语句、mysqlcheck工具(服务器要运行)或myisamchk(服务器没有运行或表中没有交互)

为什么优化?随着MySQL的使用,包括BLOB和VARCHAR字节的表将变得比较繁冗,因为这些字段长度不同,对记录进行插入、更新或删除时,会占有不同大小的空间,记录就会变成碎片,且留下空闲的空间。像具有碎片的磁盘,会降低性能,需要整理,因此要优化。

1. 利用OPTIMIZE语句对表进行优化

# mysql>OPTIMIZE TABLE 表名

这样就对表名进行了优化。

2. 利用mysqlcheck对表进行优化

mysqlcheck可进行优化外,还可执行大量的检查和修复任务。

# mysqlcheck -o 数据库名 表名 -uroot -p111111 (一张表)
# mysqlcheck -o 数据库名 表名1 表名2 -uroot -p111111 (多张表)
# mysqlcheck -o 数据库名 -uroot -p111111 (对整个数据库)

3. 利用myisamchk对表进行优化

# myisamchk --quick --check-only-changed --sort-index --analyze 表名
# myisamchk -r 表名 (参数-r表示对表进行修复,同时也删去了浪费的空间)
# myisamchk -r /usr/local/mysql/data/testblog/article (指定表所在的路径)

以上操作需在服务器关闭或没有与服务器互操作的时候,可以使用myisamchk命令行工具(如果服务器正在运行,那么在运行这条语句之前利用mysqladmin flush-tables对表进行刷新。需确保服务器没有与表进行互操作,否则会出现故障)。myisamchk是最老的方法。必须在正确位置上运行myisamchk,或者指定表所在的路径。

注意:在优化过程中,表会被锁住,因此不要在忙时进行优化操作。同样,需要有足够的空间才能进行OPTIMIZE TABLE。如果没有磁盘空间,MySQL将不能进行优化,表也无法使用。

优化是对包含MyISAM表的数据库的常规管理事务中一个重要环节,应该定期进行。

二、对表进行分析

对表的定期分析可以改善性能,且应该成为常规维护工作的一部分。因为通过更新表的索引信息对表进行分析,可改善数据库性能。

有三种方法可以对表进行分析:

1. 连接到MySQL时,使用ANALYZE TABLE语句

2. 利用mysqlcheck命令行工具(服务器需要运行,并且只对MyISAM表起作用)

3. 利用myisamchk命令行工具(服务器不应该运行,或无对所操作的表发生互操作)

# ANALYZE TABLE 表名;
# mysqlcheck -a 数据库名 表名 -uroot -p111111
# mysqlcheck -a 数据库名 表名1 表名2 -uroot -p111111

如果试图对不支持分析操作的表进行分析(如InnoDB),那操作将无法进行

# myisamchk -a /usr/local/mysql/data/数据库/表名

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》、《MySQL数据库锁相关技巧汇总》及《MySQL常用函数大汇总》

希望本文所述对大家MySQL数据库计有所帮助。

(0)

相关推荐

  • Mysql性能优化案例研究-覆盖索引和SQL_NO_CACHE

    场景 产品中有一张图片表pics,数据量将近100万条,有一条相关的查询语句,由于执行频次较高,想针对此语句进行优化 表结构很简单,主要字段: 复制代码 代码如下: user_id 用户ID picname 图片名称 smallimg 小图名称 一个用户会有多条图片记录,现在有一个根据user_id建立的索引:uid,查询语句也很简单:取得某用户的图片集合: 复制代码 代码如下: select picname, smallimg from pics where user_id = xxx; 优化

  • MySQL中主从复制重复键问题修复方法

    -------------------quote begin------------------------ 3. If you decide that you can skip the next statement from the master, issue the following statements: mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = n; mysql> START SLAVE; The value of n should be

  • MySQL数据表损坏的正确修复方案

    于断电或非正常关机而导致MySQL(和PHP搭配之最佳组合)数据库出现错误是非常常见的问题.有两种方法,一种方法使用MySQL(和PHP搭配之最佳组合)的check table和repair table 的sql语句,另一种方法是使用MySQL(和PHP搭配之最佳组合)提供的多个myisamchk, isamchk数据检测恢复工具.前者使用起来比较简便.推荐使用. 1. check table 和 repair table 登陆MySQL(和PHP搭配之最佳组合) 终端: MySQL(和PHP搭

  • Jemalloc优化MySQL和Nginx

    jemalloc源于Jason Evans 2006年在BSDcan conference发表的论文:<A Scalable Concurrent malloc Implementation for FreeBSD>.jason认为phkmalloc(FreeBSD's previous malloc implementation by Kamp (1998))没有考虑多处理器的情况,因此在多线程并发下性能低下(事实如此),而jemalloc适合多线程下内存分配管理.从2007年开始以Free

  • Mysql数据库之索引优化

    MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如"精通MySQL"."SQL语句优化"."了解数据库原理"等要求.我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,

  • MYSQL数据表损坏的原因分析和修复方法小结(推荐)

    1.表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. 3. mysqld 进程在写表时被杀掉. 4. 使用myisamchk 的同时,mysqld 也在操作表. 5. 磁盘故障. 6. 服务器死机. 7. mysql 本身的bug . 2.表损坏的症状 一个损坏的表的典型症状如下: 1 .当在从表中选择数据之时,你得到如下错误: Incorrect key file for table: '...

  • 关于MySQL 优化的100个的建议

    MySQL是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限.这里是100条调节和优化MySQL安装的技巧.一些技巧是针对特定的安装环境的,但这些思路是通用的.我已经把他们分成几类,来帮助你掌握更多MySQL的调节和优化技巧. MySQL 服务器硬件和操作系统调节: 1. 拥有足够的物理内存来把整个InnoDB文件加载到内存中--在内存中访问文件时的速度要比在硬盘中访问时快的多. 2. 不惜一切代价避免使用Swap交换分区 – 交换时是从硬盘读

  • MySQL数据库修复方法(MyISAM/InnoDB)

    在网上找了篇MySQL的技术文章,感觉不错,把它翻译过来共享下.   原文作者:Mike Peters   我整理了7条修复MySQL数据库的方法,当简单的重启对数据库不起作用,或者有表崩溃时.   简单的MySQL重启:   /usr/local/mysql/bin/mysqladmin -uUSERNAME -pPASSWORD shutdown /usr/local/mysql/bin/mysqld_safe &    1.MyISAM表崩溃    MySQL数据库允许不同的表使用不同的存

  • MySQL数据库INNODB表损坏修复处理过程分享

    突然收到MySQL报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了.innodb表损坏不能通过repair table 等修复myisam的命令操作.现在记录下解决过程,下次遇到就不会这么手忙脚乱了. 处理过程: 一遇到报警之后,直接打开错误日志,里面的信息: InnoDB: Database page corruption on disk or a failed InnoDB: file read of page 30506. InnoDB: You may have t

  • MySQL数据库表修复 MyISAM

    一:MySQL中MyISAM表损坏原因总结: 1. 服务器突然断电导致数据文件损坏;强制关机,没有先关闭mysql 服务;mysqld 进程在写表时被杀掉. 2. 磁盘损坏. 3. 服务器死机. 4. mysql 本身的bug . 二:MySQL中MyISAM表损坏的症状总结: 1 .查询数据时报出错误:Incorrect key file for table: '...'. Try to repair it 2 .查询不能在表中找到行或返回不完全的数据. 3 .Error: Table '..

  • 教您修复mysql数据库的方法

    会mysql的朋友都知道mysql在长时间使用过后数据库会出现一些问题,这就需要快速修复损坏mysql数据库以方便我们的工作和学习.下面小编为大家下面介绍两种快速检修 MySQL 数据库的方法. 本人常用这样的代码,直接放到mysql数据库目录里面 复制代码 代码如下: cmd /k myisamchk -r jb51_tablename jb51_tablename是jb51_tablename.MYD的名称.运行以下就可以了. 有的时候因为掉电或者其他原因导致数据库损坏,我们可以使用mysq

  • mysql数据库索引损坏及修复经验分享

    mysql表索引被破坏的问题及解决 下午上班,惊闻我的dedecms的网站出问题了,访问一看,果然全屏报错,检查mysql日志,错误信息为: Table '.\dedecmsv4\dede_archives' is marked as crashed and should be repaired 提示说cms的文章表dede_archives被标记有问题,需要修复.于是赶快恢复历史数据,上网查找原因.最终将问题解决.解决方法如下: 找到mysql的安装目录的bin/myisamchk工具,在命令

  • mysql下优化表和修复表命令使用说明(REPAIR TABLE和OPTIMIZE TABLE)

    查询mysql表是否被损坏命令,如下: # CHECK TABLE 表名 mysql的长期使用,肯定会出现一些问题,一般情况下mysql表无法访问,就可以修复表了,优化时减少磁盘占用空间.方便备份. 表修复和优化命令,如下: #REPAIR TABLE `table_name` 修复表 #OPTIMIZE TABLE `table_name` 优化表 REPAIR TABLE 用于修复被破坏的表. OPTIMIZE TABLE 用于回收闲置的数据库空间,当表上的数据行被删除时,所占据的磁盘空间并

随机推荐