提示:通常,您基本上不必运行此语句。但是,如果灾难发生,REPAIR TABLE很有可能从MyISAM表中找回所有数据。如果您的表经常被破坏,您应该尽力找到原因,以避免使用REPAIR TALBE。请查询“如果MySQL崩溃,应作些什么”、“MyISAM表方面的问题”。REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLEtbl_name[,tbl_name] ... [QUICK] [EXTENDED] [USE_FRM]

REPAIR TABLE用于修复被破坏的表。默认情况下,REPAIR TABLE与myisamchk --recovertbl_name具有相同的效果。REPAIR TABLE对MyISAM和ARCHIVE表起作用。请参见15.1节,“MyISAM存储引擎”,15.8节,“ARCHIVE存储引擎”。

通常,您基本上不必运行此语句。但是,如果灾难发生,REPAIR TABLE很有可能从MyISAM表中找回所有数据。如果您的表经常被破坏,您应该尽力找到原因,以避免使用REPAIR TALBE。请参见A.4.2节,“如果MySQL依然崩溃,应作些什么”。同时也见15.1.4节,“MyISAM表方面的问题”。

本语句会返回一个含有以下列的表:

Table

表名称

Op

进行修复

Msg_type

状态、错误、信息或警告之一

Msg_text

消息

对于每个被修复的表,REPAIR TABLE语句会产生多行的信息。上一行含有一个Msg_type状态值。Msg_test通常应为OK。如果您没有得到OK,您应该尝试使用myisamchk --safe-recover修复表,因为REPAIR TABLE尚不会执行所有的myisamchk选项。我们计划在将来使它的灵活性更强。

如果给定了QUICK,则REPAIR TABLE会尝试只修复索引树。这种类型的修复与使用myisamchk --recover --quick相似。

如果您使用EXTENDED,则MySQL会一行一行地创建索引行,代替使用分类一次创建一个索引。这种类型的修复与使用myisamchk --safe-recover相似。

对于REPAIR TABLE,还有一种USE_FRM模式可以利用。如果.MYI索引文件缺失或标题被破坏,则使用此模式。在这种模式下,MySQL可以使用来自.frm文件重新创建.MYI文件。这种修复不能使用myisamchk来完成。 注释:只能在您不能使用常规REPAIR模式是,才能使用此模式。.MYI标题包含重要的表元数据(特别是,当前的AUTO_INCREMENT值和Delete链接)。这些元数据在REPAIR...USE_FRM中丢失。如果表被压缩,则不能使用USE_FRM。因为本信息也存储在.MYI文件中。

REPAIR TABLE语句被写入二进制日志中,除非使用了自选的NO_WRITE_TO_BINLOG关键词(或其别名LOCAL)。

警告:如果在REPAIR TABLE运行过程中,服务器停机,则在重新启动之后,在执行其它操作之前,您必须立刻对表再执行一个REPAIR TABLE语句。(通过制作一个备份来启动是一个好办法。)再最不利情况下,您可以有一个新的干净的索引文件,不含有关数据文件的信息。然后,您执行的下一个操作会覆盖数据文件。这很少发生,但是是有可能的。

mysql repair table-Can’t open file: ‘[Table]mytable.MYI’.

也许很多人遇到过类似Can’t open file: ‘[Table]mytable.MYI’ 这样的错误信息,却不知道怎么解决他,下面我们做个介绍:

多数情况下,数据库被破坏只是指索引文件受到了破坏,真正的数据被破坏掉的情况非常少。大多数形式的数据库破坏的的修复相当简单。

和前面的校验一样,修复的方式也有三种。

下面讲的方法只对MyISAM格式的表有效。其他类型的损坏需要从备份中恢复。

1,REPAIR TABLE SQL statement(mysql服务必须处于运行状态)。

2,命令mysqlcheck(mysql服务可以处于运行状态)。

3,命令myisamchk(必须停掉mysql服务,或者所操作的表处于不活动状态)。

在修复表的时候,最好先作一下备份。所以你需要两倍于原始表大小的硬盘空间。请确保在进行修复前你的硬盘空间还没有用完。

1>    用”repair table”方式修复

语法:repair table 表名 [选项]

选项如下:

QUICK 用在数据表还没被修改的情况下,速度最快

EXTENDED 试图去恢复每个数据行,会产生一些垃圾数据行,万般无奈的情况下用

USE_FRM 用在.MYI文件丢失或者头部受到破坏的情况下。利用.frm的定义来重建索引

