MySQL数据信息库奔溃如何办?用Myisamchk!

2021-02-24 09:40 admin

  由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 文档是不是毁坏而且在这里种状况下,舍弃修补。你还可以给myisamchk2个--quick选择项。在这里种状况下,myisamchk不容易在一些不正确上(象反复键)舍弃,反过来尝试根据改动 .MYD 文档处理他们。一般,仅有在你一直在太少的空余硬盘室内空间上执行一个一切正常修补,应用2个--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的OPTIMIZETABLE句子应用的同样方法来提升一张表,OPTIMIZE TABLE较为非常容易,可是myisamchk迅速。都没有在一个好用程序和网络服务器中间无须要的互动将会性,由于如果你应用OPTIMIZE TABLE时,网络服务器做全部的工作中。

myisamchk也是有你可以用于改善一个表的特性的许多别的选择项:

-S, --sort-index

-R index_num, --sort-records=index_num

-a, --analyze

针对选择项详细的叙述见myisamchk启用英语的语法。