OPTIMIZE TABLE `table_name` 优化表

MyISAM 引擎清理碎片 OPTIMIZE
语法: OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLEtbl_name[,tbl_name] ...
OPTIMIZE TABLE 用于回收闲置的数据库空间,当表上的数据行被删除时,所占据的磁盘空间并没有立即被回收,使用了OPTIMIZE TABLE命令后这些空间将被回收,并且对磁盘上的数据行进行重排(注意:是磁盘上,而非数据库)。多数时间并不需要运行OPTIMIZE TABLE,只需在批量删除数据行之后,或定期(每周一次或每月一次)进行一次数据表优化操作即可,只对那些特定的表运行,这个操作对于游戏数据库中的某些表特别起作用,这些表基本上需要每周做一次优化,甚至一周两次。 如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有VARCHAR, BLOB或TEXT列的表)进行了很多更改,则应使用OPTIMIZE TABLE。被删除的记录被保持在链接清单中,后续的INSERT操作会重新使用旧的记录位置。您可以使用OPTIMIZE TABLE来重新利用未使用的空间,并整理数据文件的碎片。在多数的设置中,您根本不需要运行OPTIMIZE TABLE。即使您对可变长度的行进行了大量的更新,您也不需要经常运行,每周一次或每月一次即可, OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用。

REPAIR TABLE `table_name` 修复表

myisamchk table.MYI 修复索引

REPAIR TABLE 用于修复被破坏的表。

myisamchk TABLE.MYI 用于修复被破坏的索引文件。

1.通过SQL修复MyISAM表(建议方法,对MyISAM引擎表有用)

(1)check table tabTest;
如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:

(2)repair table tabTest;
进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。

如果单纯执行REPAIR TABLE没有起到什么效果,那么可以选择另外两个选项:
- REPAIR TABLE EXTENDED,速度比REPAIR TABLE慢得多,但是可以修复99%的错误;
- REPAIR TABLE USE_FRM,它会删除索引并利用table_name.frm文件中的描述重建索引,并通过table_name.MYD文件填充健对应的值。

2. myisamchk(该工具必须运行在服务终止条件下,对MyISAM引擎表有用)

myisamchk可以直接访问表文件,而无须启动MySQL服务器。 
进入datadir文件目录,执行基本命令:myisamchk --backup --recover t1

其中,--backup选项是在尝试修复表之前先进行数据文件备份,还有其他使用选项

如果修改数据表:

