MySQL :: MySQL 8.4 参考手册 :: 6.6.4 myisamchk — MyISAM 表维护工具

admin 3424 2025-09-10 21:55:50

6.6.4 myisamchk — MyISAM 表维护工具

6.6.4.1 myisamchk 通用选项6.6.4.2 myisamchk 检查选项6.6.4.3 myisamchk 修复选项6.6.4.4 其他 myisamchk 选项6.6.4.5 使用 myisamchk 获取表信息6.6.4.6 myisamchk 内存使用情况

The myisamchk 实用程序获取有关数据库表的的信息,或者检查、修复或优化它们。 myisamchk 与 MyISAM 表(存储数据和索引的表具有 .MYD 和 .MYI 文件)一起使用。

您也可以使用 CHECK TABLE 和 REPAIR TABLE 语句来检查和修复 MyISAM 表。请参阅 第 15.7.3.2 节,“CHECK TABLE 语句” 和 第 15.7.3.5 节,“REPAIR TABLE 语句”。

不支持将 myisamchk 与分区表一起使用。

警告

在执行表修复操作之前最好备份表;在某些情况下,该操作可能会导致数据丢失。可能的原因为文件系统错误,但不仅限于此。

像这样调用 myisamchk

myisamchk [options] tbl_name ...options 指定您希望 myisamchk 执行的操作。它们在以下部分中描述。您还可以通过调用 myisamchk --help 获取选项列表。

如果没有选项,myisamchk 仅检查您的表作为默认操作。要获取更多信息或告诉 myisamchk 采取纠正措施,请指定以下讨论中所述的选项。

tbl_name 是您要检查或修复的数据库表。如果您在数据库目录之外运行 myisamchk,则必须指定数据库目录的路径,因为 myisamchk 不知道数据库的位置。实际上,myisamchk 实际上并不关心您正在处理的文件是否位于数据库目录中。您可以将对应于数据库表的 文件复制到其他位置,并在那里对其执行恢复操作。

如果您愿意,可以在 myisamchk 命令行上命名多个表。您也可以通过命名其索引文件(带有 .MYI 后缀的文件)来指定表。这使您能够使用模式 *.MYI 指定目录中的所有表。例如,如果您在数据库目录中,可以使用以下命令检查该目录中的所有 MyISAM 表

myisamchk *.MYI如果您不在数据库目录中,可以使用以下命令检查该目录中的所有表,方法是指定目录的路径

myisamchk /path/to/database_dir/*.MYI您甚至可以通过指定带有 MySQL 数据目录路径的通配符来检查所有数据库中的所有表

myisamchk /path/to/datadir/*/*.MYI快速检查所有 MyISAM 表的推荐方法是

myisamchk --silent --fast /path/to/datadir/*/*.MYI如果您想检查所有 MyISAM 表并修复任何损坏的表,可以使用以下命令

myisamchk --silent --force --fast --update-state \

--key_buffer_size=64M --myisam_sort_buffer_size=64M \

--read_buffer_size=1M --write_buffer_size=1M \

/path/to/datadir/*/*.MYI此命令假设您有超过 64MB 的可用空间。有关 myisamchk 的内存分配的更多信息,请参阅 第 6.6.4.6 节,“myisamchk 内存使用情况”。

有关使用 myisamchk 的更多信息,请参阅 第 9.6 节,“MyISAM 表维护和崩溃恢复”。

重要

您必须确保在运行 myisamchk 时,没有其他程序正在使用这些表。最有效的措施是在运行 myisamchk 时关闭 MySQL 服务器,或者锁定 myisamchk 所使用的所有表。

否则,当您运行 myisamchk 时,它可能会显示以下错误消息

warning: clients are using or haven't closed the table properly这意味着您正在尝试检查一个表,该表已由另一个程序(例如 mysqld 服务器)更新,而该程序尚未关闭该文件,或者已在没有正确关闭该文件的情况下死亡,这有时会导致一个或多个 MyISAM 表损坏。

如果 mysqld 正在运行,您必须强制它使用 FLUSH TABLES 刷出仍然缓存在内存中的任何表修改。然后,您应该确保在运行 myisamchk 时,没有人使用这些表

