也许很多人遇到过类似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文件丢失或者头部受到破坏时,这样的方式不管用,例如:

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

%mysqlcheck -r sports_results mytable -uuser -ppass

sports_results.mytable OK

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

%mysqlcheck -r sports_results mytable events -uuser -ppass

sports_results.mytable OK

sports_results.events OK

%mysqlcheck -r sports_results -uuser -ppass

sports_results.mytable OK

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’

mysql 怎么修复表_修复mysql表相关推荐

  1. mysql修复损坏表_在MySQL中,如何修复损坏的表

    本指南旨在作为故障排除资源和诊断MySQL设置的起点. 有时,MySQL表损坏,这意味着发生了错误,并且其中的数据无法读取. 损坏表的一些常见原因是:MySQL服务器在写数据的时候停止.外部程序同时修 ...

  2. mysql 分区表 外键_【MySQL】表分区

    MySQL表分区是MySQL提供的一种简单的数据表水平拆分方法. 分区表是一个逻辑表,它由多个物理子表组成. 目前只有 InnoDB 和 NDB 正式支持表分区. 注:表分区虽然可以缓解单表数据量过大 ...

  3. 如何用mysql创建orders表_《MySQL必知必会》学习笔记

    本书所用的表: 68.png 67.png 66.png 65.png 64.png 63.png 第一章:了解SQL 数据库:保存有组织的数据的容器(通常是一个文件或一组文件). 数据库软件:DBM ...

  4. mysql 截断表_入门MySQL——基础语句篇

    前言: 前面几篇文章,我们介绍了MySQL的基础概念及逻辑架构.相信你现在应该有了自己的一套MySQL环境,接下来我们就可以开始练习MySQL了.本文将从MySQL最基础的语句出发,为你展示出创建及修 ...

  5. mysql auto_increment建表_在mysql表中创建一个ID auto_increment(在事实之后)

    小编典典 例如,这是一个具有主键但不是的表AUTO_INCREMENT: mysql> CREATE TABLE foo ( id INT NOT NULL, PRIMARY KEY (id) ...

  6. mysql交互式创建表_用mysql语句创建数据表详细教程

    MySQL不仅用于表数据操纵,而且还可以用来执行数据库和表的所有操作,包括表本身的创建和处理. 一般有两种创建表的方法: 1.使用具有交互式创建和管理表的工具: 2.表也可以直接用MySQL语句操纵. ...

  7. Mysql商品和图片表_【mysql】数据库设计模式:多个图片怎么和商品关联

    比如发布商品,标题,单价,属性- 还有一个产品图片,而产品图片一般是选择图片后就上传了图片,这时候产品应该入库啦,这时候还不知道这个商品ID,这样怎么关联商品? 如果是提交后修改,这时候知道了商品ID ...

  8. mysql bench建立一张表_使用MySQL Workbench建立数据库,建立新的表,向表中添加数据...

    点击上图中的"加号"图标,新建一个连接, 如上图,先输入数据库的账号密码,帐号默认为root,填好密码后 点击"OK",连接就建立好了,建立完成后,会出现一个长 ...

  9. mysql 控制id复原_清空mysql表后,自增id复原

    一.清除mysql表中数据 deletefrom表名; truncate table 表名; 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以 ...

最新文章

  1. 谈 JavaScript 浮点数计算精度问题(如0.1+0.2!==0.3)
  2. LeetCode Reverse Nodes in k-Group(单链表连续分段反转)
  3. poj 2892 Tunnel Warfare
  4. 目睹鸿蒙开创四大至高位面,吞噬星空 绝非鸿蒙系列,完结前最后的分析【申精】...
  5. POSIX 消息队列相关问题
  6. 事务传播机制/数据库异常解析——2016-8-13分享总结
  7. Spring.NET教程(二十)——整合Quartz.NET(应用篇)
  8. Memento 备忘录 快照模式 MD
  9. centos7安装kubernetes 1.1
  10. [读书笔记]《Windows游戏编程之从零开始》(零)
  11. protel DXP 2004
  12. SDN介绍(什么是SDN)
  13. Your local changes to the following files would be overwritten by merge
  14. 获取QQ音乐排行榜数据
  15. 为什么有些人拒绝别人的方式是说谎而不是直接说不?
  16. 超越谷歌与特斯拉?百度Apollo生态有一套
  17. 走近篮球运动·体育项目
  18. pytorch对矩阵(奇异和非奇异)求逆
  19. navigationController.navigationBar.hiden 导航栏隐藏引发的坐标自动变更
  20. 疯狂的 ICO 终于被全面叫停;9 月全球数据库排名,Oracle 跌势明显

热门文章

  1. 【C语言循环结构题目】在屏幕上打印n行*号倒三角形(此处n为6)
  2. 《图解番茄工作法》读后感
  3. Mysql(using temporary 与 using filesort)
  4. 2019-01-07 16:35:40 18616 [Warning] Slave SQL: Could not execute Query event. Detailed error: ;, Err
  5. 路由与交换-华为eNSP-交换机上配置DHCP技术
  6. Flash鼠绘入门第四课:绘制漂亮的梅花-梅花骨朵Flash鼠绘方法
  7. 嫦娥二号没有拍到美国登月痕迹
  8. 2017黑科技趋势最具看点的十大新品
  9. 南方周末:史玉柱脑白金式网游重建巨人(转载)
  10. 我国老年相亲市场的现状分析:百亿级市场的难点与机遇