mysql之repair table 修复表札记
REPAIR [LOCAL | NO_WRITE_TO_BINLOG]
TABLE tbl_name[,tbl_name]
... [QUICK] [EXTENDED] [USE_FRM]
REPAIR TABLE用于修复被破坏的表。默认情况下,REPAIR TABLE与myisamchk
--recovertbl_name具有相同的效果。REPAIR
TABLE对MyISAM和ARCHIVE表起作用。请参见,。
通常,您基本上不必运行此语句。但是,如果灾难发生,REPAIR
TABLE很有可能从MyISAM表中找回所有数据。如果您的表经常被破坏,您应该尽力找到原因,以避免使用REPAIR
TALBE。请参见。同时也见。
本语句会返回一个含有以下列的表:
列
值
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
mysql之repair table 修复表札记的更多相关文章
- MySQL check table/optimize table/analyze table/REPAIR TABLE
MySQL check table/optimize table/analyze table/REPAIR TABLE 转自:https://www.cnblogs.com/datastack/p/3 ...
- mysql下优化表和修复表命令使用说明(REPAIR TABLE和OPTIMIZE TABLE)
随着mysql的长期使用,可以修复表来优化,优化时减少磁盘占用空间.方便备份. REPAIR TABLE `table_name` 修复表 OPTIMIZE TABLE `table_name` 优化 ...
- mysql下优化表和修复表命令(repair table、optimize table)
随着mysql的长期使用,肯定会出现一些问题,一般情况下mysql表无法访问,就可以修复表了,优化时减少磁盘占用空间,方便备份. repair table table_name //修复表 optim ...
- mysql下优化表和修复表命令使用说明(REPAIR TABLE和OPTIMIZE TABLE)
REPAIR TABLE `table_name` 修复表 OPTIMIZE TABLE `table_name` 优化表 show create table tablename 表结构 REPA ...
- 利用mysql数据库中的TMD表修复“is marked as crashed and last (automatic?) repair failed”的错误 Database query error
===========================测试成功============================================= 1.页面出现错误:Database query ...
- mysql修复表
数据库Table xxx is marked as crashed and should be repaired错误的解决方法服务器断电等原因可能导致数据表损坏,导致访问的时候提示:Table xxx ...
- mysql 优化修复表
OPTIMIZE TABLE `table_name` 优化表 MyISAM 引擎清理碎片 OPTIMIZE语法: OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABL ...
- mysql 修复表和优化表
REPAIR TABLE `table_name` 修复表 OPTIMIZE TABLE `table_name` 优化表
- mysql 1093 - You can't specify target table 'xx表' for update in FROM clause
为了修复节点表某批次数据的用户数据,做出了以下尝试: , name , , )); 执行:[Err] 1093 - You can't specify target table 'zs_work_ap ...
随机推荐
- iOS使用带字体图标的UIButton(支持各种方向)
简书地址:http://www.jianshu.com/p/1c288440754d demo地址:https://github.com/Brances/ZMProject
- (转)Linux安装Tomcat
为了学习java,需要一个服务器,因此决定用比较流行的tomcat.根据网上对安装tomcat的介绍,自己进行了安装,现在已经成功了,现在把安装的过程进行记录,也供大家学习参考. 一.从官方网站上 ...
- 关于recycleview 滑动item变长(item变形)问题
昨天在做项目的时候出现了bug,表现是在滑动的时候,整个item会被拉长了,松手后就回归正常大小了, 出现这个的主要原因是因为你的item布局中最大的那个根布局是 match_parent状态,因此导 ...
- PHP使用ueditor上传配置
引入 按照ueditor官网demo, 引入好ueditor之后, 默认是不能进行上传操作的 在上传时,在上传时会有如下图提示 配置上传 在editor/php目录下,有一个config.json文件 ...
- Python学习_10__python2到python3
同样作为动态语言,python的面相对像和ruby有很多类似的地方,这里还是推荐<Ruby元编程>一书来参考学习python的面向对象.然而python并不是纯面向对象设计,所以很多rub ...
- 【JavaScript 】for 循环进化史
ECMAScript 6已经逐渐普及,经过二十多年的改进,很多功能也有了更成熟的语句,比如 for 循环 这篇博客将介绍一下从最初的 for 循环,到 ES6 的 for-of 等四种遍历方法 先定义 ...
- IntelliJ IDEA2017.3 激活
网上IntelliJ IDEA激活方式大多均已失效,目前常用激活方式为License Server 激活: http://idea.imsxm.com/ NOTE: 在上周五2017-12-1那天还是 ...
- VMware虚拟机下为Ubuntu添加磁盘
20G的磁盘还是不够用啊,正好复习下磁盘分区和逻辑卷. 关闭虚拟机,打开VMware,右键虚拟机点击设置,点下下方的添加,就可以添加磁盘了. 进入虚拟机,查看: root@ubuntu:/# fdis ...
- linux常用基本命令整理小结
linux系统遵循的基本原则 由目标单一的小程序组成,组合小程序完成复杂任务: 一切皆文件: 尽量避免捕捉用户接口: 配置文件保存为纯文本文件: Linux命令行常识 命令格式 命令+选项+参数 选项 ...
- MySQL数据库操作
一创建数据库 1 语法(help create database) CREATE DATABASE 数据库名 charset utf8; 2 数据库命名规则: 可以由字母.数字.下划线.@.#.$ 区 ...