(1)myisamchk tablename.MYI   进行检测。
(2)myisamchk -of tablename.MYI
网上说的其它方法:
那么修复test表的方法为
myisamchk -r -q /var/lib/mysql/db/test.MYI
如果修复全部表,用这个命令
myisamchk -r -q /var/lib/mysql/db/*.MYI

3.运行mysqlcheck命令行工具(该工具可以在服务运行状态下执行)

(1)检查特定的表

注意在shell中执行,不是在mysql的交互环境下

如果应用中提示某个表坏了,使用下面的命令来检查:mysqlcheck -c newmandela order -uroot -p

(2)检查一个库中的所有表:mysqlcheck -c newmandela -uroot -p

(3)如果只想检查某几个库呢? 可以使用 –databases 参数:mysqlcheck -c --databases newmandela radius -uroot -p

(4)使用 mysqlcheck 分析表:mysqlcheck -a radius payment_transactionrecord -uroot -p

(5)使用 mysqlcheck 优化表:mysqlcheck -o radius payment_transactionrecord -uroot -p

(6)使用 mysqlcheck 修复表:mysqlcheck -r radius payment_transactionrecord -uroot -p

(7)检查,优化,修复表组合命令:mysqlcheck -uroot -p --auto-repair -o newmandela

每张表都出现了 Table does not support optimize, doing recreate + analyze instead, 代表什么意思呢? 它的意思是表不支持优化,而是重新创建+分析,可以参考 http://stackoverflow.com/questions/30635603/what-does-table-does-not-support-optimize-doing-recreate-analyze-instead-me 的回答。

(8)mysqlcheck 常用选项

A, –all-databases 表示所有库
-a, –analyze 分析表
-o, –optimize 优化表
-r, –repair 修复表错误
-c, –check 检查表是否出错
–auto-repair 自动修复损坏的表
-B, –databases 选择多个库
-1, –all-in-1 Use one query per database with tables listed in a comma separated way
-C, –check-only-changed 检查表最后一次检查之后的变动
-g, –check-upgrade Check for version dependent changes in the tables
-F, –fast Check tables that are not closed properly
–fix-db-names Fix DB names
–fix-table-names Fix table names
-f, –force Continue even when there is an error
-e, –extended Perform extended check on a table. This will take a long time to execute.
-m, –medium-check Faster than extended check option, but does most checks
-q, –quick Faster than medium check option

参考文档:MySQL表损坏修复解决方案

       怎样使用Mysqlcheck来检查和修复, 优化表

 

mysql 优化修复表的更多相关文章

  1. mysql 命令修复表

    如果在断电.硬重启服务器等情况下,可能会造成有些表损坏,这时就需要修复 修复表前需要将mysql停止 centos7 用 systemctl stop mysqld.service 来停止 然后进入到 ...

  2. MySQL优化之表结构优化的5大建议(数据类型选择讲的很好)

    殊不知,在N年前被奉为"圣经"的数据库设计3范式早就已经不完全适用了.这里我整理了一些比较常见的数据库表结构设计方面的优化技巧,希望对大家有用. 由于MySQL数据库是基于行(Ro ...

  3. MySQL优化三 表结构优化

    由于MySQL数据库是基于行(Row)存储的数据库,而数据库操作 IO 的时候是以 page(block)的方式,也就是说,如果我们每条记录所占用的空间量减小,就会使每个page中可存放的数据行数增大 ...

  4. MYSQL优化派生表(子查询)在From语句中的

    Mysql 在5.6.3中,优化器更有效率地处理派生表(在from语句中的子查询): 优化器推迟物化子查询在from语句中的子查询,知道子查询的内容在查询正真执行需要时,才开始物化.这一举措提高了性能 ...

  5. MySQL优化之表结构优化的5大建议

    很多人都将 数据库设计范式 作为数据库表结构设计“圣经”,认为只要按照这个范式需求设计,就能让设计出来的表结构足够优化,既能保证性能优异同时还能满足扩展性要求殊不知,在N年前被奉为“圣经”的数据库设计 ...

  6. 3.MySQL优化---单表查询优化的一些小总结(非索引设计)

    整理自互联网.摘要: 接下来这篇是查询优化.其实,大家都知道,查询部分是远远大于增删改的,所以查询优化会花更多篇幅去讲解.本篇会先讲单表查询优化(非索引设计).然后讲多表查询优化.索引优化设计以及库表 ...

  7. 4.MySQL优化---多表查询优化

     整理自互联网 一.多表查询连接的选择: 相信这内连接,左连接什么的大家都比较熟悉了,当然还有左外连接什么的,基本用不上我就不贴出来了.这图只是让大家回忆一下,各种连接查询. 然后要告诉大家的是,需要 ...

  8. mysql优化之表建设

    就拿常见的用户表.文章类的表.日志表来分析如下 CREATE TABLE `user` (   `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMEN ...

  9. Mysql优化单表查询

    借助explain分析SQL,判断该怎么建立索引. 还需要注意,有些情况会导致索引失效,用不上索引,应该优化SQL,应用上索引. 什么情况导致索引失效? 1.在索引列上做任何操作(计算.函数.类型转换 ...

随机推荐

  1. 安卓之Android.mk多文件以及动态库编译

    1.多文件编译 多文件编译共有两种方式: (1) 在Android.mk中一一添加 LOCAL_PATH:= $(call my-dir) #定义当前模块的相对路径 include $(CLEAR_V ...

  2. Navicat 破解版链接

    本文为转载内容 百度网盘地址: https://pan.baidu.com/s/1nvIIOad 压缩包中有注册码和使用方法

  3. ios label根据内容自适应高度

    label自适应高度,想必大家也都很熟悉怎么去做,上代码: UILabel *label3 = [[UILabel alloc]initWithFrame:CGRectMake(150, 50, 15 ...

  4. 画图前端:mermaid。时序图/类图/甘特图/流程图/状态图/饼图。类似工具:Typora

    文档 https://mermaidjs.github.io/#/ cdn https://www.bootcdn.cn/mermaid/ 在线编辑 https://mermaidjs.github. ...

  5. ou can mix require and export. You can't mix import and module.exports.

    ou can mix require and export. You can't mix import and module.exports.

  6. 最新 北森java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.北森等10家互联网公司的校招Offer,因为某些自身原因最终选择了北森.6.7月主要是做系统复习.项目复盘.LeetCode ...

  7. docker下安装nginx并实现https访问

    一.启动容器 docker run --detach --name wx-nginx -p 443:443 -p 80:80 -v /home/nginx/data:/usr/share/nginx/ ...

  8. Word2016经常复制公式卡死无响应如何解决?

    Word文件 > 选项 > 高级 > 显示 > 禁用“硬件图形加速”

  9. docker安装nginx , 安装mysql5.6,安装redis3.2

    安装nginx 拉取镜像 docker  pull nginx 查看镜像 docker  images 创建多个目录 mkdir -p  /data/nginx/{conf,conf.d,html,l ...

  10. C语言中的共用体(union)和枚举(enum)

    1 union union Data{ int i; char ch; float f; }a={1, 'a', 1.5}; //错误 union Data a = {16}; //正确 union ...