然而,避免此问题的最简单方法是使用CHECK TABLE 来检查表,而不是使用myisamchk。参见第 15.7.3.2 节,“CHECK TABLE 语句”。

myisamchk 支持以下选项,这些选项可以在命令行或选项文件中的 [myisamchk] 组中指定。有关 MySQL 程序使用的选项文件的信息,请参见第 6.2.2.2 节,“使用选项文件”。

表 6.17 myisamchk 选项

选项名称

描述

--analyze

分析键值的分布

--backup

将 .MYD 文件备份为 file_name-time.BAK

--block-search

查找给定偏移量处的块所属的记录

--character-sets-dir

字符集所在的目录

--check

检查表中是否存在错误

--check-only-changed

仅检查自上次检查后已更改的表

--correct-checksum

更正表的校验和信息

--data-file-length

数据文件的最大长度(在重新创建数据文件时,如果数据文件已满)

--debug

写入调试日志

--decode_bits

Decode_bits

--defaults-extra-file

除了通常的选项文件之外,还读取指定的选项文件

--defaults-file

仅读取指定的选项文件

--defaults-group-suffix

选项组后缀值

--description

打印有关表的某些描述性信息

--extend-check

执行非常彻底的表检查或修复,尝试从数据文件中恢复所有可能的行

--fast

仅检查未正确关闭的表

--force

如果 myisamchk 在表中发现任何错误,则自动执行修复操作

--force

覆盖旧的临时文件。用于 -r 或 -o 选项

--ft_max_word_len

FULLTEXT 索引的最大词长

--ft_min_word_len

FULLTEXT 索引的最小词长

--ft_stopword_file

使用来自此文件中的停用词,而不是使用内置列表

--HELP

显示帮助消息并退出

--help

显示帮助消息并退出

--information

打印有关正在检查的表的统计信息

--key_buffer_size

用于 MyISAM 表的索引块缓冲区的尺寸

--keys-used

一个位值,指示要更新的索引

--max-record-length

如果 myisamchk 无法分配内存来保存它们,则跳过大于给定长度的行

--medium-check

执行比 --extend-check 操作更快的检查

--myisam_block_size

用于 MyISAM 索引页面的块大小

--myisam_sort_buffer_size

在执行 REPAIR 或使用 CREATE INDEX 或 ALTER TABLE 创建索引时,分配用于对索引进行排序的缓冲区

--no-defaults

不读取任何选项文件

--parallel-recover

使用与 -r 和 -n 相同的技术,但并行创建所有键,使用不同的线程(beta 版)

--print-defaults

打印默认选项

--quick

通过不修改数据文件来实现更快的修复

--read_buffer_size

每个执行顺序扫描的线程都会为其扫描的每个表分配一个此大小的缓冲区

--read-only

不要将表标记为已检查

--recover

执行修复,可以修复几乎所有问题,除了不唯一的唯一键

--safe-recover

使用旧的恢复方法执行修复,该方法按顺序读取所有行并根据找到的行更新所有索引树

--set-auto-increment

强制新记录的 AUTO_INCREMENT 编号从给定值开始

--set-collation

指定用于对表索引进行排序的排序规则

--silent

静默模式

--sort_buffer_size

在执行 REPAIR 或使用 CREATE INDEX 或 ALTER TABLE 创建索引时,分配用于对索引进行排序的缓冲区

--sort-index

按从高到低的顺序对索引树块进行排序

--sort_key_blocks

sort_key_blocks

--sort-records

根据特定索引对记录进行排序

--sort-recover

强制 myisamchk 使用排序来解析键,即使临时文件会非常大

--stats_method

指定 MyISAM 索引统计信息收集代码应如何处理 NULL 值

--tmpdir

用于存储临时文件的目录

--unpack

解压缩用 myisampack 打包的表

--update-state

将信息存储在 .MYI 文件中,以指示何时检查表以及表是否已崩溃

--verbose

详细模式

--version

显示版本信息并退出

--wait

等待锁定表解锁,而不是终止

--write_buffer_size

写缓冲区大小

上一篇
下一篇
相关文章