MySQL8 中文参考(十三)
6.5.8 mysqlslap — A Load Emulation Client
mysqlslap是一个诊断程序,旨在模拟 MySQL 服务器的客户端负载,并报告每个阶段的时间。它的工作方式就像多个客户端正在访问服务器。
像这样调用mysqlslap:
mysqlslap [*options*]
一些选项,如--create或--query使您能够指定包含 SQL 语句的字符串或包含语句的文件。如果指定文件,默认情况下每行必须包含一个语句。(也就是说,隐式语句分隔符是换行符。)使用--delimiter选项指定不同的分隔符,这使您能够指定跨越多行的语句或将多个语句放在一行上。您不能在文件中包含注释;mysqlslap无法理解它们。
mysqlslap分为三个阶段:
-
创建模式、表,以及可选的任何存储程序或用于测试的数据。此阶段使用单个客户端连接。
-
运行负载测试。此阶段可以使用多个客户端连接。
-
清理(断开连接,如果指定了则删除表)。此阶段使用单个客户端连接。
示例:
提供您自己的创建和查询 SQL 语句,使用 50 个客户端查询,每个客户端进行 200 次选择(在一行上输入命令):
mysqlslap --delimiter=";"
--create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)"
--query="SELECT * FROM a" --concurrency=50 --iterations=200
让mysqlslap构建具有两个INT - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT")列和三个VARCHAR列的表的查询 SQL 语句。使用五个客户端,每个客户端查询 20 次。不要创建表或插入数据(即使用先前测试的模式和数据):
mysqlslap --concurrency=5 --iterations=20
--number-int-cols=2 --number-char-cols=3
--auto-generate-sql
告诉程序从指定文件加载创建、插入和查询 SQL 语句,其中create.sql文件包含多个以';'分隔的表创建语句和多个以';'分隔的插入语句。--query文件应包含多个以';'分隔的查询。运行所有加载语句,然后使用五个客户端(每个客户端运行五次)运行查询文件中的所有查询:
mysqlslap --concurrency=5
--iterations=5 --query=query.sql --create=create.sql
--delimiter=";"
mysqlslap 支持以下选项,可以在命令行或选项文件的 [mysqlslap] 和 [client] 组中指定。有关 MySQL 程序使用的选项文件的信息,请参见 Section 6.2.2.2, “Using Option Files”。
表 6.19 mysqlslap 选项
| 选项名称 | 描述 | 引入版本 | 废弃版本 |
|---|---|---|---|
| --auto-generate-sql | 当未提供文件或使用命令选项时自动生成 SQL 语句 | ||
| --auto-generate-sql-add-autoincrement | 为自动生成的表添加 AUTO_INCREMENT 列 | ||
| --auto-generate-sql-execute-number | 指定自动生成的查询数量 | ||
| --auto-generate-sql-guid-primary | 为自动生成的表添加基于 GUID 的主键 | ||
| --auto-generate-sql-load-type | 指定测试负载类型 | ||
| --auto-generate-sql-secondary-indexes | 指定自动生成的表中要添加多少个次要索引 | ||
| --auto-generate-sql-unique-query-number | 为自动测试生成多少不同的查询 | ||
| --auto-generate-sql-unique-write-number | 为 --auto-generate-sql-write-number 生成多少不同的查询 | ||
| --auto-generate-sql-write-number | 每个线程执行的行插入数量 | ||
| --commit | 在提交之前执行多少个语句 | ||
| --compress | 在客户端和服务器之间发送的所有信息进行压缩 | 8.0.18 | |
| --compression-algorithms | 与服务器连接时允许的压缩算法 | 8.0.18 | |
| --concurrency | 发出 SELECT 语句时模拟的客户端数量 | ||
| --create | 包含用于创建表的语句的文件或字符串 | ||
| --create-schema | 运行测试的模式 | ||
| --csv | 以逗号分隔值格式生成输出 | ||
| --debug | 写入调试日志 | ||
| --debug-check | 程序退出时打印调试信息 | ||
| --debug-info | 在程序退出时打印调试信息、内存和 CPU 统计信息 | ||
| --default-auth | 要使用的身份验证插件 | ||
| --defaults-extra-file | 除了通常的选项文件外,读取指定的选项文件 | ||
| --defaults-file | 仅读取指定的选项文件 | ||
| --defaults-group-suffix | 选项组后缀值 | ||
| --delimiter | SQL 语句中使用的分隔符 | ||
| --detach | 每个 N 条语句后分离(关闭并重新打开)每个连接 | ||
| --enable-cleartext-plugin | 启用明文身份验证插件 | ||
| --engine | 用于创建表的存储引擎 | ||
| --get-server-public-key | 从服务器请求 RSA 公钥 | ||
| --help | 显示帮助信息并退出 | ||
| --host | MySQL 服务器所在的主机 | ||
| --iterations | 运行测试的次数 | ||
| --login-path | 从 .mylogin.cnf 文件中读取登录路径选项 | ||
| --no-defaults | 不读取任何选项文件 | ||
| --no-drop | 不删除测试运行期间创建的任何模式 | ||
| --number-char-cols | 如果指定了 --auto-generate-sql,使用的 VARCHAR 列数 | ||
| --number-int-cols | 如果指定了 --auto-generate-sql,使用的 INT 列数 | ||
| --number-of-queries | 将每个客户端限制为大约这个查询数 | ||
| --only-print | 不连接到数据库。mysqlslap 只打印它将要执行的操作 | ||
| --password | 连接到服务器时使用的密码 | ||
| --password1 | 连接到服务器时使用的第一个多因素身份验证密码 | 8.0.27 | |
| --password2 | 连接到服务器时使用的第二个多因素身份验证密码 | 8.0.27 | |
| --password3 | 连接到服务器时要使用的第三个多因素身份验证密码 | 8.0.27 | |
| --pipe | 使用命名管道连接到服务器(仅限 Windows) | ||
| --plugin-dir | 安装插件的目录 | ||
| --port | 连接的 TCP/IP 端口号 | ||
| --post-query | 包含在测试完成后执行的语句的文件或字符串 | ||
| --post-system | 在测试完成后使用 system() 执行的字符串 | ||
| --pre-query | 在运行测试之前执行的语句的文件或字符串 | ||
| --pre-system | 在运行测试之前使用 system() 执行的字符串 | ||
| --print-defaults | 打印默认选项 | ||
| --protocol | 要使用的传输协议 | ||
| --query | 包含用于检索数据的 SELECT 语句的文件或字符串 | ||
| --server-public-key-path | 包含 RSA 公钥的文件的路径名 | ||
| --shared-memory-base-name | 共享内存连接的共享内存名称(仅限 Windows) | ||
| --silent | 静默模式 | ||
| --socket | 要使用的 Unix 套接字文件或 Windows 命名管道 | ||
| --sql-mode | 为客户端会话设置 SQL 模式 | ||
| --ssl-ca | 包含受信任的 SSL 证书颁发机构列表的文件 | ||
| --ssl-capath | 包含受信任的 SSL 证书颁发机构证书文件的目录 | ||
| --ssl-cert | 包含 X.509 证书的文件 | ||
| --ssl-cipher | 连接加密的允许密码 | ||
| --ssl-crl | 包含证书吊销列表的文件 | ||
| --ssl-crlpath | 包含证书吊销列表文件的目录 | ||
| --ssl-fips-mode | 是否在客户端启用 FIPS 模式 | 8.0.34 | |
| --ssl-key | 包含 X.509 密钥的文件 | ||
| --ssl-mode | 与服务器连接的期望安全状态 | ||
| --ssl-session-data | 包含 SSL 会话数据的文件 | 8.0.29 | |
| --ssl-session-data-continue-on-failed-reuse | 如果会话重用失败是否建立连接 | 8.0.29 | |
| --tls-ciphersuites | 加密连接的允许 TLSv1.3 密码套件 | 8.0.16 | |
| --tls-version | 加密连接的允许 TLS 协议 | ||
| --user | 连接到服务器时要使用的 MySQL 用户名 | ||
| --verbose | 详细模式 | ||
| --version | 显示版本信息并退出 | ||
| --zstd-compression-level | 使用 zstd 压缩连接到服务器的压缩级别 | 8.0.18 | |
| 选项名称 | 描述 | 引入 | 废弃 |
-
--help,-?命令行格式 --help显示帮助��息并退出。
-
--auto-generate-sql,-a命令行格式 --auto-generate-sql类型 布尔值 默认值 FALSE在文件中未提供 SQL 语句或使用命令选项时自动生成 SQL 语句。
-
--auto-generate-sql-add-autoincrement命令行格式 --auto-generate-sql-add-autoincrement类型 布尔值 默认值 FALSE向自动生成的表添加一个
AUTO_INCREMENT列。 -
--auto-generate-sql-execute-number=*N*命令行格式 --auto-generate-sql-execute-number=#类型 数值 指定自动生成多少个查询。
-
--auto-generate-sql-guid-primary命令行格式 --auto-generate-sql-guid-primary类型 布尔值 默认值 FALSE向自动生成的表添加基于 GUID 的主键。
-
--auto-generate-sql-load-type=*type*命令行格式 --auto-generate-sql-load-type=type类型 枚举 默认值 mixed有效值 read``write``key``update``mixed指定测试负载类型。允许的值为
read(扫描表)、write(插入表)、key(读取主键)、update(更新主键)或mixed(一半插入,一半扫描选择)。默认为mixed。 -
--auto-generate-sql-secondary-indexes=*N*命令行格式 --auto-generate-sql-secondary-indexes=#类型 数值 默认值 0指定自动生成表中要添加多少个辅助索引。默认情况下,不添加任何索引。
-
--auto-generate-sql-unique-query-number=*N*命令行格式 --auto-generate-sql-unique-query-number=#类型 数字 默认值 10为自动测试生成多少个不同的查询。例如,如果运行一个执行 1000 次选择的
key测试,您可以使用此选项并设置值为 1000 来运行 1000 个唯一查询,或者设置为 50 来执行 50 个不同的选择。默认值为 10。 -
--auto-generate-sql-unique-write-number=*N*命令行格式 --auto-generate-sql-unique-write-number=#类型 数字 默认值 10为
--auto-generate-sql-write-number生成多少个不同的查询。默认值为 10。 -
--auto-generate-sql-write-number=*N*命令行格式 --auto-generate-sql-write-number=#类型 数字 默认值 100要执行多少行插入。默认值为 100。
-
--commit=*N*命令行格式 --commit=#类型 数字 默认值 0在提交之前要执行多少条语句。默认值为 0(不执行提交)。
-
--compress,-C命令行格式 --compress[={OFF|ON}]已弃用 8.0.18 类型 布尔值 默认值 OFF如果可能,压缩客户端和服务器之间发送的所有信息。请参阅第 6.2.8 节,“连接压缩控制”。
从 MySQL 8.0.18 开始,此选项已弃用。预计将在将来的 MySQL 版本中删除。请参阅配置传统连接压缩。
-
--compression-algorithms=*value*命令行格式 --compression-algorithms=value引入版本 8.0.18 类型 设置 默认值 uncompressed有效值 zlib``zstd``uncompressed用于与服务器连接的允许的压缩算法。可用的算法与
protocol_compression_algorithms系统变量相同。默认值为uncompressed。有关更多信息,请参阅第 6.2.8 节,“连接压缩控制”。
此选项在 MySQL 8.0.18 中添加。
-
--concurrency=*N*,-c *N*命令行格式 --concurrency=#类型 数值 要模拟的并行客户端数量。
-
--create=*value*命令行格式 --create=value类型 字符串 用于创建表的语句的文件或字符串。
-
--create-schema=*value*命令行格式 --create-schema=value类型 字符串 要运行测试的模式。
注意
如果还提供了
--auto-generate-sql选项,mysqlslap 在测试运行结束时会删除模式。为了避免这种情况,也要使用--no-drop选项。 -
命令行格式 --csv=[file]类型 文件名 以逗号分隔值格式生成输出。输出到指定文件,如果没有给出文件,则输出到标准输出。
-
--debug[=*debug_options*],-# [*debug_options*]命令行格式 --debug[=debug_options]类型 字符串 默认值 d:t:o,/tmp/mysqlslap.trace写入调试日志。典型的
debug_options字符串是d:t:o,*file_name*。默认值是d:t:o,/tmp/mysqlslap.trace。此选项仅在使用
WITH_DEBUG构建 MySQL 时可用。由 Oracle 提供的 MySQL 发行版二进制文件 不 使用此选项构建。 -
--debug-check命令行格式 --debug-check类型 布尔值 默认值 FALSE在程序退出时打印一些调试信息。
此选项仅在使用
WITH_DEBUG构建 MySQL 时可用。由 Oracle 提供的 MySQL 发行版二进制文件 不 使用此选项构建。 -
--debug-info,-T命令行格式 --debug-info类型 布尔值 默认值 FALSE在程序退出时打印调试信息以及内存和 CPU 使用统计信息。
此选项仅在使用
WITH_DEBUG构建 MySQL 时可用。由 Oracle 提供的 MySQL 发行版二进制文件 不 使用此选项构建。 -
--default-auth=*plugin*命令行格式 --default-auth=plugin类型 字符串 关于使用哪个客户端端身份验证插件的提示。参见 第 8.2.17 节,“可插拔认证”。
-
--defaults-extra-file=*file_name*命令行格式 --defaults-extra-file=file_name类型 文件名 在全局选项文件之后(在 Unix 上)但在用户选项文件之前读取此选项文件。如果文件不存在或无法访问,将出现错误。如果*
file_name*不是绝对路径名,则将其解释为相对于当前目录。有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
--defaults-file=*file_name*命令行格式 --defaults-file=file_name类型 文件名 仅使用给定的选项文件。如果文件不存在或无法访问,将出现错误。如果*
file_name*不是绝对路径名,则将其解释为相对于当前目录。例外:即使使用
--defaults-file,客户端程序也会读取.mylogin.cnf。有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”��
-
--defaults-group-suffix=*str*命令行格式 --defaults-group-suffix=str类型 字符串 不仅读取常规选项组,还读取具有常规名称和*
str*后缀的选项组。例如,mysqlslap通常会读取[client]和[mysqlslap]组。如果给定此选项作为--defaults-group-suffix=_other,mysqlslap还会读取[client_other]和[mysqlslap_other]组。有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
--delimiter=*str*,-F *str*命令行格式 --delimiter=str类型 字符串 SQL 语句中使用的分隔符,可以在文件中提供或使用命令选项。
-
--detach=*N*命令行格式 --detach=#类型 数值 默认值 0每*
N*个语句后分离(关闭并重新打开)每个连接。默认值为 0(连接不分离)。 -
--enable-cleartext-plugin命令行格式 --enable-cleartext-plugin类型 布尔值 默认值 FALSE启用
mysql_clear_password明文认证插件。(请参阅 Section 8.4.1.4, “Client-Side Cleartext Pluggable Authentication”。) -
--engine=*engine_name*,-e *engine_name*命令行格式 --engine=engine_name类型 字符串 用于创建表的存储引擎。
-
--get-server-public-key命令行格式 --get-server-public-key类型 布尔 从服务器请求用于基于密钥对密码交换的 RSA 公钥。此选项适用于使用通过
caching_sha2_password认证插件进行身份验证的帐户连接到服务器的客户端。对于通过这些帐户连接的连接,除非请求,否则服务器不会将公钥发送给客户端。对于不使用该插件进行身份验证的帐户,此选项将被忽略。如果不需要基于 RSA 的密码交换,例如客户端使用安全连接连接到服务器时,也将被忽略。如果给定
--server-public-key-path=*file_name*并指定有效的公钥文件,则它将优先于--get-server-public-key。有关
caching_sha2_password插件的信息,请参阅 Section 8.4.1.2, “Caching SHA-2 Pluggable Authentication”。 -
--host=*host_name*,-h *host_name*命令行格式 --host=host_name类型 字符串 默认值 localhost连接到给定主机上的 MySQL 服务器。
-
--iterations=*N*,-i *N*命令行格式 --iterations=#类型 数字 运行测试的次数。
-
--login-path=*name*命令行格式 --login-path=name类型 字符串 从
.mylogin.cnf登录路径文件中的指定登录路径读取选项。 “登录路径”是一个包含指定要连接到哪个 MySQL 服务器以及要作为哪个帐户进行身份验证的选项的选项组。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参阅 Section 6.6.7, “mysql_config_editor — MySQL Configuration Utility”。有关此选项和其他选项文件选项的其他信息,请参阅 Section 6.2.2.3, “Command-Line Options that Affect Option-File Handling”。
-
--no-drop命令行格式 --no-drop类型 布尔值 默认值 FALSE防止 mysqlslap 在测试运行期间删除其创建的任何模式。
-
--no-defaults命令行格式 --no-defaults不读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,则可以使用
--no-defaults防止读取这些选项。例外情况是,无论何种情况下都会读取
.mylogin.cnf文件(如果存在)。这使得可以以比在命令行上更安全的方式指定密码,即使使用了--no-defaults。要创建.mylogin.cnf,请使用 mysql_config_editor 实用程序。请参阅 第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项和其他选项文件选项的更多信息,请参阅 第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
--number-char-cols=*N*,-x *N*命令行格式 --number-char-cols=#类型 数值 如果指定了
--auto-generate-sql,则使用的VARCHAR列的数量。 -
--number-int-cols=*N*,-y *N*命令行格式 --number-int-cols=#类型 数值 如果指定了
--auto-generate-sql,则使用的INT列的数量。 -
--number-of-queries=*N*命令行格式 --number-of-queries=#类型 数值 将每个客户端限制在大约这么多查询。查询计数考虑了语句分隔符。例如,如果像下面这样调用 mysqlslap,则会识别
;分隔符,使得查询字符串的每个实例计为两个查询。因此,插入了 5 行(而不是 10 行)。mysqlslap --delimiter=";" --number-of-queries=10 --query="use test;insert into t values(null)" -
--only-print命令行格式 --only-print类型 布尔值 默认值 FALSE不连接到数据库。mysqlslap 只打印它本应该执行的操作。
-
--password[=*password*],-p[*password*]命令行格式 --password[=password]类型 字符串 用于连接到服务器的 MySQL 帐户的密码。密码值是可选的。如果未提供,mysqlslap会提示输入密码。如果提供了密码,则
--password=或-p之后的密码之间不能有空格。如果未指定密码选项,则默认不发送密码。在命令行上指定密码应被视为不安全。为了避免在命令行上提供密码,请使用选项文件。请参阅第 8.1.2.1 节,“密码安全的最终用户指南”。
要明确指定没有密码,并且mysqlslap不应提示密码,请使用
--skip-password选项。 -
用于连接到服务器的 MySQL 帐户的多因素认证因子 1 的密码。密码值是可选的。如果未提供,mysqlslap会提示输入密码。如果提供了密码,则
--password1=和其后的密码之间不能有空格。如果未指定密码选项,则默认不发送密码。在命令行上指定密码应被视为不安全。为了避免在命令行上提供密码,请使用选项文件。请参阅第 8.1.2.1 节,“密码安全的最终用户指南”。
要明确指定没有密码,并且mysqlslap不应提示密码,请使用
--skip-password1选项。--password1和--password是同义词,--skip-password1和--skip-password也是。 -
用于连接到服务器的 MySQL 帐户的多因素认证因子 2 的密码。此选项的语义类似于
--password1的语义;有关详细信息,请参阅该选项的描述。 -
用于连接到服务器的 MySQL 帐户的多因素认证因子 3 的密码。此选项的语义类似于
--password1的语义;有关详细信息,请参阅该选项的描述。 -
--pipe,-W命令行格式 --pipe类型 字符串 在 Windows 上,使用命名管道连接到服务器。此选项仅在服务器启动时启用了支持命名管道连接的
named_pipe系统变量时才适用。此外,进行连接的用户必须是由named_pipe_full_access_group系统变量指定的 Windows 组的成员。 -
--plugin-dir=*dir_name*命令行格式 --plugin-dir=dir_name类型 目录名称 查找插件的目录。如果使用
--default-auth选项指定身份验证插件但 mysqlslap 找不到它,则指定此选项。参见 Section 8.2.17, “Pluggable Authentication”。 -
--port=*port_num*,-P *port_num*命令行格式 --port=port_num类型 数字 默认值 3306用于 TCP/IP 连接的端口号。
-
--post-query=*value*命令行格式 --post-query=value类型 字符串 包含在测试完成后要执行的语句的文件或字符串。此执行不计入计时目的。
-
--post-system=*str*命令行格式 --post-system=str类型 字符串 在测试完成后使用
system()执行的字符串。此执行不计入计时目的。 -
--pre-query=*value*命令行格式 --pre-query=value类型 字符串 包含在运行测试之前要执行的语句的文件或字符串。此执行不计入计时目的。
-
--pre-system=*str*命令行格式 --pre-system=str类型 字符串 在运行测试之前使用
system()执行的字符串。此执行不计入计时目的。 -
--print-defaults命令行格式 --print-defaults打印程序名称以及从选项文件获取的所有选项。
有关此选项和其他选项文件选项的附加信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
--protocol={TCP|SOCKET|PIPE|MEMORY}命令行格式 --protocol=type类型 字符串 默认值 [见文本]有效值 TCP``SOCKET``PIPE``MEMORY用于连接服务器的传输协议。当其他连接参数通常导致使用不希望的协议时,这将非常有用。有关允许值的详细信息,请参见第 6.2.7 节,“连接传输协议”。
-
--query=*value*,-q *value*命令行格式 --query=value类型 字符串 包含
SELECT语句的文件或字符串,用于检索数据。 -
--server-public-key-path=*file_name*命令行格式 --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,仅当 MySQL 使用 OpenSSL 构建时,此选项才适用。有关
sha256_password和caching_sha2_password插件的信息,请参见第 8.4.1.3 节,“SHA-256 可插拔认证”和第 8.4.1.2 节,“缓存 SHA-2 可插拔认证”。 -
--shared-memory-base-name=*name*命令行格式 --shared-memory-base-name=name平台特定 Windows 在 Windows 上,用于使用共享内存进行到本地服务器的连接的共享内存名称。默认值为
MYSQL。共享内存名称区分大小写。此选项仅在服务器启动时启用了支持共享内存连接的
shared_memory系统变量时才适用。 -
--silent,-s命令行格式 --silent静默模式。无输出。
-
--socket=*path*,-S *path*命令行格式 --socket={file_name|pipe_name}类型 字符串 对于对
localhost的连接,要使用的 Unix 套接字文件,或者在 Windows 上要使用的命名管道的名称。在 Windows 上,仅当服务器启动时启用了支持命名管道连接的
named_pipe系统变量时,此选项才适用。此外,进行连接的用户必须是由named_pipe_full_access_group系统变量指定的 Windows 组的成员。 -
--sql-mode=*mode*命令行格式 --sql-mode=mode类型 字符串 设置客户端会话的 SQL 模式。
-
--ssl*以
--ssl开头的选项指定是否使用加密连接到服务器,并指示 SSL 密钥和证书的位置。请参阅加密连接的命令选项。 -
--ssl-fips-mode={OFF|ON|STRICT}命令行格式 --ssl-fips-mode={OFF|ON|STRICT}已弃用 8.0.34 类型 枚举 默认值 OFF有效值 OFF``ON``STRICT控制是否在客户端端启用 FIPS 模式。
--ssl-fips-mode选项与其他--ssl-*xxx*选项不同,它不用于建立加密连接,而是影响允许哪些加密操作。请参阅第 8.8 节,“FIPS 支持”。允许使用这些
--ssl-fips-mode值:-
OFF: 禁用 FIPS 模式。 -
ON: 启用 FIPS 模式。 -
STRICT: 启用“严格” FIPS 模式。
注意
如果 OpenSSL FIPS 对象模块不可用,则
--ssl-fips-mode的唯一允许值为OFF。在这种情况下,将--ssl-fips-mode设置为ON或STRICT会导致客户端在启动时产生警告并在非 FIPS 模式下运行。从 MySQL 8.0.34 开始,此选项已弃用。预计在将来的 MySQL 版本中将其移除。
-
-
--tls-ciphersuites=*ciphersuite_list*命令行格式 --tls-ciphersuites=ciphersuite_list引入版本 8.0.16 类型 字符串 用于使用 TLSv1.3 的加密连接的允许密码套件。该值是一个或多个以冒号分隔的密码套件名称列表。可以为此选项命名的密码套件取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。
此选项已添加到 MySQL 8.0.16 中。
-
--tls-version=*protocol_list*命令行格式 --tls-version=protocol_list类型 字符串 默认值(≥ 8.0.16) TLSv1,TLSv1.1,TLSv1.2,TLSv1.3(OpenSSL 1.1.1 或更高版本)TLSv1,TLSv1.1,TLSv1.2(否则)默认值(≤ 8.0.15) TLSv1,TLSv1.1,TLSv1.2可用于加密连接的 TLS 协议。该值是一个或多个逗号分隔的协议名称列表。可以为此选项命名的协议取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。
-
--user=*user_name*,-u *user_name*命令行格式 --user=user_name,类型 字符串 用于连接到服务器的 MySQL 帐户的用户名。
-
--verbose,-v命令行格式 --verbose详细模式。打印程序执行的更多信息。此选项可多次使用以增加信息量。
-
--version,-V命令行格式 --version显示版本信息并退出。
-
--zstd-compression-level=*level*命令行格式 --zstd-compression-level=#引入版本 8.0.18 类型 整数 用于使用
zstd压缩算法连接到服务器的压缩级别。允许的级别从 1 到 22,较大的值表示较高级别的压缩。默认的zstd压缩级别为 3。压缩级别设置对不使用zstd压缩的连接没有影响。有关更多信息,请参见第 6.2.8 节,“连接压缩控制”。
此选项已添加到 MySQL 8.0.18 中。
6.6 管理和实用程序
原文:
dev.mysql.com/doc/refman/8.0/en/programs-admin-utils.html
6.6.1 ibd2sdi — InnoDB 表空间 SDI 提取实用程序
6.6.2 innochecksum — 离线 InnoDB 文件校验和实用程序
6.6.3 myisam_ftdump — 显示全文索引信息
6.6.4 myisamchk — MyISAM 表维护实用程序
6.6.5 myisamlog — 显示 MyISAM 日志文件内容
6.6.6 myisampack — 生成压缩的只读 MyISAM 表
6.6.7 mysql_config_editor — MySQL 配置实用程序
6.6.8 mysql_migrate_keyring — 密钥环键迁移实用程序
6.6.9 mysqlbinlog — 用于处理二进制日志文件的实用程序
6.6.10 mysqldumpslow — 汇总慢查询日志文件
本节描述了管理程序和执行各种杂项实用操作的程序。
6.6.1 ibd2sdi — InnoDB 表空间 SDI 提取实用程序
ibd2sdi是一个用于从InnoDB表空间文件中提取序列化字典信息(SDI)的实用程序。SDI 数据存在于所有持久的InnoDB表空间文件中。
ibd2sdi可以运行在 file-per-table 表空间文件(*.ibd文件)、general tablespace 文件(*.ibd文件)、system tablespace 文件(ibdata*文件)和数据字典表空间(mysql.ibd)上。不支持临时表空间或撤销表空间的使用。
ibd2sdi可以在运行时或服务器离线时使用。在与 SDI 相关的 DDL 操作、ROLLBACK操作和撤销日志清除操作期间,可能会有一个短暂的时间间隔,此时ibd2sdi无法读取存储在表空间中的 SDI 数据。
ibd2sdi从指定的表空间执行未提交的 SDI 读取。不访问重做日志和撤销日志。
调用ibd2sdi实用程序如下:
ibd2sdi [*options*] *file_name1* [*file_name2 file_name3 ...*]
ibd2sdi支持像InnoDB系统表空间这样的多文件表空间,但不能同时运行多个表空间。对于多文件表空间,请指定每个文件:
ibd2sdi ibdata1 ibdata2
多文件表空间的文件必须按照升序页号的顺序指定。如果两个连续的文件具有相同的空间 ID,则后一个文件必须以前一个文件的最后页号+1 开始。
ibd2sdi以JSON格式输出包含 id、类型和数据字段的 SDI。
ibd2sdi 选项
ibd2sdi支持以下选项:
-
--help,-h命令行格式 --help类型 布尔值 默认值 false显示帮助消息并退出。例如:
Usage: ./ibd2sdi [-v] [-c <strict-check>] [-d <dump file name>] [-n] filename1 [filenames] See http://dev.mysql.com/doc/refman/8.0/en/ibd2sdi.html for usage hints. -h, --help Display this help and exit. -v, --version Display version information and exit. -#, --debug[=name] Output debug log. See http://dev.mysql.com/doc/refman/8.0/en/dbug-package.html -d, --dump-file=name Dump the tablespace SDI into the file passed by user. Without the filename, it will default to stdout -s, --skip-data Skip retrieving data from SDI records. Retrieve only id and type. -i, --id=# Retrieve the SDI record matching the id passed by user. -t, --type=# Retrieve the SDI records matching the type passed by user. -c, --strict-check=name Specify the strict checksum algorithm by the user. Allowed values are innodb, crc32, none. -n, --no-check Ignore the checksum verification. -p, --pretty Pretty format the SDI output.If false, SDI would be not human readable but it will be of less size (Defaults to on; use --skip-pretty to disable.) Variables (--variable-name=value) and boolean options {FALSE|TRUE} Value (after reading options) --------------------------------- ---------------------------------------- debug (No default value) dump-file (No default value) skip-data FALSE id 0 type 0 strict-check crc32 no-check FALSE pretty TRUE -
--version,-v命令行格式 --version类型 布尔值 默认值 false显示版本信息并退出。例如:
ibd2sdi Ver 8.0.3-dmr for Linux on x86_64 (Source distribution) -
--debug[=*debug_options*],-# [*debug_options*]命令行格式 --debug=options类型 字符串 默认值 [none]打印调试日志。有关调试选项,请参考第 7.9.4 节,“DBUG 包”。
ibd2sdi --debug=d:t /tmp/ibd2sdi.trace仅当 MySQL 使用
WITH_DEBUG构建时才可用此选项。由 Oracle 提供的 MySQL 发布二进制文件不使用此选项构建。 -
--dump-file=,-d命令行格式 --dump-file=file类型 文件名 默认值 [none]将序列化的字典信息(SDI)转储到指定的转储文件中。如果未指定转储文件,则表空间 SDI 将转储到
stdout。ibd2sdi --dump-file=*file_name* ../data/test/t1.ibd -
--skip-data,-s命令行格式 --skip-data类型 布尔值 默认值 false跳过从序列化字典信息(SDI)中检索
data字段值,仅检索id和type字段值,这些字段值是 SDI 记录的主键。$> ibd2sdi --skip-data ../data/test/t1.ibd ["ibd2sdi" , { "type": 1, "id": 330 } , { "type": 2, "id": 7 } ] -
--id=*#*,-i *#*命令行格式 --id=#类型 整数 默认值 0检索与指定表或表空间对象 ID 匹配的序列化字典信息(SDI)。对象 ID 对于对象类型是唯一的。表和表空间对象 ID 也可以在
mysql.tables和mysql.tablespace数据字典表的id列中找到。有关数据字典表的信息,请参见第 16.1 节,“数据字典模式”。$> ibd2sdi --id=7 ../data/test/t1.ibd ["ibd2sdi" , { "type": 2, "id": 7, "object": { "mysqld_version_id": 80003, "dd_version": 80003, "sdi_version": 1, "dd_object_type": "Tablespace", "dd_object": { "name": "test/t1", "comment": "", "options": "", "se_private_data": "flags=16417;id=2;server_version=80003;space_version=1;", "engine": "InnoDB", "files": [ { "ordinal_position": 1, "filename": "./test/t1.ibd", "se_private_data": "id=2;" } ] } } } ] -
--type=*#*,-t *#*命令行格式 --type=#类型 枚举 默认值 0有效值 1``2检索与指定对象类型匹配的序列化字典信息(SDI)。SDI 提供了表(类型=1)和表空间(类型=2)对象的信息。
此示例显示了
test数据库中表空间ts1的输出:$> ibd2sdi --type=2 ../data/test/ts1.ibd ["ibd2sdi" , { "type": 2, "id": 7, "object": { "mysqld_version_id": 80003, "dd_version": 80003, "sdi_version": 1, "dd_object_type": "Tablespace", "dd_object": { "name": "test/ts1", "comment": "", "options": "", "se_private_data": "flags=16417;id=2;server_version=80003;space_version=1;", "engine": "InnoDB", "files": [ { "ordinal_position": 1, "filename": "./test/ts1.ibd", "se_private_data": "id=2;" } ] } } } ]由于
InnoDB处理默认值元数据的方式,即使在给定表列的ibd2sdi输出中,也可能存在并且非空的默认值,即使未使用DEFAULT定义。考虑使用以下语句在名为i的数据库中创建的两个表:CREATE TABLE t1 (c VARCHAR(16) NOT NULL); CREATE TABLE t2 (c VARCHAR(16) NOT NULL DEFAULT "Sakila");使用ibd2sdi,我们可以看到列
c的default_value是非空的,并且实际上在两个表中都填充到了指定长度,如下所示:$> ibd2sdi ../data/i/t1.ibd | grep -m1 '\"default_value\"' | cut -b34- | sed -e s/,// "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAA=" $> ibd2sdi ../data/i/t2.ibd | grep -m1 '\"default_value\"' | cut -b34- | sed -e s/,// "BlNha2lsYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAA="使用类似**jq**这样的 JSON 感知工具,可以更轻松地检查 ibd2sdi 的输出,如下所示:
$> ibd2sdi ../data/i/t1.ibd | jq '.[1]["object"]["dd_object"]["columns"][0]["default_value"]' "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAA=" $> ibd2sdi ../data/i/t2.ibd | jq '.[1]["object"]["dd_object"]["columns"][0]["default_value"]' "BlNha2lsYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAA="欲了解更多信息,请参阅 MySQL 内部文档。
-
--strict-check,-c命令行格式 --strict-check=algorithm类型 枚举 默认值 crc32有效值 crc32``innodb``none指定一个严格的校验算法,用于验证读取页面的校验和。选项包括
innodb、crc32和none。在这个例子中,指定了
innodb校验算法的严格版本:ibd2sdi --strict-check=innodb ../data/test/t1.ibd在这个例子中,指定了
crc32校验算法的严格版本:ibd2sdi -c crc32 ../data/test/t1.ibd如果不指定
--strict-check选项,则会根据非严格的innodb、crc32和none校验进行验证。 -
--no-check,-n命令行格式 --no-check类型 布尔值 默认值 false跳过读取页面时的校验和验证。
ibd2sdi --no-check ../data/test/t1.ibd -
--pretty,-p命令行格式 --pretty类型 布尔值 默认值 false以 JSON 格式输出 SDI 数据。默认启用。如果禁用,则 SDI 不易阅读但文件大小更小。使用
--skip-pretty来禁用。ibd2sdi --skip-pretty ../data/test/t1.ibd
6.6.2 innochecksum — 离线 InnoDB 文件校验和实用程序
innochecksum 会为InnoDB文件打印校验和。该工具读取一个InnoDB表空间文件,为每个页面计算校验和,比较计算的校验和与存储的校验和,报告不匹配,这表明有损坏的页面。最初开发此工具是为了加快在断电后验证表空间文件的完整性,但也可用于文件复制后。因为校验和不匹配会导致InnoDB有意关闭正在运行的服务器,所以使用此工具可能比等待生产服务器遇到损坏页面更可取。
innochecksum 不能用于服务器已经打开的表空间文件。对于这样的文件,应该使用CHECK TABLE 来检查表空间中的表。尝试在服务器已经打开的表空间上运行 innochecksum 会导致无法锁定文件的错误。
如果发现校验和不匹配,��备份中恢复表空间或启动服务器并尝试使用 mysqldump 对表空间中的表进行备份。
运行 innochecksum 的方法如下:
innochecksum [*options*] *file_name*
innochecksum 选项
innochecksum 支持以下选项。对于涉及页码的选项,数字是从零开始的。
-
--help,-?命令行格式 --help类型 布尔值 默认值 false显示命令行帮助。示例用法:
innochecksum --help -
--info,-I命令行格式 --info类型 布尔值 默认值 false--help的同义词。显示命令行帮助。示例用法:innochecksum --info -
--version,-V命令行格式 --version类型 布尔值 默认值 false显示版本信息。示例用法:
innochecksum --version -
--verbose,-v命令行格式 --verbose类型 布尔值 默认值 false详细模式;每五秒向日志文件打印进度指示器。为了打印进度指示器,必须使用
--log选项指定日志文件。要启用详细模式,请运行:innochecksum --verbose要关闭详细模式,请运行:
innochecksum --verbose=FALSE--verbose选项和--log选项可以同时指定。例如:innochecksum --verbose --log=/var/lib/mysql/test/logtest.txt要在日志文件中查找进度指示信息,可以执行以下搜索:
cat ./logtest.txt | grep -i "okay"日志文件中的进度指示信息如下所示:
page 1663 okay: 2.863% done page 8447 okay: 14.537% done page 13695 okay: 23.568% done page 18815 okay: 32.379% done page 23039 okay: 39.648% done page 28351 okay: 48.789% done page 33023 okay: 56.828% done page 37951 okay: 65.308% done page 44095 okay: 75.881% done page 49407 okay: 85.022% done page 54463 okay: 93.722% done ... -
--count,-c命令行格式 --count类型 基本名称 默认值 true打印文件中页面数的计数并退出。示例用法:
innochecksum --count ../data/test/tab1.ibd -
--start-page=*num*,-s *num*命令行格式 --start-page=#类型 数值 默认值 0从此页码开始。示例用法:
innochecksum --start-page=600 ../data/test/tab1.ibd或:
innochecksum -s 600 ../data/test/tab1.ibd -
--end-page=*num*,-e *num*命令行格式 --end-page=#类型 数值 默认值 0最小值 0最大值 18446744073709551615结束于此页码。示例用法:
innochecksum --end-page=700 ../data/test/tab1.ibd或:
innochecksum --p 700 ../data/test/tab1.ibd -
--page=*num*,-p *num*命令行格式 --page=#类型 整数 默认值 0仅检查此页码。示例用法:
innochecksum --page=701 ../data/test/tab1.ibd -
--strict-check,-C命令行格式 --strict-check=algorithm类型 枚举 默认值 crc32有效值 innodb``crc32``none指定严格的校验算法。选项包括
innodb、crc32和none。在此示例中,指定了
innodb校验算法:innochecksum --strict-check=innodb ../data/test/tab1.ibd在此示例中,指定了
crc32校验算法:innochecksum -C crc32 ../data/test/tab1.ibd以下条件适用:
-
如果您没有指定
--strict-check选项,innochecksum 将校验innodb、crc32和none。 -
如果指定
none选项,则只允许由none生成的校验。 -
如果指定
innodb选项,则只允许由innodb生成的校验。 -
如果指定
crc32选项,则只允许由crc32生成的校验。
-
-
--no-check,-n命令行格式 --no-check类型 布尔值 默认值 false重写校验时忽略校验。此选项只能与innochecksum 的
--write选项一起使用。如果未指定--write选项,innochecksum 将终止。在此示例中,将
innodb校验重写以替换无效校验:innochecksum --no-check --write innodb ../data/test/tab1.ibd -
--allow-mismatches,-a命令行格式 --allow-mismatches=#类型 整数 默认值 0最小值 0最大值 18446744073709551615在innochecksum终止之前允许的最大校验和不匹配次数。默认设置为 0。如果
--allow-mismatches=N,其中*N*>=0,则允许*N*个不匹配,并且**innochecksum**在N+1时终止。当--allow-mismatches`设置为 0 时,innochecksum在第一个校验和不匹配时终止。在此示例中,将现有的
innodb校验和重写为将--allow-mismatches设置为 1。innochecksum --allow-mismatches=1 --write innodb ../data/test/tab1.ibd当
--allow-mismatches设置为 1 时,如果在具有 1000 个页面的文件中的第 600 页存在不匹配,然后在第 700 页存在另一个不匹配,校验和将更新为 0-599 页和 601-699 页。因为--allow-mismatches设置为 1,校验和容忍第一个不匹配,并在第二个不匹配时终止,使第 600 页和第 700-999 页保持不变。 -
--write=*name*,-w *num*命令行格式 --write=algorithm类型 枚举 默认值 crc32有效值 innodb``crc32``none重写校验和。在重写无效校验和时,必须将
--no-check选项与--write选项一起使用。--no-check选项告诉innochecksum忽略无效校验和的验证。如果当前校验和有效,则不必指定--no-check选项。使用
--write选项时必须指定算法。--write选项的可能值包括:-
innodb: 使用来自InnoDB的原始算法在软件中计算的校验和。 -
crc32: 使用crc32算法计算的校验和,可能使用硬件辅助完成。 -
none: 一个常数。
--write选项将整个页面重写到磁盘。如果新校验和与现有校验和相同,则为了最小化 I/O,新校验和不会写入磁盘。innochecksum在使用
--write选项时获得独占锁。在此示例中,为
tab1.ibd写入crc32校验和:innochecksum -w crc32 ../data/test/tab1.ibd在此示例中,重写
crc32校验和以替换无效的crc32校验和:innochecksum --no-check --write crc32 ../data/test/tab1.ibd -
-
--page-type-summary,-S命令行格式 --page-type-summary类型 布尔值 默认值 false在表空间中显示每种页面类型的计数。示例用法:
innochecksum --page-type-summary ../data/test/tab1.ibd--page-type-summary的示例输出:File::../data/test/tab1.ibd ================PAGE TYPE SUMMARY============== #PAGE_COUNT PAGE_TYPE =============================================== 2 Index page 0 Undo log page 1 Inode page 0 Insert buffer free list page 2 Freshly allocated page 1 Insert buffer bitmap 0 System page 0 Transaction system page 1 File Space Header 0 Extent descriptor page 0 BLOB page 0 Compressed BLOB page 0 Other type of page =============================================== Additional information: Undo page type: 0 insert, 0 update, 0 other Undo page state: 0 active, 0 cached, 0 to_free, 0 to_purge, 0 prepared, 0 other -
--page-type-dump,-D命令行格式 --page-type-dump=name类型 字符串 默认值 [无]将表空间中每个页面的页面类型信息转储到
stderr或stdout。示例用法:innochecksum --page-type-dump=/tmp/a.txt ../data/test/tab1.ibd -
--log,-l命令行格式 --log=path类型 文件名 默认值 [无]innochecksum 工具的日志输出。必须提供日志文件名。日志输出包含每个表空间页面的校验值。对于未压缩的表,还提供了 LSN 值。
--log替换了早期版本中可用的--debug选项。示例用法:innochecksum --log=/tmp/log.txt ../data/test/tab1.ibd或者:
innochecksum -l /tmp/log.txt ../data/test/tab1.ibd -
-选项。指定
-选项以从标准输入读取。如果在期望“从标准输入读取”时缺少-选项,则 innochecksum 会打印 innochecksum 的使用信息,指示省略了-选项。示例用法:cat t1.ibd | innochecksum -在这个例子中,innochecksum 将
crc32校验算法写入a.ibd,而不改变原始的t1.ibd文件。cat t1.ibd | innochecksum --write=crc32 - > a.ibd
在多个用户定义的表空间文件上运行 innochecksum
以下示例演示如何在多个用户定义的表空间文件(.ibd文件)上运行 innochecksum。
运行 innochecksum 来检查“test”数据库中所有表空间(.ibd)文件:
innochecksum ./data/test/*.ibd
运行 innochecksum 来检查所有以“t”开头的表空间文件(.ibd文件):
innochecksum ./data/test/t*.ibd
运行 innochecksum 来检查data目录中的所有表空间文件(.ibd文件):
innochecksum ./data/*/*.ibd
注意
在 Windows 操作系统上不支持在多个用户定义的表空间文件上运行 innochecksum,因为 Windows shell(如cmd.exe)不支持通配符扩展。在 Windows 系统上,必须为每个用户定义的表空间文件单独运行 innochecksum。例如:
innochecksum.exe t1.ibd
innochecksum.exe t2.ibd
innochecksum.exe t3.ibd
在多个系统表空间文件上运行 innochecksum
默认情况下,只有一个 InnoDB 系统表空间文件(ibdata1),但可以使用 innodb_data_file_path 选项定义系统表空间的多个文件。在以下示例中,使用 innodb_data_file_path 选项定义了三个系统表空间文件:ibdata1、ibdata2 和 ibdata3。
./bin/mysqld --no-defaults --innodb-data-file-path="ibdata1:10M;ibdata2:10M;ibdata3:10M:autoextend"
三个文件(ibdata1、ibdata2 和 ibdata3)形成一个逻辑系统表空间。要对形成一个逻辑系统表空间的多个文件运行 innochecksum,innochecksum 需要使用 - 选项从标准输入读取表空间文件,这相当于连接多个文件以创建一个单一文件。对于上面提供的示例,将使用以下 innochecksum 命令:
cat ibdata* | innochecksum -
有关“-”选项的更多信息,请参考 innochecksum 选项信息。
注意
在 Windows 操作系统上不支持在同一表空间中运行 innochecksum 多个文件,因为 Windows shells(如 cmd.exe)不支持通配符模式扩展。在 Windows 系统上,必须分别对每个系统表空间文件运行 innochecksum。例如:
innochecksum.exe ibdata1
innochecksum.exe ibdata2
innochecksum.exe ibdata3
6.6.3 myisam_ftdump — 显示全文索引信息
myisam_ftdump显示MyISAM表中FULLTEXT索引的信息。它直接读取MyISAM索引文件,因此必须在表所在的服务器主机上运行。在使用myisam_ftdump之前,请确保首先发出FLUSH TABLES语句(如果服务器正在运行)。
myisam_ftdump扫描并转储整个索引,这并不特别快。另一方面,单词的分布变化不频繁,因此不需要经常运行。
像这样调用myisam_ftdump:
myisam_ftdump [*options*] *tbl_name* *index_num*
*tbl_name*参数应该是一个MyISAM表的名称。您还可以通过命名其索引文件(具有.MYI后缀的文件)来指定表。如果您不在表文件所在的目录中调用myisam_ftdump,则表或索引文件名必须在表的数据库目录的路径名之前。索引编号从 0 开始。
例如:假设test数据库包含一个名为mytexttable的表,其定义如下:
CREATE TABLE mytexttable
(
id INT NOT NULL,
txt TEXT NOT NULL,
PRIMARY KEY (id),
FULLTEXT (txt)
) ENGINE=MyISAM;
id上的索引是索引 0,txt上的FULLTEXT索引是索引 1。如果您的工作目录是test数据库目录,请按以下方式调用myisam_ftdump:
myisam_ftdump mytexttable 1
如果test数据库目录的路径名为/usr/local/mysql/data/test,您也可以使用该路径名指定表名参数。如果您不在数据库目录中调用myisam_ftdump,这将非常有用:
myisam_ftdump /usr/local/mysql/data/test/mytexttable 1
您可以在类 Unix 系统上像这样使用myisam_ftdump按出现频率生成索引条目列表:
myisam_ftdump -c mytexttable 1 | sort -r
在 Windows 上使用:
myisam_ftdump -c mytexttable 1 | sort /R
myisam_ftdump支持以下选项:
-
--help,-h-?命令行格式 --help显示帮助消息并退出。
-
--count,-c命令行格式 --count计算每个单词的统计信息(计数和全局权重)。
-
--dump,-d命令行格式 --dump转储索引,包括数据偏移和单词权重。
-
--length,-l命令行格式 --length报告长度分布。
-
--stats,-s命令行格式 --stats报告全局索引统计。如果没有指定其他操作,则这是默认操作。
-
--verbose,-v命令行格式 --verbose详细模式。打印程序执行的更多输出。
6.6.4 myisamchk — MyISAM 表维护实用程序
6.6.4.1 myisamchk 常规选项
6.6.4.2 myisamchk 检查选项
6.6.4.3 myisamchk 修复选项
6.6.4.4 其他 myisamchk 选项
6.6.4.5 使用 myisamchk 获取表信息
6.6.4.6 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执行的操作。它们在以下章节中描述。你也可以通过调用myisamchk --help来获取选项列表。
没有选项时,myisamchk仅作为默认操作检查您的表。要获取更多信息或告诉myisamchk采取纠正措施,请按照以下讨论中描述的选项。
*tbl_name*是你想要检查或修复的数据库表。如果你在数据库目录之外的地方运行myisamchk,你必须指定数据库目录的路径,因为myisamchk不知道数据库的位置。事实上,myisamchk实际上并不关心你正在处理的文件是否位于数据库目录中。你可以将对应于数据库表的文件复制到其他位置,并在那里执行恢复操作。
如果需要,你可以在myisamchk命令行上命名多个表。你还可以通过命名其索引文件(具有.MYI后缀的文件)来指定一个表。这使你可以通过使用模式*.MYI来指定目录中的所有表。例如,如果你在一个数据库目录中,可以像这样检查该目录中的所有MyISAM表:
myisamchk *.MYI
如果你不在数据库目录中,可以通过指定目录路径来检查所有表:
myisamchk */path/to/database_dir/**.MYI
甚至可以通过在 MySQL 数据目录路径中指定通配符来检查所有数据库中的所有表:
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时,你必须确保没有其他程序正在使用这些表。最有效的方法是在运行myisamchk时关闭 MySQL 服务器,或者锁定所有myisamchk正在使用的表。
否则,当你运行myisamchk时,可能会显示以下错误消息:
warning: clients are using or haven't closed the table properly
这意味着您正在尝试检查已被另一个程序(如mysqld服务器)更新但���未关闭文件或因未正确关闭文件而死亡的表,这有时会导致一个或多个MyISAM表的损坏。
如果mysqld正在运行,您必须通过使用FLUSH TABLES强制它刷新仍在内存中缓冲的任何表修改。然后在运行myisamchk时,确保没有人在使用这些表。
然而,避免这个问题的最简单方法是使用CHECK TABLE而不是myisamchk来检查表。请参见 Section 15.7.3.2, “CHECK TABLE Statement”。
myisamchk 支持以下选项,可以在命令行或选项文件的[myisamchk]组中指定。有关 MySQL 程序使用的选项文件的信息,请参见 Section 6.2.2.2, “Using Option Files”。
表 6.20 myisamchk 选项
| 选项名称 | 描述 |
|---|---|
| --analyze | 分析关键值的分布情况 |
| --backup | 将 .MYD 文件备份为 file_name-time.BAK |
| --block-search | 查找给定偏移量处块所属的记录 |
| --character-sets-dir | 存放字符集的目录 |
| --check | 检查表中的错误 |
| --check-only-changed | 仅检查自上次检查以来发生变化的表 |
| --correct-checksum | 为表正确校验和信息 |
| --data-file-length | 数据文件的最大长度(当重新创建数据文件时文件已满时) |
| --debug | 写入调试日志 |
| --decode_bits | Decode_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 | 显示帮助信息并退出 |
| --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 或使用 CREATE INDEX 或 ALTER TABLE 创建索引时,用于排序索引的缓冲区 |
| --no-defaults | 不读取任何选项文件 |
| --parallel-recover | 使用与-r 和-n 相同的技术,但使用不同线程并行创建所有键(测试版) |
| --print-defaults | 打印默认选项 |
| --quick | 通过不修改数据文件来实现更快的修复 |
| --read_buffer_size | 每个执行顺序扫描的线程为其扫描的每个表分配此大小的缓冲区 |
| --read-only | 不要将表标记为已检查 |
| --recover | 进行修复,可以解决几乎所有问题,除了不唯一的唯一键 |
| --safe-recover | 使用旧的恢复方法进行修复,按顺序读取所有行并根据找到的行更新所有索引树 |
| --set-auto-increment | 强制新记录的 AUTO_INCREMENT 编号从给定值开始 |
| --set-collation | 指定用于排序表索引的排序规则 |
| --silent | 静默模式 |
| --sort_buffer_size | 在执行 REPAIR 或使用 CREATE INDEX 或 ALTER TABLE 创建索引时,用于排序索引的缓冲区 |
| --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 | 写缓冲区大小 |
| 选项名称 | 描述 |
原文:
dev.mysql.com/doc/refman/8.0/en/myisamchk-general-options.html
6.6.4.1 myisamchk 通用选项
本节描述的选项可用于由myisamchk执行的任何类型的表维护操作。本节之后的部分描述了仅适用于特定操作(如表检查或修复)的选项。
-
--help,-?命令行格式 --help显示帮助消息并退出。选项按操作类型分组。
-
--HELP,-H命令行格式 --HELP显示帮助消息并退出。选项以单个列表的形式呈现。
-
--debug=*debug_options*,-# *debug_options*命令行格式 --debug[=debug_options]类型 字符串 默认值 d:t:o,/tmp/myisamchk.trace写入调试日志。典型的*
debug_options*字符串是d:t:o,*file_name*。默认值为d:t:o,/tmp/myisamchk.trace。此选项仅在使用
WITH_DEBUG构建 MySQL 时可用。由 Oracle 提供的 MySQL 发布二进制文件不使用此选项构建。 -
--defaults-extra-file=*file_name*命令行格式 --defaults-extra-file=file_name类型 文件名 在全局选项文件之后但(在 Unix 上)在用户选项文件之前读取此选项文件。如果文件不存在或无法访问,将会出现错误。如果*
file_name*不是绝对路径名,则将其解释为相对于当前目录。有关此及其他选项文件选项的附加信息,请参阅第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
--defaults-file=*file_name*命令行格式 --defaults-file=file_name类型 文件名 仅使用给定的选项文件。如果文件不存在或无法访问,将会出现错误。如果*
file_name*不是绝对路径名,则将其解释为相对于当前目录。有关此及其他选项文件选项的附加信息,请参阅第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
--defaults-group-suffix=*str*命令行格式 --defaults-group-suffix=str类型 字符串 不仅读取通常的选项组,还读取具有通常名称和后缀*
str*的组。例如,myisamchk通常会读取[myisamchk]组。如果将此选项指定为--defaults-group-suffix=_other,myisamchk还会读取[myisamchk_other]组。有关此选项和其他选项文件选项的其他信息,请参阅第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
--no-defaults命令行格式 --no-defaults不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,则可以使用
--no-defaults来防止读取它们。例外情况是,如果存在
.mylogin.cnf文件,则在所有情况下都会读取该文件。即使使用--no-defaults,也可以以比在命令行上更安全的方式指定密码。要创建.mylogin.cnf,请使用mysql_config_editor实用程序。请参阅第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项和其他选项文件选项的其他信息,请参阅第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
--print-defaults命令行格式 --print-defaults打印���序名称和从选项文件获取的所有选项。
有关此选项和其他选项文件选项的其他信息,请参阅第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
--silent,-s命令行格式 --silent静默模式。仅在发生错误时才写入输出。您可以两次使用
-s(-ss)使myisamchk非常安静。 -
--verbose,-v命令行格式 --verbose详细模式。打印程序执行的更多信息。可以与
-d和-e一起使用。多次使用-v(-vv,-vvv)以获得更多输出。 -
--version,-V命令行格式 --version显示版本信息并退出。
-
--wait,-w命令行格式 --wait类型 布尔值 默认值 false在表被锁定时不会终止,而是等待表解锁后继续。如果你正在运行mysqld并禁用外部锁定,那么表只能被另一个myisamchk命令锁定。
你也可以使用--*var_name*=*value*语法设置以下变量:
| 变量 | 默认值 |
|---|---|
decode_bits | 9 |
ft_max_word_len | 版本相关 |
ft_min_word_len | 4 |
ft_stopword_file | 内置列表 |
key_buffer_size | 523264 |
myisam_block_size | 1024 |
myisam_sort_key_blocks | 16 |
read_buffer_size | 262136 |
sort_buffer_size | 2097144 |
sort_key_blocks | 16 |
stats_method | nulls_unequal |
write_buffer_size | 262136 |
| 变量 | 默认值 |
可以使用myisamchk --help查看可能的myisamchk变量及其默认值:
当通过排序键修复键时,会使用myisam_sort_buffer_size,这是在使用--recover时的正常情况。sort_buffer_size是myisam_sort_buffer_size的弃用同义词。
当你使用--extend-check检查表或通过逐行将键插入表中修复键时(例如进行正常插入时),会使用key_buffer_size。通过键缓冲区进行修复在以下情况下使用:
-
你使用
--safe-recover。 -
为了对键进行排序所需的临时文件大小会比直接创建键文件时大两倍以上。当你有大型键值的
CHAR、VARCHAR或TEXT列时,通常会出现这种情况,因为排序操作需要在进行过程中存储完整的键值。如果你有大量临时空间,并且可以强制myisamchk通过排序来修复,你可以使用--sort-recover选项。
通过键缓冲区进行修复比使用排序需要的磁盘空间少得多,但速度也慢得多。
如果您想要更快的修复,请将key_buffer_size和myisam_sort_buffer_size变量设置为可用内存的约 25%。您可以将这两个变量都设置为较大的值,因为一次只使用其中一个。
myisam_block_size是用于索引块的大小。
stats_method影响在给定--analyze选项时如何处理NULL值以进行索引统计收集。它的作用类似于myisam_stats_method系统变量。有关更多信息,请参阅第 7.1.8 节,“服务器系统变量”中myisam_stats_method的描述,以及第 10.3.8 节,“InnoDB 和 MyISAM 索引统计收集”。
ft_min_word_len和ft_max_word_len表示MyISAM表上FULLTEXT索引的最小和最大单词长度。ft_stopword_file指定停用词文件。这些需要在以下情况下设置。
如果您使用myisamchk执行修改表索引的操作(如修复或分析),则FULLTEXT索引将使用默认的全文参数值进行重建,除非您另有指定。否则可能导致查询失败。
问题出现在这些参数只有服务器知道。它们不存储在MyISAM索引文件中。如果您在服务器中修改了最小或最大单词长度或停用词文件以避免问题,请为myisamchk指定与您用于mysqld相同的ft_min_word_len、ft_max_word_len和ft_stopword_file值。例如,如果您将最小单词长度设置为 3,您可以像这样使用myisamchk修复表:
myisamchk --recover --ft_min_word_len=3 *tbl_name*.MYI
为了确保myisamchk和服务器使用相同的全文参数值,您可以将每个值放在选项文件的[mysqld]和[myisamchk]部分中:
[mysqld]
ft_min_word_len=3
[myisamchk]
ft_min_word_len=3
使用REPAIR TABLE、ANALYZE TABLE、OPTIMIZE TABLE或ALTER TABLE是使用myisamchk的替代方法。这些语句由服务器执行,服务器知道要使用的正确全文参数值。
原文:
dev.mysql.com/doc/refman/8.0/en/myisamchk-check-options.html
6.6.4.2 myisamchk 检查选项
myisamchk支持以下选项用于表检查操作:
-
--check,-c命令行格式 --check检查表中的错误。如果未明确指定选择操作类型的选项,则这是默认操作。
-
--check-only-changed,-C命令行格式 --check-only-changed仅检查自上次检查以来发生更改的表。
-
--extend-check,-e命令行格式 --extend-check非常彻底地检查表。如果表具有许多索引,则这将非常慢。此选项仅应在极端情况下使用。通常情况下,myisamchk或myisamchk --medium-check应该能够确定表中是否存在任何错误。
如果您使用
--extend-check并且有足够的内存,将key_buffer_size变量设置为较大的值可以帮助修复操作运行更快。也请参阅表修复选项下此选项的描述。
有关输出格式的描述,请参阅第 6.6.4.5 节,“使用 myisamchk 获取表信息”。
-
--fast,-F命令行格式 --fast仅检查未正确关闭的表。
-
--force,-f命令行格式 --force如果myisamchk在表中发现任何错误,则自动执行修复操作。修复类型与使用
--recover或-r选项指定的相同。 -
--information,-i命令行格式 --information打印有关所检查表的信息统计。
-
--medium-check,-m命令行格式 --medium-check进行比
--extend-check操作更快的检查。这只能找到 99.99%的所有错误,在大多数情况下应该足够好。 -
--read-only,-T命令行格式 --read-only不要将表标记为已检查。如果您使用myisamchk来检查正在被某些不使用锁定的其他应用程序使用的表,比如当mysqld在外部锁定禁用时运行时,这将非常有用。
-
--update-state,-U命令行格式 --update-state将信息存储在
.MYI文件中,以指示表何时被检查以及表是否崩溃。这应该用于充分利用--check-only-changed选项的好处,但如果mysqld服务器正在使用该表并且您正在禁用外部锁定运行它,则不应使用此选项。
原文:
dev.mysql.com/doc/refman/8.0/en/myisamchk-repair-options.html
6.6.4.3 myisamchk 修复选项
myisamchk支持以下选项用于表修复操作(在给定诸如--recover或--safe-recover之类的选项时执行的操作):
-
--backup,-B命令行格式 --backup将
.MYD文件备份为*file_name*-*time*.BAK -
--character-sets-dir=*dir_name*命令行格式 --character-sets-dir=path类型 字符串 默认值 [none]安装字符集的目录。请参见第 12.15 节,“字符集配置”。
-
--correct-checksum命令行格式 --correct-checksum为表正确校验和信息。
-
--data-file-length=*len*,-D *len*命令行格式 --data-file-length=len类型 数值 数据文件的最大长度(当重新创建数据文件时,当其“满”时)。
-
--extend-check,-e命令行格式 --extend-check进行尝试从数据文件中恢复每一行的修复。通常,这也会找到很多垃圾行。除非你绝望,否则不要使用此选项。
另请参阅表检查选项下此选项的描述。
对于输出格式的描述,请参见第 6.6.4.5 节,“使用 myisamchk 获取表信息”。
-
--force,-f命令行格式 --force覆盖旧的中间文件(文件名类似
*tbl_name*.TMD)而不是中止。 -
--keys-used=*val*,-k *val*命令行格式 --keys-used=val类型 数值 对于myisamchk,选项值是一个比特值,指示要更新哪些索引。选项值的每个二进制比特对应一个表索引,其中第一个索引是比特 0。选项值为 0 会禁用对所有索引的更新,这可以用于加快插入速度。通过使用myisamchk -r可以重新激活停用的索引。
-
--max-record-length=*len*命令行格式 --max-record-length=len类型 数值 如果myisamchk无法分配内存来保存大于给定长度的行,则跳过这些行。
-
--parallel-recover,-p命令行格式 --parallel-recover注意
此选项在 MySQL 8.0.28 中已弃用,并在 MySQL 8.0.30 中移除。
使用与
-r和-n相同的技术,但并行创建所有键,使用不同的线程。这是测试质量的代码。使用需谨慎! -
--quick,-q命令行格式 --quick通过仅修改索引文件而不是数据文件来实现更快的修复。您可以两次指定此选项,以强制myisamchk在出现重复键的情况下修改原始数据文件。
-
--recover,-r命令行格式 --recover进行修复,几乎可以解决除非唯一键不唯一(这是
MyISAM表极不可能出现的错误)之外的任何问题。如果要恢复表格,这是首选尝试的选项。只有在myisamchk报告无法使用--recover恢复表格时,才应尝试--safe-recover。(在极少数情况下,如果--recover失败,数据文件仍然完好无损。)如果您有大量内存,应增加
myisam_sort_buffer_size的值。 -
--safe-recover,-o命令行格式 --safe-recover使用一种旧的恢复方法进行修复,该方法按顺序读取所有行并根据找到的行更新所有索引树。这比
--recover慢一个数量级,但可以处理一些极不可能的情况,而--recover无法处理。此恢复方法还比--recover使用的磁盘空间少得多。通常,您应该首先使用--recover进行修复,然后仅在--recover失败时才使用--safe-recover。如果您有大量内存,应增加
key_buffer_size的值。 -
--set-collation=*name*命令行格式 --set-collation=name类型 字符串 指定用于对表索引进行排序的校对规则。字符集名称由校对规则名称的第一部分隐含确定。
-
--sort-recover,-n命令行格式 --sort-recover强制myisamchk 使用排序来解决键的问题,即使临时文件非常大。
-
--tmpdir=*dir_name*,-t *dir_name*命令行格式 --tmpdir=dir_name类型 目录名称 用于存储临时文件的目录路径。如果未设置,myisamchk 将使用
TMPDIR环境变量的值。--tmpdir可以设置为一个目录路径列表,这些目录路径将循环使用以创建临时文件。在 Unix 上目录名称之间的分隔符是冒号(:),在 Windows 上是分号(;)。 -
--unpack,-u命令行格式 --unpack解压使用myisampack 打包的表。