6.6.4 myisamchk 常规选项
工具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要执行的操作。您也可以通过invokemyisamchk --help来获取选项列表。
如果不指定任何选项,myisamchk将简单地检查您的表作为默认操作。要获取更多信息或告诉myisamchk执行修复操作,指定以下讨论中描述的选项。
tbl_名
是您想检查或修复的数据库表。如果您在数据库目录以外运行myisamchk,则必须指定数据库目录的路径,因为myisamchk不知道数据库的位置。实际上,myisamchk并不关心您正在处理的文件是否位于数据库目录中。您可以将对应于数据库表的文件复制到其他位置,并在那里执行恢复操作。
如果您想在myisamchk命令行中指定多个表,可以这样做。您也可以通过命名索引文件(带有.MYI
后缀的文件)来指定表。这使得您可以使用模式*.MYI
指定目录中的所有表。例如,如果您在数据库目录中,可以像这样检查该目录中的所有MyISAM
表:
myisamchk *.MYI
如果您不在数据库目录中,可以通过指定目录路径来检查该目录中的所有表:
myisamchk /path/to/database_dir/*.MYI
您甚至可以使用目录路径和通配符来检查所有数据库中的所有表:
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时没有其他程序使用表。最有效的方法是关闭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 Statement”.
myisamchk支持以下选项,可以在命令行或option文件的[myisamchk]
组中指定。关于MySQL程序使用的option文件,请参阅第6.2.2.2节,“Using Option Files”.
表6.17 myisamchk选项
Option Name | Description |
---|---|
--analyze | 分析键值的分布 |
--backup | 将.MYD文件备份到file_name-time.BAK |
--block-search | 查找给定偏移量的块所属记录 |
--character-sets-dir | 字符集可以在该目录中找到 |
--check | 检查表格错误 |
--check-only-changed | 仅检查自上次检查以来已更改的表 |
--correct-checksum | 对表的校验信息进行更正 |
--data-file-length | 数据文件的最大长度(在数据文件满时重新创建数据文件) |
--debug | 生成调试日志 |
--decode_bits | 解码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 | 显示帮助信息并退出 |
显示帮助信息并退出 | |
--information | 打印被检查表格的信息统计数据 |
--key_buffer_size | MyISAM 表索引块使用的缓冲区大小 |
--keys-used | 一个位值,指示要更新的索引 |
--max-record-length | 如果 myisamchk 无法分配内存来保存大于给定长度的行,则跳过这些行 |
--medium-check | 执行比 --extend-check 操作更快的检查 |
--myisam_block_size | MyISAM 索引页使用的块大小 |
--myisam_sort_buffer_size | 当执行REPAIR或创建索引时,分配的缓冲区 |
--no-defaults | 不读取选项文件 |
--parallel-recover | 使用-r和-n技术,但在不同的线程中创建所有键(beta) |
--print-defaults | 打印默认选项 |
--quick | 快速修复,不修改数据文件 |
--read_buffer_size | 每个线程在扫描表时分配的缓冲区大小 |
--read-only | 不标记表为已检查 |
--recover | 执行可以修复大多数问题except唯一键不是唯一的修复操作 |
--safe-recover | 使用老式恢复方法,读取所有行并根据找到行更新索引树 |
--set-auto-increment | 强制AUTO_INCREMENT numbering为新记录的起始值 |
--set-collation | 指定用于排序表索引的排序规则 |
--silent | 静默模式 |
--sort_buffer_size | 在执行REPAIR或创建索引时,分配的排序缓冲区大小 |
--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 | 写缓冲区大小 |