mysqlcheck 和 myisamchk 的选项
控制执行维护类型的选项:
mysqlcheck 和 myisamchk 都采用许多选项来控制执行的表维护操作的类型。
幻灯片中的表格总结了一些更常用的选项,两个程序都能理解其中的大部分选项。
如果不是这种情况,则会在相关选项说明中注明。
- -analyze :分析表中键值的分布。这可以通过加快基于索引的查找来提高查询的性能。
- -auto-repair :如果检查操作发现问题,则自动修复表。
- -check 或者 -c :检查表是否有问题。如果未指定其他操作,则这是默认操作。
- -check-only-changed 或者 -C :跳过表检查,除了自上次检查以来已更改的表或者未正确关闭的表。如果在表打开时服务器崩溃,则可能会发生后一种情况。
- -fast 或者 -F :跳过表检查,但未正确关闭的表除外。
- -extended、-extend-check 或者 -e:运行扩展表检查。对于 mysqlcheck,当此选项与修复方法一起给出时,比单独给出修复选项时执行更彻底的修复。也就是说,-repair -extended 执行的修复操作比-repair 执行的操作更彻底。
- -medium-check 或者 -m :运行中等表检查。
- -quick 或者 -q :对于 mysqlcheck,不带修复选项的 -quick 仅会检查索引文件,而保留数据文件。对于这两个程序,-quick 与修复选项结合使用会使程序仅修复索引文件,而保留数据文件。
- -repair、-recover 或者 -r:运行表修复操作。
myisamchk 实用程序
从概念上讲,myisamchk 的用途类似于 mysqlcheck。
但是,myisamchk 不与 MySQL 服务器通信。
相反,它直接访问表文件。
它是一个检查 MyISAM 表的非客户端实用程序。
它与 mysqlcheck 类似,但有以下一些区别:
- 它可以启用或者禁用索引。
- 它直接访问表文件而不是通过服务器。
- 这避免了并发表访问。
执行表维护,同时避免使用 myisamchk 进行并发表访问:
确保服务器在处理表时不访问表。
保证这一点的一种方法是锁定表或者停止服务器。在命令提示符下,将位置更改为表所在的数据库目录。
这是服务器数据目录的子目录,与包含要检查的表的数据库同名。
(更改位置的原因是为了更容易引用表文件。
这一步可以跳过,但myisamchk必须包含表所在的目录。
)使用指示要执行的操作的选项调用 myisamchk,后跟命名 myisamchk 应操作的表的参数。
这些参数中的每一个都可以是表名或者表的索引文件的名称。
索引文件名与表名相同,加上一个 .MYI 后缀。
因此,表可以称为 table_name 或者 table_name.MYI。重启服务器。
一些 myisamchk 选项:
- -recover :修复表。
- -safe-recover :修复 -recover 无法修复的表。
myisamchk 示例:
shell> myisamchk /var/lib/mysql/mysql/help_topic shell> myisamchk help_category.MYI shell> myisamchk --recover help_keyword
mysqlcheck 客户端程序
在某些情况下,mysqlcheck 比直接发出 SQL 语句更方便。
例如,如果你提供一个数据库名称作为它的参数,mysqlcheck 确定数据库包含哪些表并发出语句来处理它们。
我们不需要提供显式表名作为参数。
此外,由于 mysqlcheck 是一个命令行程序,我们可以轻松地在执行计划维护的操作系统作业中使用它。
mysqlcheck 是一个命令行客户端,用于检查、修复、分析和优化表。
它适用于 InnoDB、MyISAM 和 ARCHIVE 表。
它执行三个级别的检查:
- 特定表
- 特定于数据库
- 所有数据库
一些 mysqlcheck 维护选项:
- -analyze :执行分析表。
- -check :执行检查表(默认)。
- -optimize :执行优化表。
- -repair :执行修复表。
默认情况下,mysqlcheck 将其第一个非选项参数解释为数据库名称并检查该数据库中的所有表。
如果任何其他参数跟在数据库名称之后,它会将它们视为表名并仅检查这些表。
Oracle 建议我们运行 mysqlcheck 而不使用
选项,然后在需要维修时再次运行。
一些 mysqlcheck 修改选项:
- -repair -quick :尝试快速修复。
- -repair :正常修复(如果快速修复失败)。
- -repair -force :强制修复。
mysqlcheck 示例:
shell> mysqlcheck --login-path=admin world_innodb shell> mysqlcheck -uroot -p mysql user --repair shell> mysqlcheck -uroot -p --all-databases shell> mysqlcheck --login-path=admin --analyze --all-databases
上面显示的 mysqlcheck 示例演示了以下内容:
- 第一个命令(带选项)仅检查 world_innodb 数据库中的 City 和 Country 表。
- 在带有 -databases(或者 -B)选项的示例中,mysqlcheck 将其参数解释为数据库名称并检查 world_innodb 和 test 数据库中的表。
- 使用 -all-databases(或者 -A)选项,mysqlcheck 检查所有数据库中的所有表。