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

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, - - 描述打印一些有关表的信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 MySQL 标准的 my.cnf 配置文件示例: ``` # For advice on how to change settings please see # http://dev.mysql.com/doc/mysql/en/server-configuration-defaults.html [client] port = 3306 socket = /var/run/mysqld/mysqld.sock # Here follows entries for some specific programs # The MySQL server [mysqld] port = 3306 socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql pid-file = /var/run/mysqld/mysqld.pid log-error = /var/log/mysql/error.log # Enable binary logging #log-bin = /var/log/mysql/mysql-bin.log # Point the following paths to different dedicated disks #tmpdir = /tmp/ #log-update = /path-to-dedicated-directory/hostname # Uncomment the following if you are using InnoDB tables #innodb_data_home_dir = /var/lib/mysql #innodb_data_file_path = ibdata1:10M:autoextend #innodb_log_group_home_dir = /var/lib/mysql #innodb_log_arch_dir = /var/lib/mysql # You can set .._buffer_pool_size up to 50 - 80 % # of RAM but beware of setting memory usage too high #innodb_buffer_pool_size = 16M #innodb_additional_mem_pool_size = 2M # Set .._log_file_size to 25 % of buffer pool size #innodb_log_file_size = 5M #innodb_log_buffer_size = 8M #innodb_flush_log_at_trx_commit = 1 #innodb_lock_wait_timeout = 50 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Recommended in standard MySQL setup sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysqldump] quick quote-names max_allowed_packet = 16M [mysql] #no-auto-rehash # faster start of mysql but no tab completition [isamchk] key_buffer = 16M # Following values assume you have at least 32M ram [myisamchk] key_buffer = 16M # InnoDB settings [innodb] innodb_file_per_table=1 innodb_buffer_pool_size=2G innodb_log_file_size=256M innodb_flush_log_at_trx_commit=1 innodb_lock_wait_timeout=50 [mysqld_safe] err-log=/var/log/mysql/mysql.err pid-file=/var/run/mysqld/mysqld.pid ``` 注意:该示例仅供参考,具体的配置需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值