mysqlcheck客户端执行表维护:它检查、修复、优化或分析表。
每个表都被锁定,因此在处理时对其他会话不可用,尽管对于检查操作,表仅被READ
锁锁定(请参阅
第 13.3.5 节,“LOCK TABLES 和 UNLOCK TABLES 语句”,了解更多信息
READ
和WRITE
锁)。表维护操作可能很耗时,尤其是对于大型表。如果您使用
--databases
or
--all-databases
选项来处理一个或多个数据库中的所有表,则调用
mysqlcheck可能需要很长时间。(对于 MySQL 升级过程也是如此,如果它确定需要进行表检查,因为它以相同的方式处理表。)
mysqld服务器运行时必须使用 mysqlcheck,这意味着您不必停止服务器来执行表维护。
mysqlcheck以方便用户的方式使用 SQL 语句
CHECK TABLE
,
REPAIR TABLE
,
ANALYZE TABLE
, 和
OPTIMIZE TABLE
它确定要执行的操作要使用哪些语句,然后将语句发送到要执行的服务器。有关每个语句使用哪些存储引擎的详细信息,请参阅
第 13.7.2 节,“表维护语句”。
所有的存储引擎都不一定支持所有四种维护操作。在这种情况下,会显示一条错误消息。例如,如果test.t
是一个
MEMORY
表,尝试检查它会产生以下结果:
$> mysqlcheck test t
test.t
note : The storage engine for the table doesn't support check
如果mysqlcheck无法修复表,请参阅第 2.11.12 节,“重建或修复表或索引”以了解手动表修复策略。例如,对于
InnoDB
可以使用 进行检查
CHECK TABLE
但不能使用 进行修复的表,情况就是如此REPAIR TABLE
。
最好在执行表修复操作之前对表进行备份;在某些情况下,该操作可能会导致数据丢失。可能的原因包括但不限于文件系统错误。
调用mysqlcheck 的一般方法有以下三种 :
mysqlcheck [options] db_name [tbl_name ...]
mysqlcheck [options] --databases db_name ...
mysqlcheck [options] --all-databases
如果您没有在后面命名任何表,
db_name
或者如果您使用
--databases
或
--all-databases
选项,则会检查整个数据库。
与其他客户端程序相比, mysqlcheck有一个特殊的功能。检查表 (--check
) 的默认行为可以通过重命名二进制文件来更改。如果你想要一个默认修复表的工具,你应该只制作一个
名为
mysqlrepair的mysqlcheck的副本,或者创建一个名为
mysqlrepair的mysqlcheck的符号链接
。如果您调用
mysqlrepair,它会修复表。
下表中显示的名称可用于更改 mysqlcheck默认行为。
命令 | 意义 |
---|---|
mysql修复 | 默认选项是--repair |
mysql分析 | 默认选项是--analyze |
mysql优化 | 默认选项是--optimize |
mysqlcheck支持以下选项,可以在命令行或
选项文件的组中指定[mysqlcheck]
。[client]
有关 MySQL 程序使用的选项文件的信息,请参阅第 4.2.2.2 节,“使用选项文件”。
表 4.14 mysqlcheck 选项
选项名称 | 描述 | 介绍 | 弃用 |
---|---|---|---|
--所有数据库 | 检查所有数据库中的所有表 | ||
--多合一 | 为每个数据库执行一条语句,命名该数据库中的所有表 | ||
- 分析 | 分析表 | ||
- 自动修理 | 如果已检查的表已损坏,则自动修复它 | ||
--绑定地址 | 使用指定的网络接口连接到 MySQL 服务器 | ||
--字符集目录 | 安装字符集的目录 | ||
- 查看 | 检查表格是否有错误 | ||
--check-only-changed | 仅检查自上次检查以来更改过的表 | ||
--检查升级 | 使用 FOR UPGRADE 选项调用 CHECK TABLE | ||
- 压缩 | 压缩客户端和服务器之间发送的所有信息 | ||
--数据库 | 将所有参数解释为数据库名称 | ||
--调试 | 写调试日志 | ||
--调试检查 | 程序退出时打印调试信息 | ||
- 调试信息 | 程序退出时打印调试信息、内存和 CPU 统计信息 | ||
--default-auth | 要使用的身份验证插件 | ||
--默认字符集 | 指定默认字符集 | ||
--defaults-extra-file | 除了通常的选项文件外,还读取命名的选项文件 | ||
--defaults-文件 | 只读命名选项文件 | ||
--defaults-group-suffix | 选项组后缀值 | ||
--启用明文插件 | 启用明文身份验证插件 | 5.7.10 | |
--扩展 | 检查和修理桌子 | ||
- 快速地 | 只检查没有正确关闭的表 | ||
--修复数据库名称 | 将数据库名称转换为 5.1 格式 | 是的 | |
--修复表名 | 将表名转换为 5.1 格式 | 是的 | |
- 力量 | 即使出现 SQL 错误也继续 | ||
--get-server-public-key | 从服务器请求 RSA 公钥 | 5.7.23 | |
- 帮助 | 显示帮助信息并退出 | ||
- 主持人 | MySQL 服务器所在的主机 | ||
--登录路径 | 从 .mylogin.cnf 读取登录路径选项 | ||
--medium-check | 执行比 --extended 操作更快的检查 | ||
--no-defaults | 不读取选项文件 | ||
--优化 | 优化表 | ||
- 密码 | 连接到服务器时使用的密码 | ||
- 管道 | 使用命名管道连接到服务器(仅限 Windows) | ||
--插件目录 | 安装插件的目录 | ||
- 港口 | 用于连接的 TCP/IP 端口号 | ||
--print-defaults | 打印默认选项 | ||
- 协议 | 使用的传输协议 | ||
- 快的 | 最快的检查方法 | ||
- 修理 | 执行修复几乎可以修复任何东西,除了不唯一的唯一键 | ||
--secure-auth | 不要以旧的(pre-4.1)格式向服务器发送密码 | 是的 | |
--server-public-key-path | 包含 RSA 公钥的文件的路径名 | 5.7.23 | |
--shared-memory-base-name | 共享内存连接的共享内存名称(仅限 Windows) | ||
- 沉默的 | 静音模式 | ||
--跳过数据库 | 从执行的操作中省略此数据库 | ||
- 插座 | 要使用的 Unix 套接字文件或 Windows 命名管道 | ||
--ssl | 启用连接加密 | ||
--ssl-ca | 包含可信 SSL 证书颁发机构列表的文件 | ||
--ssl-capath | 包含受信任的 SSL 证书颁发机构证书文件的目录 | ||
--ssl证书 | 包含 X.509 证书的文件 | ||
--ssl密码 | 连接加密的允许密码 | ||
--ssl-crl | 包含证书吊销列表的文件 | ||
--ssl-crlpath | 包含证书吊销列表文件的目录 | ||
--ssl-密钥 | 包含 X.509 密钥的文件 | ||
--ssl模式 | 连接到服务器的所需安全状态 | 5.7.11 | |
--ssl-verify-server-cert | 根据服务器证书公用名身份验证主机名 | ||
--表格 | 覆盖 --databases 或 -B 选项 | ||
--tls-版本 | 加密连接允许的 TLS 协议 | 5.7.10 | |
--use-frm | 用于 MyISAM 表的修复操作 | ||
- 用户 | 连接到服务器时使用的 MySQL 用户名 | ||
--冗长 | 详细模式 | ||
- 版本 | 显示版本信息并退出 | ||
--write-binlog | 将 ANALYZE、OPTIMIZE、REPAIR 语句记录到二进制日志中。--skip-write-binlog 将 NO_WRITE_TO_BINLOG 添加到这些语句中 |
--help
,-?
显示帮助信息并退出。
--all-databases
,-A
检查所有数据库中的所有表。这与
--databases
在命令行中使用选项和命名所有数据库相同,只是不检查INFORMATION_SCHEMA
和 数据库。performance_schema
可以通过使用选项明确命名它们来检查它们--databases
。--all-in-1
,-1
不是为每个表发出一条语句,而是为每个数据库执行一条语句,命名该数据库中要处理的所有表。
--analyze
,-a
分析表格。
如果已检查的表已损坏,则自动修复它。检查完所有表格后,将进行任何必要的维修。
在具有多个网络接口的计算机上,使用此选项来选择用于连接到 MySQL 服务器的接口。
安装字符集的目录。请参阅 第 10.15 节,“字符集配置”。
--check
,-c
检查表格是否有错误。这是默认操作。
仅检查自上次检查后发生更改或未正确关闭的表。
--check-upgrade
,-g
调用选项
CHECK TABLE
以FOR UPGRADE
检查表是否与服务器的当前版本不兼容。该选项自动启用--fix-db-names
和--fix-table-names
选项。如果可能,压缩客户端和服务器之间发送的所有信息。请参阅 第 4.2.6 节,“连接压缩控制”。
--databases
,-B
处理指定数据库中的所有表。通常, mysqlcheck将命令行上的第一个名称参数视为数据库名称,并将任何后续名称视为表名。使用此选项,它将所有名称参数视为数据库名称。
--debug[=
,debug_options
]-# [
debug_options
]写调试日志。典型的
debug_options
字符串是 . 默认值为。d:t:o,
file_name
d:t:o
仅当 MySQL 是使用
WITH_DEBUG
. Oracle 提供的 MySQL 发布二进制文件不是 使用此选项构建的。程序退出时打印一些调试信息。
仅当 MySQL 是使用
WITH_DEBUG
. Oracle 提供的 MySQL 发布二进制文件不是 使用此选项构建的。程序退出时打印调试信息以及内存和 CPU 使用统计信息。
仅当 MySQL 是使用
WITH_DEBUG
. Oracle 提供的 MySQL 发布二进制文件不是 使用此选项构建的。--default-character-set=
charset_name
用作
charset_name
默认字符集。请参阅第 10.15 节,“字符集配置”。--defaults-extra-file=
file_name
在全局选项文件之后但(在 Unix 上)在用户选项文件之前读取此选项文件。如果该文件不存在或无法访问,则会发生错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
仅使用给定的选项文件。如果该文件不存在或无法访问,则会发生错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录。例外:即使有
--defaults-file
,客户端程序也会读取.mylogin.cnf
.有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
不仅要阅读通常的选项组,还要阅读具有通常名称和后缀
str
. 例如, mysqlcheck通常读取[client]
和[mysqlcheck]
组。如果此选项作为 给出--defaults-group-suffix=_other
, 则 mysqlcheck还会读取[client_other]
和[mysqlcheck_other]
组。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
--extended
,-e
如果您使用此选项来检查表,它可以确保它们 100% 一致但需要很长时间。
如果您使用此选项修复表,它会运行扩展修复,这不仅可能需要很长时间才能执行,而且还可能产生大量垃圾行!
关于使用哪个客户端身份验证插件的提示。请参阅第 6.2.13 节,“可插入身份验证”。
启用
mysql_clear_password
明文身份验证插件。(请参阅 第 6.4.1.6 节,“客户端明文可插入身份验证”。)这个选项是在 MySQL 5.7.10 中添加的。
--fast
,-F
仅检查未正确关闭的表。
将数据库名称转换为 5.1 格式。只有包含特殊字符的数据库名称会受到影响。
这个选项在 MySQL 5.7.6 中被弃用;希望在未来的 MySQL 版本中将其删除。如果需要转换 MySQL 5.0 数据库或表名,解决方法是先将 MySQL 5.0 安装升级到 MySQL 5.1,然后再升级到更新的版本。
将表名转换为 5.1 格式。只有包含特殊字符的表名会受到影响。此选项也适用于视图。
这个选项在 MySQL 5.7.6 中被弃用;希望在未来的 MySQL 版本中将其删除。如果需要转换 MySQL 5.0 数据库或表名,解决方法是先将 MySQL 5.0 安装升级到 MySQL 5.1,然后再升级到更新的版本。
--force
,-f
即使出现 SQL 错误也继续。
从服务器请求基于 RSA 密钥对的密码交换所需的公钥。此选项适用于使用
caching_sha2_password
身份验证插件进行身份验证的客户端。对于该插件,除非请求,否则服务器不会发送公钥。对于未使用该插件进行身份验证的帐户,将忽略此选项。如果不使用基于 RSA 的密码交换,它也会被忽略,就像客户端使用安全连接连接到服务器时的情况一样。如果 给出并指定一个有效的公钥文件,它优先于 .
--server-public-key-path=
file_name
--get-server-public-key
有关
caching_sha2_password
插件的信息,请参阅 第 6.4.1.4 节,“缓存 SHA-2 可插入身份验证”。该
--get-server-public-key
选项是在 MySQL 5.7.23 中添加的。--host=
,host_name
-h
host_name
连接到给定主机上的 MySQL 服务器。
从登录路径文件中指定的登录路径读取选项
.mylogin.cnf
。“ 登录路径”是一个选项组,其中包含指定要连接到哪个 MySQL 服务器以及要以哪个帐户进行身份验证的选项。要创建或修改登录路径文件,请使用 mysql_config_editor实用程序。请参阅 第 4.6.6 节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
--medium-check
,-m
进行比
--extended
操作更快的检查。这只能找到所有错误的 99.99%,这在大多数情况下应该足够好了。不要读取任何选项文件。如果程序启动因从选项文件中读取未知选项而失败,
--no-defaults
可用于防止它们被读取。例外情况是
.mylogin.cnf
文件在所有情况下都会被读取(如果存在)。这允许以比在命令行上更安全的方式指定密码,即使在--no-defaults
使用 时也是如此。要创建.mylogin.cnf
,请使用 mysql_config_editor实用程序。请参阅 第 4.6.6 节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
--optimize
,-o
优化表格。
--password[=
,password
]-p[
password
]用于连接到服务器的 MySQL 帐户的密码。密码值是可选的。如果没有给出, mysqlcheck会提示输入一个。如果给定,则后面 的密码之间 不能有空格。如果未指定密码选项,则默认为不发送密码。
--password=
-p
在命令行上指定密码应该被认为是不安全的。为避免在命令行中提供密码,请使用选项文件。请参阅 第 6.1.2.1 节,“密码安全的最终用户指南”。
要明确指定没有密码并且 mysqlcheck不应提示输入密码,请使用该
--skip-password
选项。--pipe
,-W
在 Windows 上,使用命名管道连接到服务器。仅当服务器启动时
named_pipe
启用了支持命名管道连接的系统变量时,此选项才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的 Windows 组的成员。在其中查找插件的目录。如果
--default-auth
选项用于指定身份验证插件但 mysqlcheck未找到它,请指定此选项。请参阅 第 6.2.13 节,“可插入身份验证”。--port=
,port_num
-P
port_num
对于 TCP/IP 连接,要使用的端口号。
打印程序名称和它从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
--protocol={TCP|SOCKET|PIPE|MEMORY}
用于连接到服务器的传输协议。当其他连接参数通常导致使用您想要的协议以外的协议时,它很有用。有关允许值的详细信息,请参阅 第 4.2.5 节“连接传输协议”。
--quick
,-q
如果您使用此选项检查表,它会阻止检查扫描行以检查不正确的链接。这是最快的检查方法。
如果您使用此选项修复表,它会尝试仅修复索引树。这是最快的修复方法。
--repair
,-r
执行修复几乎可以修复任何东西,除了不唯一的唯一键。
不要以旧的(pre-4.1)格式向服务器发送密码。这会阻止除使用较新密码格式的服务器之外的连接。
从 MySQL 5.7.5 开始,此选项已弃用;希望在未来的 MySQL 版本中将其删除。它始终处于启用状态,尝试禁用它 (
--skip-secure-auth
,--secure-auth=0
) 会产生错误。在 MySQL 5.7.5 之前,此选项默认启用,但可以禁用。笔记使用 pre-4.1 哈希方法的密码不如使用本机密码哈希方法的密码安全,应避免使用。4.1 之前的密码已弃用,MySQL 5.7.5 中删除了对它们的支持。有关帐户升级说明,请参阅 第 6.4.1.3 节,“从 4.1 版之前的密码哈希和 mysql_old_password 插件迁移”。
--server-public-key-path=
file_name
PEM 格式文件的路径名,其中包含服务器所需的公钥客户端副本,用于基于 RSA 密钥对的密码交换。此选项适用于使用
sha256_password
或caching_sha2_password
身份验证插件进行身份验证的客户端。对于未使用其中一个插件进行身份验证的帐户,将忽略此选项。如果不使用基于 RSA 的密码交换,它也会被忽略,就像客户端使用安全连接连接到服务器时的情况一样。如果 给出并指定一个有效的公钥文件,它优先于 .
--server-public-key-path=
file_name
--get-server-public-key
对于
sha256_password
,此选项仅适用于使用 OpenSSL 构建 MySQL 的情况。有关插件
sha256_password
和caching_sha2_password
插件的信息,请参阅 第 6.4.1.5 节,“SHA-256 可插入身份验证”和 第 6.4.1.4 节,“缓存 SHA-2 可插入身份验证”。该
--server-public-key-path
选项是在 MySQL 5.7.23 中添加的。--shared-memory-base-name=
name
在 Windows 上,用于使用共享内存与本地服务器建立连接的共享内存名称。默认值为
MYSQL
。共享内存名称区分大小写。仅当服务器启动时
shared_memory
启用了支持共享内存连接的系统变量时,此选项才适用。--silent
,-s
静音模式。仅打印错误消息。
不要在mysqlcheck 执行的操作中包括指定的数据库(区分大小写)。
--socket=
,path
-S
path
对于与 的连接
localhost
,要使用的 Unix 套接字文件,或者在 Windows 上,要使用的命名管道的名称。在 Windows 上,仅当服务器启动时
named_pipe
启用了支持命名管道连接的系统变量时,此选项才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的 Windows 组的成员。以 开头的选项
--ssl
指定是否使用加密连接到服务器并指示在哪里可以找到 SSL 密钥和证书。请参阅 加密连接的命令选项。覆盖
--databases
or-B
选项。选项后面的所有名称参数都被视为表名。加密连接允许的 TLS 协议。该值是一个或多个以逗号分隔的协议名称的列表。可以为此选项命名的协议取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参阅 第 6.3.2 节,“加密连接 TLS 协议和密码”。
这个选项是在 MySQL 5.7.10 中添加的。
对于
MyISAM
表的修复操作,从文件中获取表结构,.frm
这样即使表.MYI
头损坏也可以修复表。--user=
,user_name
-u
user_name
用于连接到服务器的 MySQL 帐户的用户名。
--verbose
,-v
详细模式。打印有关程序运行各个阶段的信息。
--version
,-V
显示版本信息并退出。
默认情况下启用此选项,以便将 mysqlcheck生成的 、 和 statements
ANALYZE TABLE
写入OPTIMIZE TABLE
二进制 日志。用于 导致添加到语句中,以便不记录它们。当使用 二进制日志从备份中恢复时,这些语句不应发送到副本或运行时使用。REPAIR TABLE
--skip-write-binlog
NO_WRITE_TO_BINLOG
--skip-write-binlog