多数情况下,简单得用”repair table tablename”不加选项就可以搞定问题。但是当.MYI文件丢失或者头部受到破坏时,这样的方式不管用,例如:

For example:

mysql> REPAIR TABLE mytable;

+————————-+——–+———-+—————————————————————————————+

| Table              | Op    | Msg_type   | Msg_text                |

+————————-+——–+———-+—————————————————————————————+

| sports_results.mytable   | repair    | error    | Can’t find file: ‘mytable.MYI’ (errno: 2) |

+————————-+——–+———-+—————————————————————————————+

修复失败的原因时索引文件丢失或者其头部遭到了破坏,为了利用相关定义文件来修复,需要用USE_FRM选项。例如:

mysql> REPAIR TABLE mytable USE_FRM;

+————————-+——–+———-+————————————————————————————+

| Table           | Op   | Msg_type  | Msg_text                                        |

+————————-+——–+———-+————————————————————————————+

| sports_results.mytable   | repair   | warning     | Number of rows changed from 0 to 2 |

| sports_results.mytable   | repair   | status     | OK                                              |

+————————-+——–+———-+————————————————————————————+

我们可以看到Msg_test表项的输出信息”ok”,表名已经成功修复受损表。

2>用mysql内建命令mysqlcheck来修复

当mysql服务在运行时,也可以用mysql内建命令mysqlcheck来修复。

语法:mysqlcheck -r 数据库名 表名 -uuser -ppass

Command: %mysqlcheck -r sports_results mytable -uuser -ppass

Result:   sports_results.mytable OK

利用mysqlcheck可以一次性修复多个表。只要在数据库名后列出相应表名即可(用空格隔开)。或者数据库名后不加表名,将会修复数据库中的所有表,例如:

Command: %mysqlcheck -r sports_results mytable events -uuser -ppass

Result:   sports_results.mytable OK

Result:   sports_results.events OK

Command: %mysqlcheck -r sports_results -uuser -ppass

Result:   sports_results.mytable OK

Result:   sports_results.events OK

3>用myisamchk修复

用这种方式时,mysql服务必须停掉,或者所操作的表处于不活动状态(选项skip-external-locking没被使用)。记着一定要在相关.MYI文件的路径下或者自己定义其路径。

语法:myisamchk [选项] [表名]

下面是其选项和描述

–backup, -B 在进行修复前作相关表得备份

–correct-checksum 纠正校验和

–data-file-length=#, -D # 重建表时,指定数据文件得最大长度

–extend-check, -e 试图去恢复每个数据行,会产生一些垃圾数据行,万般无奈的情况下用

–force, -f 当遇到文件名相同的.TMD文件时,将其覆盖掉。

keys-used=#, -k # 指定所用的keys可加快处理速度,每个二进制位代表一个key.第一个key为0

–recover, -r 最常用的选项,大多数破坏都可以通过它来修复。

如果你的内存足够大,可以增大参数sort_buffer_size的值来加快恢复的速度。但是遇到唯一键由于破坏而不唯一 的表时,这种方式不管用。

–safe-recover -o 最彻底的修复方式,但是比-r方式慢,一般在-r修复失败后才使用。

这种方式读出 所有的行,并以行为基础来重建索引。它的硬盘空间需求比-r方式稍微小一点,因 为它没创建分类缓存。你可以增加key_buffer_size的值来加快修复的速度。

–sort-recover, -n mysql用它类分类索引,尽管结果是临时文件会非常大

–character-sets-dir=… 包含字符集设置的目录

–set-character-set=name 为索引定义一个新的字符集

–tmpdir=path, -t 如果你不想用环境变量TMPDIR的值的话,可以自定义临时文件的存放位置

–quick, -q 最快的修复方式,当数据文件没有被修改时用,当存在多键时,第二个-q将会修改 数据文件

–unpack, -u 解开被myisampack打包的文件

myisamchk应用的一个例子

% myisamchk -r mytable

- recovering (with keycache) MyISAM-table ‘mytable.MYI’

Data records: 0

