您现在的位置: 365建站网 > 365学习 > 如何使用 myisamchk 修复损坏的 MysQL 表

如何使用 myisamchk 修复损坏的 MysQL 表

文章来源:365jz.com     点击数:90    更新时间:2020-12-28 10:26   参与评论

MyISAM 是 MySQL 数据库的默认存储引擎。MyISAM 表很容易损坏。在这篇文章中,我将解释如何使用 myisamchk 来识别和修复 MyISAM 中的表损坏。在 MySQL 下创建表时,它会创建三个不同的文件:*.frm文件来存储表格式* 。用于存储数据的 MYD (MyData) 文件,以及 *。用于存储索引的 MYI(MyIndex)。我更喜欢使用 InnoDB 作为更大的数据库的存储引擎,因为它类似于 Oracle 并提供提交、回滚选项。
我从

MySQL 数据库的生产 bugzilla
应用程序收到以下错误。从错误消息中可以明显看attach_data已损坏,需要重新显示。损坏的桌子可以使用 myisamchk 进行修复,如下所述。

undef error - DBD::mysql::db selectrow_array failed: Table 'attach_data' is
marked as crashed and should be repaired [for Statement "SELECT LENGTH(thedata)
FROM attach_data WHERE id = ?"] at Bugzilla/Attachment.pm line 344
Bugzilla::Attachment::datasize('Bugzilla::Attachment=HASH(0x9df119c)') called

1. 使用 myisamchk 识别所有损坏的表

# myisamchk /var/lib/mysql/bugs/*.MYI >> /tmp/myisamchk_log.txtmyisamchk: error: Wrong bytesec: 0-0-0 at linkstart: 18361936
MyISAM-table 'attach_data.MYI' is corrupted
Fix it using switch "-r" or "-o"
myisamchk: warning: 1 client is using or hasn't closed the table properly
MyISAM-table 'groups.MYI' is usable but should be fixed
myisamchk: warning: 1 client is using or hasn't closed the table properly
MyISAM-table 'profiles.MYI' is usable but should be fixed

当您将 myisamchk 的输出重定向到临时文件时,它将仅在屏幕上显示损坏的表名。/tmp/myisamchk_log.txt文件将包含有关所有表(包括良好表)的信息,如下所示:

Checking MyISAM file: user_group_map.MYI
Data records:     182   Deleted blocks:       0
- check file-size
- check record delete-chain
- check key delete-chain
- check index reference
- check data record references index: 1

2. 使用 myisamchk 修复损坏的表

执行 myisamchk,如下所示,使用 -r 选项修复上述步骤中标识的损坏表。

# myisamchk -r profiles.MYI- recovering (with sort) MyISAM-table 'profiles.MYI'
Data records: 80
- Fixing index 1
- Fixing index 2

您可能会收到错误消息:如果应用程序和其他表仍在使用表,则客户端正在使用或尚未正确关闭表。为了避免此错误消息,请先关闭 mysqld,然后再执行修复,如果您有能力关闭数据库一段时间。如果没有,请使用 FLUSH TABLES 强制 mysqld 刷新内存中仍在的任何表修改。

3. 对整个 MySQL 数据库一起执行检查和修复

# myisamchk --silent --force --fast --update-state /var/lib/mysql/bugs/*.MYImyisamchk: MyISAM file /var/lib/mysql/bugs/groups.MYI
myisamchk: warning: 1 client is using or hasn't closed the table properly
myisamchk: MyISAM file /var/lib/mysql/bugs/profiles.MYI
myisamchk: warning: 1 client is using or hasn't closed the table properly
  • -s, - -你可以用两个 - s 使 myisamchk 非常沉默。

  • -f, - 强制选项 : 重新启动 myisamchk 自动与修复选项 -r, 如果表中有任何错误.

  • -F,--快速选项:仅检查尚未正确关闭的表。

  • -U --更新状态选项:当表发现任何错误时,将表标记为崩溃。

4. 为大型 MySQL 数据库分配额外内存

对于大型数据库,可能需要几个小时才能恢复表。根据系统上可用的 RAM,在执行 myisamchk 时增加内存参数,如下所示:

# myisamchk --silent --force --fast --update-state \
--key_buffer_size=512M --sort_buffer_size=512M \
--read_buffer_size=4M --write_buffer_size=4M \
/var/lib/mysql/bugs/*.MYI

5. 使用 myisamchk 获取有关表的信息

您也可以使用 myisamchk 获取有关表的详细信息,如下所示。

# myisamchk -dvv profiles.MYIMyISAM file:         profiles.MYI
Record format:       Packed
Character set:       latin1_swedish_ci (8)
File-version:        1
Creation time:       2007-08-16 18:46:59
Status:              open,changed,analyzed,optimized keys,sorted index pages
Auto increment key:              1  Last value:                    88
Data records:                   88  Deleted blocks:                 0
Datafile parts:                118  Deleted data:                   0
Datafile pointer (bytes):        4  Keyfile pointer (bytes):        4
Datafile length:              6292  Keyfile length:              6144
Max datafile length:    4294967294  Max keyfile length: 4398046510079
Recordlength:                 2124

table description:
Key Start Len Index   Type                     Rec/key         Root  Blocksize
1   2     3   unique  int24                          1         1024       1024
2   5     765 unique  char packed stripped           1         2048       4096

Field Start Length Nullpos Nullbit Type
1     1     1
2     2     3                      no zeros
3     5     765                    no endspace

6. 所有 myisamchk 选项

执行以下命令以了解 myisamchk 的所有可用选项。

# myisamchk --help

以下是一些关键选项,您可以使用与 myisamchk。

全局选项:

  • - s, -仅打印错误。一个人可以使用两个 - s 使 myisamchk 非常沉默。

  • - v, -打印更多信息。这可用于 -描述和 --检查。使用许多 -v 来更详细。

  • -V, - 版本打印版本并退出。

  • - 哇, 等一下如果表已锁定,请等待。

检查选项(检查是 myisamchk 的默认操作):

  • - c, - - 检查检查表有错误。

  • -e, - - -检查表非常通。只有在极端情况下才使用,因为 myisamchk 通常能够找出表是否正常,即使没有此开关。

  • -F, - - 快仅检查尚未正确关闭的表。

  • -C, - - 只检查更改仅检查自上次检查以来已更改的表。

  • - f, - -如果表中有任何错误,请使用"-r"重新启动。状态将更新为"-更新状态"。

  • -i, - - 信息打印有关已检查表的统计信息。

  • -m, - - -比扩展检查更快,但只发现 99.99% 的所有错误。在大多数情况下应该足够好。

  • -U - 更新状态如果发现任何错误,将表标记为已崩溃。

  • -T, - - 只读不要将表标记为已选中。

维修选项(使用"-r"或"-o"时):

  • -B, - 备份备份 。MYD 文件作为"文件名时间"。巴克。

  • -- 更正校验和更正表的校验和信息。

  • -e, - - -尝试从数据文件中恢复每一个可能的行。通常,这也会发现很多垃圾行;不要使用这个选项,如果你不是完全绝望。

  • - f, - -覆盖旧的临时文件。

  • -r, - - 恢复可以修复除不是唯一键之外的几乎任何内容。

  • -n, - 排序恢复强制恢复与排序,即使临时文件将是非常大。

  • -p, - - 并行恢复使用与"-r"和"-n"相同的技术,但在不同的线程中并行创建所有键。

  • -o, - - -使用旧的恢复方法;比 "-r" 慢,但可以处理几个情况下,"-r"报告无法修复数据文件。

  • - q, - - 快通过不修改数据文件加快修复速度。可以给出第二个"-q"来强制 myisamchk 在重复密钥的情况下修改原始数据文件。注:无法使用此选项修复数据文件损坏的表。

  • - u, - - -拆包文件包装与 myisampack 。

其他操作:

  • -a, - -分析键的分布。将更快地加入 MySQL。您可以使用"-描述-详细"来检查计算table_name。

  • - d, - - 描述打印一些有关表的信息。


如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛


发表评论 (90人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换图片
最新评论
------分隔线----------------------------