mysqld进程在一个写入当中被杀死。计算机的意外关闭(例如,如果计算机掉电)。一个硬件错误这章描述如何检查和处理在MySQL数据库中的数据损坏。如果你的表损坏很多,你应该尝试找出其原因!见G.1 调试一个MySQL服务器。在执行崩溃恢复时,理解在一个数据库中的每一个表tbl_name对应的在数据库目录中的3个文件是很重要的:文件 用途“tbl_name.frm” 表定义(表格)文件“tbl_name.MYD” 数据文件“tbl_name.MYI” 索引文件这3个文件的每一个文件类型可能遭受不同形式的损坏,但是问题最常发生在数据文件和索引文件。myisamchk通过一行一行地创建一个“.MYD”(数据 )文件的副本来工作,它通过由删除老的“.MYD 文件并且重命名新文件到原来的文件名结束修复阶段。如果你使用--quick,myisamchk不创建一个临时“.MYD”文件,只是假定“.MYD”文件是正确的并且仅创建一个新的索引文件,不接触“.MYD”文件,这是安全的,因为myisamchk自动检测“.MYD”文件是否损坏并且在这种情况下,放弃修复。你也可以给myisamchk两个--quick选项。在这种情况下,myisamchk不会在一些错误上(象重复键)放弃,相反试图通过修改“.MYD”文件解决它们。通常,只有在你在太少的空闲磁盘空间上实施一个正常修复,使用两个--quick选项才有用。在这种情况下,你应该至少在运行myisamchk前做一个备份。13.4.1 怎样检查表的错误为了检查一张表,使用下列命令:myisamchk tbl_name这能找出所有错误的99.99%。它不能找出的是仅仅涉及数据文件的损坏(这很不常见)。如果你想要检查一张表,你通常应该没有选项地运行myisamchk或用-s或--silent选项的任何一个。myisamchk -e tbl_name它做一个完全彻底的数据检查(-e意szj(孙占杰) 16:44:08思是“扩展检查”)。它对每一行做每个键的读检查以证实他们确实指向正确的行。这在一个有很多键的大表上可能花很长时间。myisamchk通常将在它发现第一个错误以后停止。如果你想要获得更多的信息,你能增加--verbose(-v)选项。这使得myisamchk继续一直到最多20个错误。在一般使用中,一个简单的myisamchk(没有除表名以外的参数)就足够了。myisamchk -e -i tbl_name象前面的命令一样,但是-i选项告诉myisamchk还打印出一些统计信息。13.4.2 怎样修复表一张损坏的表的症状通常是查询意外中断并且你能看到例如这些错误:“tbl_name.frm”被锁定不能改变。不能找到文件“tbl_name.MYI”(Errcode :### )。从表处理器的得到错误###(此时,错误135是一个例外)。意外的文件结束。记录文件被毁坏。在这些情况下,你必须修复表。myisamchk通常能检测并且修复出错的大部分东西。修复过程包含最多4个阶段,在下面描述。在你开始前,你应该cd到数据库目录和检查表文件的权限,确保他们可被运行mysqld的Unix用户读取(和你,因为你需要存取你正在检查的文件)。如果它拒绝你修改文件,他们也必须是可被你写入的。阶段1:检查你的表运行myisamchk *.MYI或(myisamchk -e *.MYI,如果你有更多的时间)。使用-s(沉默)选项禁止不必要的信息。你必须只修复那些myisamchk报告有一个错误的表。对这样的表,继续到阶段2。如果在检查时,你得到奇怪的错误(例如out of memory错误),或如果myisamchk崩溃,到阶段3。舞台 2 :简单安全的修复首先,试试myisamchk -r -q tbl_name(-r -q意味着“快速恢复模式”)。这将试图不接触数据文件来修复索引文件。如果数据文件包含它应有的一切和在数据文件指向正确地点的删除连接,这应该管用并且表可被修复。开始修理下一张表。否则,使用下列过程:在继续前做数据文件的一个备份。使用myisamchk -r tbl_name(-r意味着“恢复模式”)。这将从数据文件中删除不正确的记录和已被删除的记录并重建索引文件。如果前面的步骤失败,使用myisamchk --safe-recover tbl_name。安全恢复模式使用一个老的恢szj(孙占杰) 16:44:09复方法,处理常规恢复模式不行的少数情况(但是更慢)。如果在修复时,你得到奇怪的错误(例如out of memory错误),或如果myisamchk崩溃,到阶段3。CMD到MYSql需要修复表的目录下;myisamchk -r tbl_name(绝对路径)舞台 3 :困难的修理如果在索引文件的第一个16K块被破坏,或包含不正确的信息,或如果索引文件丢失,你只应该到这个阶段 。在这种情况下,创建一个新的索引文件是必要的。按如下这样做:把数据文件移更安全的地方。使用表描述文件创建新的(空)数据和索引文件:shell> mysql db_namemysql> Delete FROM tbl_name;mysql> quit将老的数据文件拷贝到新创建的数据文件之中。(不要只是将老文件移回新文件之中;你要保留一个副本以防某些东西出错。)回到阶段2。现在myisamchk -r -q应该工作了。(这不应该是一个无限循环)。阶段4:非常困难的修复只有描述文件也破坏了,你才应该到达这个阶段。这应该从未发生过,因为在表被创建以后,描述文件就不再改变了。从一个备份恢复描述文件并且回到阶段3。你也可以恢复索引文件并且回到阶段2。对后者,你应该用myisamchk -r启动。如果你没有一个备份但是确切地知道表是怎样被创建的,在另一个数据库中创建表的一个拷贝。删除新的数据文件,然后从其他数据库将描述和索引文件移到破坏的数据库中。这给了你新的描述和索引文件,但是让数据文件独自留下来了。回到阶段2并且尝试重建索引文件。13.4.3 表优化为了组合成碎片的记录并且消除由于删除或更新记录而浪费的空间, 以恢复模式运行myisamchk:shell> myisamchk -r tbl_name你可以用SQL的OPTIMIZE TABLE语句使用的相同方式来优化一张表,OPTIMIZE TABLE比较容易,但是myisamchk更快。也没有在一个实用程序和服务器之间不必要的交互可能性,因为当你使用OPTIMIZE TABLE时,服务器做所有的工作。myisamchk也有你可用来改进一个表的性能的很多其他选项:-S, --sort-index-R index_num, --sort-records=index_num-a, --analyze

对于选项完整的描述见13.1.1 myisamchk调用语法

本文转自holy2009 51CTO博客,原文链接:http://blog.51cto.com/holy2010/365365

mysql 修复表 阿里云_MySql数据表修复方法-阿里云开发者社区相关推荐

  1. mysql合并表快速去重_MySQL数据表合并去重的简单实现方法

    场景: 爬取的数据生成数据表,结构与另一个主表相同,需要进行合并+去重 解决:(直接举例) 首先创建两个表pep,pep2,其中pep是主表 CREATE TABLE IF NOT EXISTS `p ...

  2. mysql 为数据表添加字段_MySQL数据表添加字段实例

    MySQL 允许在开头.中间和结尾处添加字段.针对不同的位置,MySQL数据表添加字段的方式也有所不同,下面我们一起来看MySQL数据表添加字段的实例,方便我们理解MySQL数据表添加字段的方式. M ...

  3. mysql range代表什么意思_MySQL数据表range分区例子

    某些行业数据量的增长速度极快,随着数据库中数据量的急速膨胀,数据库的插入和查询效率越来越低.此时,除了程序代码和查询语句外,还得在数据库的结构上做点更改:在一个主读辅写的数据库中,当数据表数据超过10 ...

  4. navicat 表合并查询_MySQL数据表合并去重的简单实现方法

    场景: 爬取的数据生成数据表,结构与另一个主表相同,需要进行合并+去重 解决:(直接举例) 首先创建两个表pep,pep2,其中pep是主表 CREATE TABLE IF NOT EXISTS `p ...

  5. mysql 目录武沛齐_MySQL数据表中的数据操作

    1.插入数据 insert into t_user (username,password,nickname) values ('foye','123','佛爷'); 以下方式必须写出所有的字段 ins ...

  6. mysql数据表去重合并_MySQL数据表合并(两表字段相同)以及数据去重(抄)

    数据去重 现有两个表 test_01 test_02 其中test_01有重复数据 统计重复数据 select count(*) as repeat_count,name from test_01 g ...

  7. mysql数据表操作_MySQL数据表基本操作实例详解

    本文实例讲述了MySQL数据表基本操作.分享给大家供大家参考,具体如下: 数据表的基本操作 1.主键约束要求主键列的数据唯一,并且不允许为空.主键能够唯一地识别表中的一条记录,可以结合外键来定义不同数 ...

  8. mysql设计功能设置表_MySQL数据表的设计

    数据表(Table) 数据表是数据库的基本组成元素,以记录(行)和字段(列)组成的二位结构用于储存数据.数据库由表结构和表内容组成,先建立表结构,然后才能输入数据.数据表结构设计主要包括字段名称,字段 ...

  9. mysql为什么行数据库_关系数据表中的行称为什么?

    在一个二维表中,水平方向的行称为元组,每一行是一个元组:元组对应表中的一个具体记录. 数据元组也称为记录.一个数据表中的每一个记录均有一个惟一的编号(记录号).一个记录也就是数据表中的一行. 元组(t ...

最新文章

  1. 20155301 滕树晨linux基础——linux进程间通信(IPC)机制总结
  2. Java开发面试题及答案,SpringBoot统一日志处理原理
  3. 使用cert-manager实现Ingress https
  4. B. Complete the Word (尺取法)
  5. 如何让Filddler抓包时忽略某些主机名
  6. Android中实时视频传输(摄像头实时视频传输)解决方案二
  7. oculus rift 开发(一)
  8. zabbix自定义监控Key值
  9. Python处理CSV大文件特定行数据
  10. 真没想到!时隔3年,被废掉武功的快播,依然是最受欢迎的播放器
  11. 微软mysql sqlhelper_微软SqlHelper详细解读
  12. java对接金蝶webapi
  13. IP地址中A类、B类、C类地址的区别
  14. 硬盘参数调整命令hdparm
  15. 工具人实锤!我用java中的文件IO流帮同事处理了足足18M的文本数据,泪目(一)
  16. ENSPLAB笔记:配置VXLAN(分布式网关,BGP EVPN方式)(Part1)
  17. Altium Designer系列: DRC规则英文对照
  18. 使用virtuoso和calibre对版图进行DRC LVS的检查
  19. 格式工厂去广告版|格式工厂(Format Factory)免费版下载 v4.8.0
  20. python开发mbus程序_关于MBUS MSG指令

热门文章

  1. Linux配置sudo
  2. [收藏]REST -维基百科
  3. 51CTO交流摘录(1):SOC的定义、适用性和组成
  4. 以表达式作为参数传入SQL的存储过程中去
  5. 如何计算 string 的 crc32 值 ?
  6. .NET6之MiniAPI(三):Response
  7. .Net之SoapCore简单使用
  8. .Net Core with 微服务 - Polly 服务降级熔断
  9. 在 Windows 服务中托管 ASP.NET Core
  10. .NET 异步详解(更新)