repair mysql_REPAIR TABLE语法--MySql数据库相关推荐

  1. python接口自动化测试书籍_skPython接口自动化测试 自动化测试教程书籍 用Python实现UI自动化测试 轻松入门Python语法 MySQL数据库 Python基础教程书籍...

    1 本书整体设计思想 . 1 1.1 为什么要做懂技术的测试人员 . 2 1.2 为什么选择这本书. 4 1.3 为什么选择Python 5 1.4 本书能给你带来什么 . 6 1.5 自动化代码的设 ...

  2. CHANGE MASTER TO语法--MySql数据库

    CHANGE MASTER TOmaster_def[,master_def] ... 可以更改从属服务器用于与主服务器进行连接和通讯的参数. MASTER_USER,MASTER_PASSWORD, ...

  3. mysql purge master logs_PURGE MASTER LOGS语法--MySql数据库

    PURGE {MASTER | BINARY} LOGS TO 'log_name' PURGE {MASTER | BINARY} LOGS BEFORE 'date' 用于删除列于在指定的日志或日 ...

  4. mysql数据库缓存为多久_mysql数据库查询缓存总结

    概述 查询缓存(Query Cache,简称QC),存储SELECT语句及其产生的数据结果.闲来无事,做一下这块的总结,也做个备忘! 工作原理 查询缓存工作原理如下: 缓存SELECT操作的结果集和S ...

  5. mysql中括号_《MySQL数据库》SQL简介、语法格式

    一.SQL的简介 结构化查询语言(Structured Query Language),简称SQL.它是专门用来访问数据库的标准编程语言.它可以用于存储数据,查询数据,更新数据以及管理关系型数据库等操 ...

  6. mysql数据库语法_MySQL数据库语法(一)

    MySQL数据库语法 数据库管理系统(DBMS)的概述 什么是DBMS:数据的仓库 方便查询 可存储的数据量大 保证数据的完整.一致 安全可靠 DBMS的发展:今天主流数据库为关系型数据库管理系统(R ...

  7. mysql数据库输出数据语法错误_获取RDS-Mysql数据语法错误

    如果加工规则中涉及RDS资源的加载,则有可能会产生资源的加载或刷新错误.本文档主要介绍从RDS-Mysql获取数据出错的原因以及排查处理方法. 在成功读取源Logstore数据后,加工引擎开始对源Lo ...

  8. MySQL数据库的一些基本语法

    拓展:所知道的数据库:关系型数据库 oracle  DB2  SQLServer MySQL    都比不上上面这些.实际使用功能足够.开源--意味着不收费 企业 运营成本考虑 ) 目前: MySql ...

  9. MySQL中删除数据库的基本语法格式为_《MySQL数据库》SQL简介、语法格式

    原标题:<MySQL数据库>SQL简介.语法格式 一.SQL的简介 结构化查询语言(Structured Query Language),简称SQL.它是专门用来访问数据库的标准编程语言. ...

最新文章

  1. 给Fedora 15的gnome3增加自定义程序快捷方式
  2. ML之FE:特征工程中数据缺失值填充的简介、方法、全部代码实现之详细攻略
  3. java 字符串 面试_Java 字符串面试题
  4. ECCV 2020 《Improving One-stage Visual Grounding by Recursive Sub-query Construction》论文笔记
  5. 滴滴宋世君:DS(数据分析师),究竟是做什么的?
  6. ABAP Smart Help调试截图
  7. VSCODE 一键编译运行
  8. STM32那点事(5)_ADC(中)
  9. 南华大学计算机学院吴取劲,一种基于图深度优先搜索的基本路径集自动生成优化算法-南华大学学报.PDF...
  10. 分布式事务的特征、原理、以及常见3种解决方案
  11. Binary tree paths-深度优先遍历DFS
  12. Ubuntu安装虚拟机工具(VMware Tool)详解
  13. git init github
  14. .Net中TextBox对于焦点的控制(二)
  15. java 中文文件路径乱码 解决方法
  16. 对PID的理解及其实现公式
  17. pdf.js预览pdf文件流(base64)
  18. 线程池引发的故障到底该怎么排查?
  19. Educational Codeforces Round 51 (Rated for Div. 2).B. Relatively Prime Pairs(水题)
  20. 旭辉完成2020年销售目标:还要加码广西,却在北京违规被通报

热门文章

  1. 华为鸿蒙系统前因后果,华为技术自救:鸿蒙系统开源,欢迎友商采用
  2. 过了MySQL 8 OCP(1Z0-908),交一下作业
  3. unfortunately activity has stopped
  4. JVM性能调优1_享学课堂
  5. flex 教程_完整的flex教程
  6. echarts 3D地图点击事件
  7. dfs 洛谷 P1605 迷宫
  8. 外行人对软件测试的常见误解
  9. 皮肤病,得了慢性荨麻疹怎么办?
  10. mysql binlog 记录_MYSQL binlog 日志内容查看