mysqlcheck客户端执行表维护:它检查、修复、优化或分析表。
每个表都被锁定,因此在处理时对其他会话不可用,尽管对于检查操作,表仅被READ
锁锁定(请参阅
第 13.3.5 节,“LOCK TABLES 和 UNLOCK TABLES 语句”,了解更多信息
READ
和WRITE
锁)。表维护操作可能很耗时,尤其是对于大型表。如果您使用
--databases
or
--all-databases
选项来处理一个或多个数据库中的所有表,则调用
mysqlcheck可能需要很长时间。(对于 MySQL 升级过程也是如此,如果它确定需要进行表检查,因为它以相同的方式处理表。)
mysqlcheck在功能上与 myisamchk相似,但工作方式不同。主要的操作区别是当mysqld服务器运行 时必须使用mysqlcheck ,而当它不运行时应该使用myisamchk 。使用 mysqlcheck的好处是您不必停止服务器来执行表维护。
mysqlcheck以方便用户的方式使用 SQL 语句
CHECK TABLE
,
REPAIR TABLE
,
ANALYZE TABLE
, 和
OPTIMIZE TABLE
它确定要执行的操作要使用哪些语句,然后将语句发送到要执行的服务器。有关每个语句使用哪些存储引擎的详细信息,请参阅
第 13.7.2 节,“表维护语句”。
MyISAM
存储引擎支持所有四种维护操作,因此mysqlcheck可用于对表执行其中任何一种
操作MyISAM
。其他存储引擎不一定支持所有操作。在这种情况下,会显示一条错误消息。例如,如果
test.t
是一个MEMORY
表,尝试检查它会产生以下结果:
$> mysqlcheck test t
test.t
note : The storage engine for the table doesn't support check
如果mysqlcheck无法修复表,请参阅第 2.11.10 节,“重建或修复表或索引”以了解手动表修复策略。例如,对于
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.12 mysqlcheck 选项
选项名称 | 描述 | 介绍 |
---|---|---|
--所有数据库 | 检查所有数据库中的所有表 | |
--多合一 | 为每个数据库执行一条语句,命名该数据库中的所有表 | |
- 分析 | 分析表 | |
- 自动修理 | 如果已检查的表已损坏,则自动修复它 | |
--绑定地址 | 使用指定的网络接口连接到 MySQL 服务器 | |
--字符集目录 | 安装字符集的目录 | |
- 查看 | 检查表格是否有错误 | |
--check-only-changed | 仅检查自上次检查以来更改过的表 | |
--检查升级 | 使用 FOR UPGRADE 选项调用 CHECK TABLE | |
- 压缩 | 压缩客户端和服务器之间发送的所有信息 | |
--数据库 | 将所有参数解释为数据库名称 | |
--调试 | 写调试日志 | |
--调试检查 | 程序退出时打印调试信息 | |
- 调试信息 | 程序退出时打印调试信息、内存和 CPU 统计信息 | |
--default-auth | 要使用的身份验证插件 | |
--默认字符集 | 指定默认字符集 | |
--defaults-extra-file | 除了通常的选项文件外,还读取命名的选项文件 | |
--defaults-文件 | 只读命名选项文件 | |
--defaults-group-suffix | 选项组后缀值 | |
--启用明文插件 | 启用明文身份验证插件 | 5.6.28 |
--扩展 | 检查和修理桌子 | |
- 快速地 | 只检查没有正确关闭的表 | |
--修复数据库名称 | 将数据库名称转换为 5.1 格式 | |
--修复表名 | 将表名转换为 5.1 格式 | |
- 力量 | 即使出现 SQL 错误也继续 | |
- 帮助 | 显示帮助信息并退出 | |
- 主持人 | MySQL 服务器所在的主机 | |
--登录路径 | 从 .mylogin.cnf 读取登录路径选项 | |
--medium-check | 执行比 --extended 操作更快的检查 | |
--no-defaults | 不读取选项文件 | |
--优化 | 优化表 | |
- 密码 | 连接到服务器时使用的密码 | |
- 管道 | 使用命名管道连接到服务器(仅限 Windows) | |
--插件目录 | 安装插件的目录 | |
- 港口 | 用于连接的 TCP/IP 端口号 | |
--print-defaults | 打印默认选项 | |
- 协议 | 使用的传输协议 | |
- 快的 | 最快的检查方法 | |
- 修理 | 执行修复几乎可以修复任何东西,除了不唯一的唯一键 | |
--secure-auth | 不要以旧的(pre-4.1)格式向服务器发送密码 | 5.6.17 |
--shared-memory-base-name | 共享内存连接的共享内存名称(仅限 Windows) | |
- 沉默的 | 静音模式 | |
--跳过数据库 | 从执行的操作中省略此数据库 | 5.6.11 |
- 插座 | 要使用的 Unix 套接字文件或 Windows 命名管道 | |
--ssl | 启用连接加密 | |
--ssl-ca | 包含可信 SSL 证书颁发机构列表的文件 | |
--ssl-capath | 包含受信任的 SSL 证书颁发机构证书文件的目录 | |
--ssl证书 | 包含 X.509 证书的文件 | |
--ssl密码 | 连接加密的允许密码 | |
--ssl-crl | 包含证书吊销列表的文件 | |
--ssl-crlpath | 包含证书吊销列表文件的目录 | |
--ssl-密钥 | 包含 X.509 密钥的文件 | |
--ssl模式 | 连接到服务器的所需安全状态 | 5.6.30 |
--ssl-verify-server-cert | 根据服务器证书公用名身份验证主机名 | |
--表格 | 覆盖 --databases 或 -B 选项 | |
--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.11 节,“可插入身份验证”。
启用
mysql_clear_password
明文身份验证插件。(请参阅 第 6.4.1.5 节,“客户端明文可插入身份验证”。)这个选项是在 MySQL 5.6.28 中添加的。
--fast
,-F
仅检查未正确关闭的表。
将数据库名称转换为 5.1 格式。只有包含特殊字符的数据库名称会受到影响。
将表名转换为 5.1 格式。只有包含特殊字符的表名会受到影响。此选项也适用于视图。
--force
,-f
即使出现 SQL 错误也继续。
--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.11 节,“可插入身份验证”。--port=
,port_num
-P
port_num
对于 TCP/IP 连接,要使用的端口号。
打印程序名称和它从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的其他信息,请参阅第 4.2.2.3 节,“影响选项文件处理的命令行选项”。
--protocol={TCP|SOCKET|PIPE|MEMORY}
用于连接到服务器的传输协议。当其他连接参数通常导致使用您想要的协议以外的协议时,它很有用。有关允许值的详细信息,请参阅 第 4.2.5 节“连接传输协议”。
--quick
,-q
如果您使用此选项检查表,它会阻止检查扫描行以检查不正确的链接。这是最快的检查方法。
如果您使用此选项修复表,它会尝试仅修复索引树。这是最快的修复方法。
--repair
,-r
Perform a repair that can fix almost anything except unique keys that are not unique.
Do not send passwords to the server in old (pre-4.1) format. This prevents connections except for servers that use the newer password format. This option is enabled by default; use
--skip-secure-auth
to disable it. This option was added in MySQL 5.6.17.NotePasswords that use the pre-4.1 hashing method are less secure than passwords that use the native password hashing method and should be avoided. Pre-4.1 passwords are deprecated; expect support for them to be removed in a future MySQL release. For account upgrade instructions, see Section 6.4.1.3, “Migrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin”.
NoteThis option is deprecated; expect support for it to be removed in a future release. As of MySQL 5.7.5, it is always enabled and attempting to disable it produces an error.
--shared-memory-base-name=
name
On Windows, the shared-memory name to use for connections made using shared memory to a local server. The default value is
MYSQL
. The shared-memory name is case-sensitive.This option applies only if the server was started with the
shared_memory
system variable enabled to support shared-memory connections.--silent
,-s
Silent mode. Print only error messages.
Do not include the named database (case-sensitive) in the operations performed by mysqlcheck. This option was added in MySQL 5.6.11.
--socket=
,path
-S
path
For connections to
localhost
, the Unix socket file to use, or, on Windows, the name of the named pipe to use.On Windows, this option applies only if the server was started with the
named_pipe
system variable enabled to support named-pipe connections. In addition, the user making the connection must be a member of the Windows group specified by thenamed_pipe_full_access_group
system variable.Options that begin with
--ssl
specify whether to connect to the server using encryption and indicate where to find SSL keys and certificates. See Command Options for Encrypted Connections.Override the
--databases
or-B
option. All name arguments following the option are regarded as table names.For repair operations on
MyISAM
tables, get the table structure from the.frm
file so that the table can be repaired even if the.MYI
header is corrupted.--user=
,user_name
-u
user_name
The user name of the MySQL account to use for connecting to the server.
--verbose
,-v
Verbose mode. Print information about the various stages of program operation.
--version
,-V
Display version information and exit.
默认情况下启用此选项,以便将 mysqlcheck生成的 、 和 statements
ANALYZE TABLE
写入OPTIMIZE TABLE
二进制 日志。用于 导致添加到语句中,以便不记录它们。当使用 二进制日志从备份中恢复时,这些语句不应发送到副本或运行时使用。REPAIR TABLE
--skip-write-binlog
NO_WRITE_TO_BINLOG
--skip-write-binlog