mysqlcheck —表维护程序

mysqlcheck客户端执行表维护:它检查,修理,优化,或分析表。

尽管对于检查操作,该表仅使用锁定进行READ锁定,每个表均被锁定,因此在处理过程中无法用于其他会话。表维护操作可能很耗时,特别是对于大型表。如果使用--databases或 --all-database选项来处理一个或多个数据库中的所有表,则调用 mysqlcheck可能需要很长时间。(如果MySQL升级过程确定需要检查表,也需要很长时间)

在mysqld服务器运行时必须使用mysqlcheck,这意味着您不必停止服务器即可执行表维护。

在用户的便捷方式下mysqlcheckCHECK TABLE, REPAIR TABLE, ANALYZE TABLE及 OPTIMIZE TABLE的SQL语句。它确定要用于该操作的语句,然后将这些语句发送到要执行的服务器。

所有存储引擎不一定支持所有四个维护操作。在这种情况下,将显示错误消息。例如,如果test.t是一个MEMORY表,则对其进行检查会产生以下结果:

shell> mysqlcheck test t
test.t
note     : The storage engine for the table doesn't support check

如果mysqlcheck无法修复表,请参见第2.11.13节“重建或修复表或索引”以获取手动表修复策略。例如,对于InnoDB表,情况就是如此, 可以使用检查 CHECK TABLE但不能使用REPAIR TABLE对其进行修复。

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

有三种通用的方法可以调用 mysqlcheck:

shell> mysqlcheck [options] db_name [tbl_name ...]
shell> mysqlcheck [options] --databases db_name ...
shell> mysqlcheck [options] --all-databases

如果未在db_name后命名任何表,或者你使用--databases或 --all-databases选项,则将检查整个数据库。

与其他客户端程序相比, mysqlcheck具有特殊功能。--check可通过重命名二进制文件来更改检查表(--check) 的默认行为。如果您想拥有一个默认情况下可修复表的工具,则只需复制一个名为 mysqlrepair的 mysqlcheck,或建立一个指向名为 mysqlrepair的mysqlcheck的符号链接 。如果调用 mysqlrepair,它将修复表。

下表中显示的名称可用于更改 mysqlcheck的默认行为。

命令 含义
mysqlrepair 默认选项是 --repair
mysqlanalyze 默认选项是 --analyze
mysqloptimize 默认选项是 --optimize

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

部分实用选项如下
--help, -?
显示帮助消息并退出。

--all-in-1, -1
不必为每个表发出一个语句,而是对每个数据库执行一个语句,该语句命名该数据库中要处理的所有表。

--analyze, -a
分析表。

--auto-repair
如果检查表已损坏,请自动对其进行修复。在检查完所有表之后,将进行任何必要的维修。

--check-only-changed, -C
仅检查自上次检查以来已更改的表或未正确关闭的表。

--extended, -e
如果使用此选项检查表,则可以确保它们是100%一致的,但是要花费很长时间。
如果使用此选项修复表,它将运行扩展的修复,这不仅可能花费很长时间来执行,而且还会产生很多垃圾行!

--enable-cleartext-plugin
启用mysql_clear_password明文身份验证插件。

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

--force, -f
即使发生SQL错误,也要继续。

--host=host_name, -h host_name
连接到给定主机上的MySQL服务器。

--medium-check, -m
进行比--extended操作更快的检查 。这样只会发现所有错误的99.99%,在大多数情况下应该足够了。

--optimize, -o
优化表。

--protocol={TCP|SOCKET|PIPE|MEMORY}
用于连接到服务器的连接协议。当其他连接参数通常导致使用所需协议以外的协议时,此功能很有用。有关允许值的详细信息,请参见 第4.2.4节“使用命令选项连接到MySQL服务器”。

--repair, -r
进行修复可以修复几乎所有东西,除了不是唯一的唯一键。

--skip-database=db_name
mysqlcheck 执行的操作中不要包括命名数据库(区分大小写)。

--socket=path, -S path
对于与的连接localhost,要使用的Unix套接字文件,或者在Windows上,要使用的命名管道的名称。
在Windows上,仅当在named_pipe 启用了支持命名管道连接的系统变量的情况下启动服务器时,此选项才适用。另外,建立连接的用户必须是named_pipe_full_access_group 系统变量指定的Windows组的成员 。

--ssl*
以开头的选项--ssl指定是否使用SSL连接到服务器,并指示在何处查找SSL密钥和证书。请参阅 加密连接的命令选项。

--ssl-fips-mode={OFF|ON|STRICT}
控制是否在客户端上启用FIPS模式。该--ssl-fips-mode选项与其他 --ssl-xxx选项的不同之处在于,该选项不用于建立加密连接,而是影响允许的加密操作。

这些--ssl-fips-mode 值是允许的:
OFF:禁用FIPS模式。
ON:启用FIPS模式。
STRICT:启用“ 严格 ” FIPS模式。
注意
如果OpenSSL的FIPS对象模块不可用时,对于唯一的允许值 --ssl-fips-mode是 OFF。在这种情况下,设置--ssl-fips-mode为 ON或STRICT导致客户端在启动时发出警告并以非FIPS模式运行。

--tables
覆盖--databases 或-B选项。选项后的所有名称参数均视为表名称。

--use-frm
对于MyISAM表的修复操作,请从数据字典中获取表结构,以便即使表.MYI 头损坏也可以修复表。

--user=user_name, -u user_name
用于连接到服务器的MySQL帐户的用户名。

--write-binlog
此选项是默认启用的,这样 ANALYZE TABLE, OPTIMIZE TABLE和 REPAIR TABLE所产生的报表mysqlcheck的被写入二进制日志。使用 --skip-write-binlog 到的原因NO_WRITE_TO_BINLOG被添加到让他们没有记录的语句。--skip-write-binlog 当使用这些二进制日志从备份中恢复时,请在 不应该将这些语句发送到复制从站或运行时使用。

--zstd-compression-level=level
用于与使用zstd压缩算法的服务器的连接的压缩级别。允许的级别为1到22,更大的值表示压缩级别增加。默认 zstd压缩级别为3。压缩级别设置对不使用zstd压缩的连接无效。