`
Taoo
  • 浏览: 293920 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql 数据表修复

 
阅读更多
由于断电原因,
mysql数据表损坏,
运气比较好,损坏的并不严重,
通过简单修复 (myisamchk -r -q)就解决啦。

主要参照链接:
http://www.chinahtml.com/0610/mysql-11619183797660.html



教你用Myisamchk进行崩溃恢复MySQL
发表时间:2006-10-27内容来源:网页教学网作者:佚名

由MySQL用来存储数据的文件格式以已经被广泛地测试过,但是总是有外部情况可以导致数据库表被破坏:

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前做一个备份。

一、怎样检查表的错误

为了检查一张表,使用下列命令:

myisamchk tbl_name

这能找出所有错误的99.99%。它不能找出的是仅仅涉及数据文件的损坏(这很不常见)。如果你想要检查一张表,你通常应该没有选项地运行myisamchk或用-s或--silent选项的任何一个。

myisamchk -e tbl_name

它做一个完全彻底的数据检查(-e意思是“扩展检查”)。它对每一行做每个键的读检查以证实他们确实指向正确的行。这在一个有很多键的大表上可能花很长时间。myisamchk通常将在它发现第一个错误以后停止。如果你想要获得更多的信息,你能增加--verbose(-v)选项。这使得myisamchk继续一直到最多20个错误。在一般使用中,一个简单的myisamchk(没有除表名以外的参数)就足够了。

myisamchk -e -i tbl_name

象前面的命令一样,但是-i选项告诉myisamchk还打印出一些统计信息。

二、怎样修复表

一张损坏的表的症状通常是查询意外中断并且你能看到例如这些错误:

“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。安全恢复模式使用一个老的恢复方法,处理常规恢复模式不行的少数情况(但是更慢)。

如果在修复时,你得到奇怪的错误(例如out of memory错误),或如果myisamchk崩溃,到阶段3。

阶段3 :困难的修理

如果在索引文件的第一个16K块被破坏,或包含不正确的信息,或如果索引文件丢失,你只应该到这个阶段 。在这种情况下,创建一个新的索引文件是必要的。按如下这样做:

把数据文件移更安全的地方。

使用表描述文件创建新的(空)数据和索引文件:

shell> mysql db_name
mysql> DELETE FROM tbl_name;
mysql> quit

将老的数据文件拷贝到新创建的数据文件之中。(不要只是将老文件移回新文件之中;你要保留一个副本以防某些东西出错。)

回到阶段2。现在myisamchk -r -q应该工作了。(这不应该是一个无限循环)。

阶段4:非常困难的修复

只有描述文件也破坏了,你才应该到达这个阶段。这应该从未发生过,因为在表被创建以后,描述文件就不再改变了。

从一个备份恢复描述文件并且回到阶段3。你也可以恢复索引文件并且回到阶段2。对后者,你应该用myisamchk -r启动。

如果你没有一个备份但是确切地知道表是怎样被创建的,在另一个数据库中创建表的一个拷贝。删除新的数据文件,然后从其他数据库将描述和索引文件移到破坏的数据库中。这给了你新的描述和索引文件,但是让数据文件独自留下来了。回到阶段2并且尝试重建索引文件。

三、表优化

为了组合成碎片的记录并且消除由于删除或更新记录而浪费的空间, 以恢复模式运行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

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


分享到:
评论

相关推荐

    MYSQL数据库修复程序

    这可能包括重建索引、修复表结构等操作。 5. **表设计和查看**:Navicat允许用户查看和修改表的设计,包括字段类型、键设置、索引等。这对于理解表结构和潜在问题至关重要。 6. **SQL查询与内容读取**:通过SQL...

    mysql表修复的实用命令

    修复表数据: ```sql REPAIR TABLE table_name; ``` 其中,`table_name`表示需要修复的表名。这些命令可以有效解决表损坏问题,但如果表损坏严重,可能需要更高级别的工具来进行修复。 ### 使用myisamchk工具修复...

    MySQL数据库INNODB 表损坏修复处理过程

    MySQL报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了。innodb表损坏不能通过repair table 等修复myisam的命令操作。

    MYSQL数据库修复大师

    MySQL数据库修复大师是一款专业的数据库恢复工具,专为MySQL用户提供服务,旨在帮助用户在遇到数据库损坏、数据丢失等问题时,能够高效、准确地恢复重要的数据库信息。这款软件通过深入解析MySQL的数据存储格式,...

    mysql数据库修复专家

    "mysql数据库修复专家"就是针对这种需求的专业工具,它覆盖了MySQL 3到6版本的错误修复,能够处理多种类型的数据库文件,包括MYD、IBD和ibdata1。 MYD、IBD和ibdata1是MySQL数据库中不同类型的数据文件: 1. MYD...

    MYSQL数据库修复工具

    这款工具专为解决MySQL数据库的故障而设计,其主要功能包括数据恢复、表结构修复以及日志分析等。通过先进的算法和深度扫描技术,它能够深入到数据库的底层,找出并修复损坏的记录,确保数据的完整性和一致性。 ...

    MYSQL数据表损坏的原因分析和修复方法小结(推荐)

    本文主要分析了MySQL数据表损坏的原因,并提供了相应的预防措施和修复方法。 1. **数据表损坏的原因**: - 服务器突然断电:电源中断可能会导致数据文件未完成写入,从而造成损坏。 - 强制关机:在没有正常关闭...

    MYSQL数据库修复大师7.12

    在MySQL中,.myd(MYDatar)文件存储了表的实际数据,而.myi(MYIndex)文件则包含了表的索引。当这些文件受到损坏,例如由于硬件故障、病毒感染或不正确的关闭数据库时,可能导致无法正常访问数据库。MySQL数据库...

    MYSQL数据库表的修复教程

    6. **使用第三方工具**:市场上有许多专门的MySQL数据恢复工具,如Percona Xtrabackup、Data Recovery Toolkit for MySQL等,它们可能能处理更复杂的情况。 在修复过程中,务必谨慎操作,避免对数据造成进一步的...

    MySQL数据库表修复 MyISAM

    一:MySQL中MyISAM表损坏原因总结: 1、 服务器突然断电导致数据文件损坏;强制关机,没有先关闭mysql 服务;mysqld 进程在写表时被杀掉。 2、 磁盘损坏。 3、 服务器死机。 4、 mysql 本身的bug 。 二:MySQL中MyISAM...

    phpmyadmin显示MySQL数据表“使用中” 修复后依然无效的解决方法

    尝试通过phpmyadmin的“修复表”、“分析表”和“优化表”功能来修复,但这些尝试均未成功,提示无法创建新的临时文件。 为了解决这个问题,可以采取以下步骤: 1. 首先,需要停止MySQL服务。在命令行界面(CMD)...

    mysqlcheck.exe 修复mysql数据库

    在这种情况下,`mysqlcheck.exe`工具就显得尤为重要,它是MySQL提供的一种实用程序,专门用于检查、修复、优化和分析MySQL数据库中的表。 `mysqlcheck.exe`是一个命令行工具,它能够执行多种功能,包括: 1. **...

    MySQL数据表损坏的正确修复方案

    这里的`-A`表示检查所有数据库,`-o`表示优化表,`-r`表示修复表,`-p`后面跟上MySQL的密码。 总结来说,修复MySQL数据表损坏的方法主要包括使用SQL语句`check table`和`repair table`,以及通过命令行工具`...

    mysql.sql只有数据表结构.zip

    mysql5.7数据库数据表,用于初始化和拯救数据,配合https://blog.csdn.net/u012442504/article/details/102513780,进行使用,效果绝佳,立竿见影,这个只有数据表结构,用于快速拯救数据库,修复官方的innodb_table...

    mysql 8 用户初始表(user)

    mysql8 用户初始表(user),可以用于账密码忘记,用户表被篡改等情况恢复用户信息(密码是:root)

    Python-同步mysql数据到elasticsearch的工具

    "Python-同步mysql数据到elasticsearch的工具"正是为了实现这一目的,它提供了便捷的解决方案。 该工具主要基于Python编程语言开发,利用Python的灵活性和强大的库支持,实现了数据迁移的功能。Python的PyMySQL库...

    mysql数据库备份和恢复工具

    1. 全量备份:全量备份是指备份整个数据库,包括所有的表、索引和其他数据库对象。这通常通过mysqldump命令实现。 2. 增量备份:增量备份仅备份自上次全量或增量备份以来发生改变的数据。这种备份方式节省了存储...

Global site tag (gtag.js) - Google Analytics