MySQL8-中文参考-六-

MySQL8 中文参考(六)

原文:docs.oracle.com/javase/tutorial/reallybigindex.html

6.5.5 mysqlimport — A Data Import Program

原文:dev.mysql.com/doc/refman/8.0/en/mysqlimport.html

mysqlimport客户端提供了一个命令行界面,用于LOAD DATA SQL 语句。大多数mysqlimport的选项直接对应于LOAD DATA语法的子句。请参阅 Section 15.2.9, “LOAD DATA Statement”。

调用mysqlimport的方法如下:

mysqlimport [*options*] *db_name* *textfile1* [*textfile2* ...]

对于命令行中命名的每个文本文件,mysqlimport会剥去文件名的任何扩展名,并使用结果确定将文件内容导入的表的名称。例如,名为patient.txtpatient.textpatient的文件都将导入到名为patient的表中。

mysqlimport支持以下选项,可以在命令行或选项文件的[mysqlimport][client]组中指定。有关 MySQL 程序使用的选项文件的信息,请参见 Section 6.2.2.2, “Using Option Files”。

表 6.16 mysqlimport 选项

选项名称 描述 引入 废弃
--bind-address 使用指定的网络接口连接到 MySQL 服务器
--character-sets-dir 字符集所在目录
--columns 此选项以逗号分隔的列名列表作为其值
--compress 压缩客户端和服务器之间发送的所有信息 8.0.18
--compression-algorithms 允许连接到服务器的压缩算法 8.0.18
--debug 写入调试日志
--debug-check 在程序退出时打印调试信息
--debug-info 在程序退出时打印调试信息、内存和 CPU 统计信息
--default-auth 要使用的认证插件
--default-character-set 指定默认字符集
--defaults-extra-file 除了通常的选项文件外,还读取命名的选项文件
--defaults-file 仅读取命名的选项文件
--defaults-group-suffix 选项组后缀值
--delete 导入文本文件之前清空表
--enable-cleartext-plugin 启用明文认证插件
--fields-enclosed-by 此选项与 LOAD DATA 的相应子句具有相同的含义
--fields-escaped-by 此选项与 LOAD DATA 的相应子句具有相同的含义
--fields-optionally-enclosed-by 此选项与 LOAD DATA 的相应子句具有相同的含义
--fields-terminated-by 此选项与 LOAD DATA 的相应子句具有相同的含义
--force 即使发生 SQL 错误也继续
--get-server-public-key 从服务器请求 RSA 公钥
--help 显示帮助信息并退出
--host MySQL 服务器所在的主机
--ignore 参见--replace 选项的描述
--ignore-lines 忽略数据文件的前 N 行
--lines-terminated-by 此选项与 LOAD DATA 的相应子句具有相同的含义
--local 从客户端主机本地读取输入文件
--lock-tables 在处理任何文本文件之前锁定所有表以进行写入
--login-path 从.mylogin.cnf 中读取登录路径选项
--low-priority 在加载表时使用 LOW_PRIORITY
--no-defaults 不读取任何选项文件
--password 连接到服务器时要使用的密码
--password1 连接到服务器时要使用的第一个多因素认证密码 8.0.27
--password2 连接到服务器时要使用的第二个多因素身份验证密码 8.0.27
--password3 连接到服务器时要使用的第三个多因素身份验证密码 8.0.27
--pipe 使用命名管道连接到服务器(仅限 Windows)
--plugin-dir 安装插件的目录
--port 连接的 TCP/IP 端口号
--print-defaults 打印默认选项
--protocol 要使用的传输协议
--replace --replace 和 --ignore 选项控制对重复现有行的处理
--server-public-key-path 包含 RSA 公钥的文件路径名
--shared-memory-base-name 共享内存连接的共享内存名称(仅限 Windows)
--silent 仅在发生错误时产生输出
--socket 要使用的 Unix 套接字文件或 Windows 命名管道
--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 协议
--use-threads 并行文件加载的线程数
--user 连接到服务器时要使用的 MySQL 用户名
--verbose 详细模式
--version 显示版本信息并退出
--zstd-compression-level 使用 zstd 压缩连接到服务器的压缩级别 8.0.18
选项名称 描述 引入版本 已弃用
  • --help, -?

    命令行格式 --help

    显示帮助信息并退出。

  • --bind-address=*ip_address*

    命令行格式 --bind-address=ip_address

    在具有多个网络接口的计算机上,使用此选项选择连接到 MySQL 服务器的接口。

  • --character-sets-dir=*dir_name*

    命令行格式 --character-sets-dir=path
    类型 字符串
    默认值 [none]

    安装字符集的目录。参见 第 12.15 节,“字符集配置”。

  • --columns=*column_list*, -c *column_list*

    命令行格式 --columns=column_list

    此选项以逗号分隔的列名列表作为其值。列名的顺序表示如何将数据文件列与表列匹配。

  • --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 中添加的。

  • --debug[=*debug_options*], -# [*debug_options*]

    命令行格式 --debug[=debug_options]
    类型 字符串
    默认值 d:t:o

    写入调试日志。典型的 debug_options 字符串是 d:t:o,*file_name*。默认值为 d:t:o

    只有在使用 WITH_DEBUG 构建 MySQL 时才可用。由 Oracle 提供的 MySQL 发行版二进制文件 使用此选项构建。

  • --debug-check

    命令行格式 --debug-check
    类型 布尔值
    默认值 FALSE

    在程序退出时打印一些调试信息。

    只有在使用 WITH_DEBUG 构建 MySQL 时才可用。由 Oracle 提供的 MySQL 发行版二进制文件 使用此选项构建。

  • --debug-info

    命令行格式 --debug-info
    类型 布尔值
    默认值 FALSE

    在程序退出时打印调试信息和内存和 CPU 使用统计信息。

    只有在使用 WITH_DEBUG 构建 MySQL 时才可用。由 Oracle 提供的 MySQL 发行版二进制文件 使用此选项构建。

  • --default-character-set=*charset_name*

    命令行格式 --default-character-set=charset_name
    类型 字符串

    charset_name 用作默认字符集。请参见 第 12.15 节,“字符集配置”。

  • --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的组。例如,mysqlimport通常会读取[client][mysqlimport]组。如果给定此选项作为--defaults-group-suffix=_othermysqlimport还会读取[client_other][mysqlimport_other]组。

    有关此选项文件和其他选项文件选项的附加信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。

  • --delete, -D

    命令行格式 --delete

    清空表格后再导入文本文件。

  • --enable-cleartext-plugin

    命令行格式 --enable-cleartext-plugin
    类型 布尔值
    默认值 FALSE

    启用mysql_clear_password明文认证插件。(参见第 8.4.1.4 节,“客户端明文插件认证”。)

  • --fields-terminated-by=..., --fields-enclosed-by=..., --fields-optionally-enclosed-by=..., --fields-escaped-by=...

    命令行格式 --fields-terminated-by=string
    类型 字符串
    命令行格式 --fields-enclosed-by=string
    类型 字符串
    命令行格式 --fields-optionally-enclosed-by=string
    类型 字符串
    命令行格式 --fields-escaped-by
    类型 字符串

    这些选项的含义与LOAD DATA的相应子句相同。请参阅第 15.2.9 节,“LOAD DATA Statement”。

  • --force, -f

    命令行格式 --force

    忽略错误。例如,如果文本文件的表不存在,则继续处理任何剩余文件。如果表不存在,则没有--forcemysqlimport会退出。

  • --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插件的信息,请参阅第 8.4.1.2 节,“Caching SHA-2 Pluggable Authentication”。

  • --host=*host_name*, -h *host_name*

    命令行格式 --host=host_name
    类型 字符串
    默认值 localhost

    将数据导入到给定主机上的 MySQL 服务器。默认主机是localhost

  • --ignore, -i

    命令行格式 --ignore

    请参阅--replace选项的描述。

  • --ignore-lines=*N*

    命令行格式 --ignore-lines=#
    类型 数字

    忽略数据文件的第一个N行。

  • --lines-terminated-by=...

    命令行格式 --lines-terminated-by=string
    类型 字符串

    此选项与LOAD DATA的相应子句具有相同的含义。例如,要导入以回车/换行对终止的 Windows 文件,请使用--lines-terminated-by="\r\n"。(根据您的命令解释器的转义约定,您可能需要双反斜杠。)请参见第 15.2.9 节,“LOAD DATA 语句”。

  • --local, -L

    命令行格式 --local
    类型 布尔值
    默认值 FALSE

    默认情况下,文件由服务器在服务器主机上读取。使用此选项,mysqlimport在客户端主机上本地读取输入文件。

    mysqlimport中成功使用LOCAL加载操作还需要服务器允许本地加载;请参见第 8.1.6 节,“LOAD DATA LOCAL 的安全注意事项”

  • --lock-tables, -l

    命令行格式 --lock-tables

    在处理任何文本文件之前,将所有表锁定为写入状态。这确保所有表在服务器上同步。

  • --login-path=*name*

    命令行格式 --login-path=name
    类型 字符串

    .mylogin.cnf登录路径文件中的命名登录路径读取选项。 “登录路径”是一个包含指定要连接到哪个 MySQL 服务器以及要作为哪个帐户进行身份验证的选项的选项组。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参见第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。

    有关此选项文件和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。

  • --low-priority

    命令行格式 --low-priority

    在加载表时使用LOW_PRIORITY。这仅影响仅使用表级锁定的存储引擎(如MyISAMMEMORYMERGE)。

  • --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 节,“影响选项文件处理的命令行选项”。

  • --password[=*password*], -p[*password*]

    命令行格式 --password[=password]
    类型 字符串

    用于连接到服务器的 MySQL 帐户的密码。密码值是可选的。如果未提供,mysqlimport会提示输入密码。如果提供,--password=-p后面必须没有空格。如果未指定密码选项,则默认情况下不发送密码。

    在命令行上指定密码应被视为不安全。为了避免在命令行上提供密码,请使用选项文件。参见第 8.1.2.1 节,“密码安全的最终用户指南”。

    要明确指定没有密码,并且mysqlimport不应提示输入密码,请使用--skip-password选项。

  • --password1[=*pass_val*]

    用于连接到服务器的 MySQL 帐户的多因素认证因素 1 的密码。密码值是可选的。如果未提供,mysqlimport会提示输入密码。如果提供,--password1=后面必须没有空格。如果未指定密码选项,则默认情况下不发送密码。

    在命令行上指定密码应被视为不安全。为了避免在命令行上提供密码,请使用选项文件。参见第 8.1.2.1 节,“密码安全的最终用户指南”。

    要明确指定没有密码,并且mysqlimport不应提示输入密码,请使用--skip-password1选项。

    --password1--password是同义词,--skip-password1--skip-password也是同义词。

  • --password2[=*pass_val*]

    用于连接到服务器的 MySQL 帐户的多因素认证因子 2 的密码。此选项的语义类似于--password1的语义;有关详细信息,请参阅该选项的描述。

  • --password3[=*pass_val*]

    用于连接到服务器的 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选项指定身份验证插件但mysqlimport找不到它,则指定此选项。参见第 8.2.17 节,“可插拔认证”。

  • --port=*port_num*, -P *port_num*

    命令行格式 --port=port_num
    类型 数字
    默认值 3306

    对于 TCP/IP 连接,要使用的端口号。

  • --print-defaults

    命令行格式 --print-defaults

    打印程序名称以及从选项文件中获取的所有选项。

    有关此选项和其他选项文件选项的其他信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。

  • --protocol={TCP|SOCKET|PIPE|MEMORY}

    命令行格式 --protocol=type
    类型 字符串
    默认值 [查看文本]
    有效值 TCP``SOCKET``PIPE``MEMORY

    用于连接到服务器的传输协议。当其他连接参数通常导致使用不希望使用的协议时,此选项很有用。有关允许的值的详细信息,请参见第 6.2.7 节,“连接传输协议”。

  • --replace-r

    命令行格式 --replace

    --replace--ignore选项控制处理具有唯一键值的输入行重复现有行的方式。如果指定--replace,则新行将替换具有相同唯一键值的现有行。如果指定--ignore,则将跳过具有唯一键值上存在的现有行的输入行。如果两个选项都未指定,则在发现重复键值时会发生错误,并且将忽略文本文件的其余部分。

  • --server-public-key-path=*file_name*

    命令行格式 --server-public-key-path=file_name
    类型 文件名

    PEM 格式文件的路径名,其中包含服务器所需的用于 RSA 密钥对密码交换的客户端端公钥的副本。此选项适用于使用sha256_passwordcaching_sha2_password认证插件进行身份验证的客户端。对于不使用这些插件进行身份验证的帐户,此选项将被忽略。如果不使用基于 RSA 的密码交换,例如客户端使用安全连接连接到服务器时,此选项也将被忽略。

    如果给定--server-public-key-path=*file_name*并指定有效的公钥文件,则它将优先于--get-server-public-key

    对于sha256_password,只有当 MySQL 使用 OpenSSL 构建时,此选项才适用。

    有关sha256_passwordcaching_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 组的成员。

  • --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设置为ONSTRICT会导致客户端在启动时产生警告并在非 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 帐户的用户名。

  • --use-threads=*N*

    命令行格式 --use-threads=#
    类型 数字

    并行加载文件,使用N个线程。

  • --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 中添加的。

这是一个演示如何使用mysqlimport的示例会话:

$> mysql -e 'CREATE TABLE imptest(id INT, n VARCHAR(30))' test
$> ed
a
100     Max Sydow
101     Count Dracula
.
w imptest.txt
32
q
$> od -c imptest.txt
0000000   1   0   0  \t   M   a   x       S   y   d   o   w  \n   1   0
0000020   1  \t   C   o   u   n   t       D   r   a   c   u   l   a  \n
0000040
$> mysqlimport --local test imptest.txt
test.imptest: Records: 2  Deleted: 0  Skipped: 0  Warnings: 0
$> mysql -e 'SELECT * FROM imptest' test
+------+---------------+
| id   | n             |
+------+---------------+
|  100 | Max Sydow     |
|  101 | Count Dracula |
+------+---------------+

6.5.6 mysqlpump — 一个数据库备份程序

原文:dev.mysql.com/doc/refman/8.0/en/mysqlpump.html

  • mysqlpump 调用语法

  • mysqlpump 选项摘要

  • mysqlpump 选项描述

  • mysqlpump 对象选择

  • mysqlpump 并行处理

  • mysqlpump 限制

mysqlpump客户端实用程序执行逻辑备份,生成一组可以执行的 SQL 语句,以重现原始数据库对象定义和表数据。它为备份或传输到另一个 SQL 服务器转储一个或多个 MySQL 数据库。

注意

mysqlpump在 MySQL 8.0.34 中已弃用;预计将在未来的 MySQL 版本中删除。您可以使用 MySQL 程序,如mysqldump和 MySQL Shell 来执行逻辑备份、转储数据库和类似任务。

提示

考虑使用 MySQL Shell 转储实用程序,提供多线程并行转储、文件压缩和进度信息显示,以及云功能,如 Oracle Cloud Infrastructure Object Storage 流式传输和 MySQL HeatWave Service 兼容性检查和修改。转储可以轻松导入到 MySQL 服务器实例或 MySQL HeatWave Service DB 系统中,使用 MySQL Shell 加载转储实用程序。MySQL Shell 的安装说明可以在这里找到。

mysqlpump的功能包括:

  • 并行处理数据库和数据库内的对象,以加快转储过程

  • 更好地控制要转储的数据库和数据库对象(表、存储过程、用户帐户)

  • 转储用户帐户作为帐户管理语句(CREATE USERGRANT),而不是作为插入到mysql系统数据库中

  • 创建压缩输出的能力

  • 进度指示器(值为估计值)

  • 对于通过在插入行后添加索引来加快InnoDB表的辅助索引创建的转储文件重新加载

注意

mysqlpump 使用了 MySQL 5.7 中引入的功能,因此假定与 MySQL 5.7 或更高版本一起使用。

mysqlpump 至少需要对被转储表具有 SELECT 权限,对被转储视图具有 SHOW VIEW 权限,对被转储触发器具有 TRIGGER 权限,如果未使用 --single-transaction 选项,则需要 LOCK TABLES 权限。需要对 mysql 系统数据库具有 SELECT 权限以转储用户定义。某些选项可能需要其他权限,如选项描述中所述。

要重新加载转储文件,您必须具有执行其中包含的语句所需的权限,例如这些语句创建的对象所需的适当 CREATE 权限。

注意

在 Windows 上使用 PowerShell 进行输出重定向创建的转储文件具有 UTF-16 编码:

mysqlpump [options] > dump.sql

但是,不允许使用 UTF-16 作为连接字符集(请参阅 第 12.4 节,“连接字符集和校对规则”),因此无法正确加载转储文件。要解决此问题,请使用 --result-file 选项,以 ASCII 格式创建输出:

mysqlpump [options] --result-file=dump.sql

mysqlpump 调用语法

默认情况下,mysqlpump 转储所有数据库(在 mysqlpump 限制 中有特定例外)。要明确指定此行为,请使用 --all-databases 选项:

mysqlpump --all-databases

要转储单个数据库或该数据库中的某些表,请在命令行上命名数据库,可选地跟随表名:

mysqlpump *db_name*
mysqlpump *db_name tbl_name1 tbl_name2 ...*

要将所有名称参数视为数据库名称,请使用 --databases 选项:

mysqlpump --databases *db_name1 db_name2* ...

默认情况下,mysqlpump 不会转储用户帐户定义,即使您转储包含授权表的 mysql 系统数据库。要以逻辑定义的形式转储授权表内容,如 CREATE USERGRANT 语句,使用 --users 选项并禁止所有数据库转储:

mysqlpump --exclude-databases=% --users

在上述命令中,% 是一个通配符,用于匹配所有数据库名称以供 --exclude-databases 选项使用。

mysqlpump 支持几个选项,用于包括或排除数据库、表、存储程序和用户定义。请参阅 mysqlpump 对象选择。

要重新加载转储文件,请执行其中包含的语句。例如,使用 mysql 客户端:

mysqlpump [options] > dump.sql
mysql < dump.sql

以下讨论提供了额外的 mysqlpump 使用示例。

要查看 mysqlpump 支持的选项列表,请发出命令 mysqlpump --help

mysqlpump 选项摘要

mysqlpump 支持以下选项,可以在命令行或选项文件的 [mysqlpump][client] 组中指定。(在 MySQL 8.0.20 之前,mysqlpump 读取 [mysql_dump] 组而不是 [mysqlpump]。从 8.0.20 开始,仍然接受 [mysql_dump] 但已被弃用。)有关 MySQL 程序使用的选项文件的信息,请参见 6.2.2.2 使用选项文件。

表 6.17 mysqlpump 选项

选项名称 描述 引入版本 废弃版本
--add-drop-database 在每个 CREATE DATABASE 语句之前添加 DROP DATABASE 语句
--add-drop-table 在每个 CREATE TABLE 语句之前添加 DROP TABLE 语句
--add-drop-user 在每个 CREATE USER 语句之前添加 DROP USER 语句
--add-locks 在每个表转储周围加上 LOCK TABLES 和 UNLOCK TABLES 语句
--all-databases 转储所有数据库
--bind-address 使用指定的网络接口连接到 MySQL 服务器
--character-sets-dir 安装字符集的目录
--column-statistics 写入 ANALYZE TABLE 语句以生成统计直方图
--complete-insert 使用包括列名的完整 INSERT 语句
--compress 压缩客户端和服务器之间发送的所有信息 8.0.18
--compress-output 输出压缩算法
--compression-algorithms 允许连接到服务器的压缩算法 8.0.18
--databases 将所有名称参数解释为数据库名称
--debug 写入调试日志
--debug-check 在程序退出时打印调试信息
--debug-info 在程序退出时打印调试信息、内存和 CPU 统计信息
--default-auth 要使用的认证插件
--default-character-set 指定默认字符集
--default-parallelism 并行处理的默认线程数
--defaults-extra-file 除了通常的选项文件外,还读取指定的选项文件
--defaults-file 仅读取指定的选项文件
--defaults-group-suffix 选项组后缀值
--defer-table-indexes 重新加载时,推迟索引创建,直到加载表行后
--events 从转储的数据库中转储事件
--exclude-databases 从转储中排除的数据库
--exclude-events 从转储中排除的事件
--exclude-routines 从转储中排除的例程
--exclude-tables 从转储中排除的表
--exclude-triggers 从转储中排除的触发器
--exclude-users 从转储中排除的用户
--extended-insert 使用多行 INSERT 语法
--get-server-public-key 从服务器请求 RSA 公钥
--help 显示帮助消息并退出
--hex-blob 使用十六进制表示法转储二进制列
--host MySQL 服务器所在的主机
--include-databases 转储中包含的数据库
--include-events 转储中要包含的事件
--include-routines 转储中要包含的例程
--include-tables 转储中要包含的表
--include-triggers 转储中要包含的触发器
--include-users 转储中要包含的用户
--insert-ignore 写入 INSERT IGNORE 而不是 INSERT 语句
--log-error-file 将警告和错误追加到指定文件
--login-path 从.mylogin.cnf 中读取登录路径选项
--max-allowed-packet 发送到服务器或从服务器接收的最大数据包长度
--net-buffer-length TCP/IP 和套接字通信的缓冲区大小
--no-create-db 不写入 CREATE DATABASE 语句
--no-create-info 不写入重新创建每个转储表的 CREATE TABLE 语句
--no-defaults 不读取任何选项文件
--parallel-schemas 指定模式处理的并行性
--password 连接到服务器时要使用的密码
--password1 连接到服务器时要使用的第一个多因素身份验证密码 8.0.27
--password2 连接到服务器时要使用的第二个多因素身份验证密码 8.0.27
--password3 连接到服务器时要使用的第三个多因素身份验证密码 8.0.27
--plugin-dir 安装插件的目录
--port 连接的 TCP/IP 端口号
--print-defaults 打印默认选项
--protocol 要使用的传输协议
--replace 写入 REPLACE 语句而不是 INSERT 语句
--result-file 直接输出到指定文件
--routines 从转储的数据库中转储存储例程(过程和函数)
--server-public-key-path 包含 RSA 公钥的文件路径名
--set-charset 将 SET NAMES default_character_set 添加到输出
--set-gtid-purged 是否将 SET @@GLOBAL.GTID_PURGED 添加到输出
--single-transaction 在单个事务中转储表
--skip-definer 从视图和存储程序 CREATE 语句中省略 DEFINER 和 SQL SECURITY 子句
--skip-dump-rows 不转储表行
--skip-generated-invisible-primary-key 不转储生成的不可见主键的信息 8.0.30
--socket 要使用的 Unix 套接字文件或 Windows 命名管道
--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 协议
--triggers 为每个转储表转储触发器
--tz-utc 将 SET TIME_ZONE='+00:00' 添加到转储文件
--user 连接到服务器时要使用的 MySQL 用户名
--用户 转储用户账户
--version 显示版本信息并退出
--watch-progress 显示进度指示器
--zstd-compression-level 用于使用 zstd 压缩的服务器连接的压缩级别 8.0.18
选项名称 描述 引入 废弃

mysqlpump 选项描述

  • --help-?

    命令行格式 --help

    显示帮助信息并退出。

  • --add-drop-database

    命令行格式 --add-drop-database

    在每个 CREATE DATABASE 语句之前写一个 DROP DATABASE 语句。

    注意

    在 MySQL 8.0 中,mysql 模式被视为系统模式,不能被最终用户删除。如果与 --all-databases--databases 一起使用 --add-drop-database,其中要转储的模式列表包括 mysql,则转储文件包含一个导致重新加载转储文件时出错的 DROP DATABASE mysql`` 语句。

    相反,要使用 --add-drop-database,请使用 --databases 与要转储的模式列表,其中列表不包括 mysql

  • --add-drop-table

    命令行格式 --add-drop-table

    在每个 CREATE TABLE 语句之前写一个 DROP TABLE 语句。

  • --add-drop-user

    命令行格式 --add-drop-user

    在每个 CREATE USER 语句之前写一个 DROP USER 语句。

  • --add-locks

    命令行格式 --add-locks

    将每个表转储用 LOCK TABLESUNLOCK TABLES 语句包围起来。这样在重新加载转储文件时插入速度更快。参见 Section 10.2.5.1, “Optimizing INSERT Statements”。

    该选项与并行性不兼容,因为来自不同表的 INSERT 语句可能会交错,并且在一个表的插入结束后跟随的 UNLOCK TABLES 可能会释放仍然存在插入的表上的锁。

    --add-locks--single-transaction 是互斥的。

  • --all-databases, -A

    命令行格式 --all-databases

    转储所有数据库(有一些例外情况,请参阅 mysqlpump 限制)。如果没有明确指定其他行为,则这是默认行为。

    --all-databases--databases 是互斥的。

    注意

    有关该选项与 --all-databases 不兼容的信息,请参阅 --add-drop-database 描述。

    在 MySQL 8.0 之前,使用 --all-databases 选项时,mysqldumpmysqlpump--routines--events 选项不需要包括存储过程和事件的定义:转储包括 mysql 系统数据库,因此也包括包含存储过程和事件定义的 mysql.procmysql.event 表。从 MySQL 8.0 开始,不再使用 mysql.eventmysql.proc 表。相应对象的定义存储在数据字典表中,但这些表不会被转储。要在使用 --all-databases 进行转储时包括存储过程和事件,请明确使用 --routines--events 选项。

  • --bind-address=*ip_address*

    命令行格式 --bind-address=ip_address

    在具有多个网络接口的计算机上,使用此选项选择连接到 MySQL 服务器的接口。

  • --character-sets-dir=*path*

    命令行格式 --character-sets-dir=dir_name
    类型 目录名称

    安装字符集的目录。请参阅 第 12.15 节,“字符集配置”。

  • --column-statistics

    命令行格式 --column-statistics
    类型 布尔
    默认值 OFF

    在重新加载转储文件时,向输出中添加ANALYZE TABLE语句,为转储表生成直方图统计信息。默认情况下,此选项已禁用,因为为大型表生成直方图可能需要很长时间。

  • --complete-insert

    命令行格式 --complete-insert

    编写包含列名的完整INSERT语句。

  • --compress, -C

    命令行格式 --compress[={OFF&#124;ON}]
    已弃用 8.0.18
    类型 布尔
    默认值 OFF

    如果可能,压缩客户端和服务器之间发送的所有信息。请参阅第 6.2.8 节,“连接压缩控制”。

    从 MySQL 8.0.18 开始,此选项已被弃用。预计在未来的 MySQL 版本中将其移除。请参阅配置传统连接压缩。

  • --compress-output=*algorithm*

    命令行格式 --compress-output=algorithm
    类型 枚举
    有效值 LZ4``ZLIB

    默认情况下,mysqlpump不会压缩输出。���选项指定使用指定算法进行输出压缩。允许的算法为LZ4ZLIB

    要解压缩压缩的输出,您必须拥有适当的实用程序。如果系统命令lz4openssl zlib不可用,MySQL 发行版包括可用于解压缩使用--compress-output=LZ4--compress-output=ZLIB选项压缩的mysqlpump输出的lz4_decompresszlib_decompress实用程序。有关更多信息,请参阅第 6.8.1 节,“lz4_decompress — 解压缩 mysqlpump LZ4 压缩输出”和第 6.8.3 节,“zlib_decompress — 解压缩 mysqlpump ZLIB 压缩输出”。

  • --compression-algorithms=*value*

    命令行格式 --compression-algorithms=value
    引入 8.0.18
    类型 设置
    默认值 uncompressed
    有效值 zlib``zstd``uncompressed

    用于与服务器连接的允许压缩算法。可用算法与protocol_compression_algorithms系统变量相同。默认值为uncompressed

    查看更多信息,请参阅第 6.2.8 节,“连接压缩控制”。

    此选项在 MySQL 8.0.18 中添加。

  • --databases-B

    命令行格式 --databases

    通常,mysqlpump将命令行上的第一个名称参数视为数据库名称,后续名称视为表名称。使用此选项,它将所有名称参数视为数据库名称。在每个新数据库之前,输出中包括CREATE DATABASE语句。

    --all-databases--databases是互斥的。

    注意

    有关该选项与--databases不兼容的信息,请参阅--add-drop-database描述。

  • --debug[=*debug_options*]-# [*debug_options*]

    命令行格式 --debug[=debug_options]
    类型 字符串
    默认值 d:t:O,/tmp/mysqlpump.trace

    写入调试日志。典型的debug_options字符串为d:t:o,*file_name*。默认值为d:t:O,/tmp/mysqlpump.trace

    仅当 MySQL 使用WITH_DEBUG构建时才可用。由 Oracle 提供的 MySQL 发布二进制文件使用此选项构建。

  • --debug-check

    命令行格式 --debug-check
    类型 布尔值
    默认值 FALSE

    在程序退出时打印一些调试信息。

    仅当 MySQL 使用WITH_DEBUG构建时才可用。由 Oracle 提供的 MySQL 发布二进制文件使用此选项构建。

  • --debug-info-T

    命令行格式 --debug-info
    类型 布尔值
    默认值 FALSE

    在程序退出时打印调试信息以及内存和 CPU 使用统计信息。

    仅当 MySQL 使用WITH_DEBUG构建时才可用。由 Oracle 提供的 MySQL 发布二进制文件使用此选项构建。

  • --default-auth=*plugin*

    命令行格式 --default-auth=plugin
    类型 字符串

    有关要使用的客户端端身份验证插件的提示。参见第 8.2.17 节,“可插拔认证”。

  • --default-character-set=*charset_name*

    命令行格式 --default-character-set=charset_name
    类型 字符串
    默认值 utf8

    charset_name作为默认字符集。参见第 12.15 节,“字符集配置”。如果未指定字符集,mysqlpump将使用utf8mb4

  • --default-parallelism=*N*

    命令行格式 --default-parallelism=N
    类型 整数
    默认值 2

    每个并行处理队列的默认线程数。默认值为 2。

    --parallel-schemas选项也会影响并行性,并可用于覆盖默认线程数。有关更多信息,请参见 mysqlpump 并行处理。

    使用--default-parallelism=0和没有--parallel-schemas选项时,mysqlpump将作为单线程进程运行,并不创建队列。

    启用并行性后,不同数据库的输出可能会交错。

  • --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的组。例如,mysqlpump通常会读取[client][mysqlpump]组。如果此选项给定为--defaults-group-suffix=_othermysqlpump还会读取[client_other][mysqlpump_other]组。

    有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。

  • --延迟表索引

    命令行格式 --defer-table-indexes
    类型 布尔
    默认值 TRUE

    在转储输出中,延迟为每个表创建索引,直到其行加载完毕。这适用于所有存储引擎,但对于InnoDB仅适用于二级索引。

    此选项默认启用;使用--skip-defer-table-indexes来禁用它。

  • --事件

    命令行格式 --events
    类型 布尔
    默认值 TRUE

    在输出中包含转储数据库中的事件调度器事件。事件转储需要这些数据库的EVENT权限。

    使用--事件生成的输出包含CREATE EVENT语句来创建事件。

    此选项默认启用;使用--skip-events来禁用它。

  • --排除数据库=*db_list*

    命令行格式 --exclude-databases=db_list
    类型 字符串

    不转储db_list中的数据库,其中db_list是一个或多个逗号分隔的数据库名称列表。此选项的多个实例是累加的。有关更多信息,请参见 mysqlpump 对象选择。

  • --排除事件=*event_list*

    命令行格式 --exclude-events=event_list
    类型 字符串

    不要转储event_list中的数据库,这是一个包含一个或多个逗号分隔的事件名称的列表。此选项的多个实例是累加的。有关更多信息,请参见 mysqlpump 对象选择。

  • --exclude-routines=*routine_list*

    命令行格式 --exclude-routines=routine_list
    类型 字符串

    不要转储routine_list中的事件,这是一个包含一个或多个逗号分隔的例程(存储过程或函数)名称的列表。此选项的多个实例是累加的。有关更多信息,请参见 mysqlpump 对象选择。

  • --exclude-tables=*table_list*

    命令行格式 --exclude-tables=table_list
    类型 字符串

    不要转储table_list中的表,这是一个包含一个或多个逗号分隔的表名称的列表。此选项的多个实例是累加的。有关更多信息,请参见 mysqlpump 对象选择。

  • --exclude-triggers=*trigger_list*

    命令行格式 --exclude-triggers=trigger_list
    类型 字符串

    不要转储trigger_list中的触发器,这是一个包含一个或多个逗号分隔的触发器名称的列表。此选项的多个实例是累加的。有关更多信息,请参见 mysqlpump 对象选择。

  • --exclude-users=*user_list*

    命令行格式 --exclude-users=user_list
    类型 字符串

    不要转储user_list中的用户账户,这是一个包含一个或多个逗号分隔的账户名称的列表。此选项的多个实例是累加的。有关更多信息,请参见 mysqlpump 对象选择。

  • --extended-insert=*N*

    命令行格式 --extended-insert=N

    使用包含多个VALUES列表的多行语法编写INSERT语句。这样可以产生较小的转储文件,并在重新加载文件时加快插入速度。

    选项值表示每个INSERT语句中要包含的行数。默认值为 250。值为 1 会产生每个表行一个INSERT语句。

  • --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插件的信息,请参阅第 8.4.1.2 节,“缓存 SHA-2 可插拔认证”。

  • --hex-blob

    命令行格式 --hex-blob

    使用十六进制表示法转储二进制列(例如,'abc'变为0x616263)。受影响的数据类型包括BINARYVARBINARYBLOB类型、BIT、所有空间数据类型以及其他非二进制数据类型(与binary字符集一起使用时)。

  • --host=*host_name*, -h *host_name*

    命令行格式 --host

    从给定主机上的 MySQL 服务器转储数据。

  • --include-databases=*db_list*

    命令行格式 --include-databases=db_list
    类型 字符串

    转储db_list中的数据库,这是一个包含一个或多个逗号分隔数据库名称的列表。转储包括命名数据库中的所有对象。此选项的多个实例是累加的。有关更多信息,请参阅 mysqlpump 对象选择。

  • --include-events=*event_list*

    命令行格式 --include-events=event_list
    类型 字符串

    转储event_list中的事件,这是一个包含一个或多个逗号分隔事件名称的列表。此选项的多个实例是累加的。有关更多信息,请参阅 mysqlpump 对象选择。

  • --include-routines=*routine_list*

    命令行格式 --include-routines=routine_list
    类型 字符串

    转储routine_list中的例程,这是一个包含一个或多个逗号分隔的例程(存储过程或函数)名称的列表。此选项的多个实例是累加的。有关更多信息,请参见 mysqlpump 对象选择。

  • --include-tables=*table_list*

    命令行格式 --include-tables=table_list
    类型 字符串

    转储table_list中的表,这是一个包含一个或多个逗号分隔的表名称的列表。此选项的多个实例是累加的。有关更多信息,请参见 mysqlpump 对象选择。

  • --include-triggers=*trigger_list*

    命令行格式 --include-triggers=trigger_list
    类型 字符串

    转储trigger_list中的触发器,这是一个包含一个或多个逗号分隔的触发器名称的列表。此选项的多个实例是累加的。有关更多信息,请参见 mysqlpump 对象选择。

  • --include-users=*user_list*

    命令行格式 --include-users=user_list
    类型 字符串

    转储user_list中的用户帐户,这是一个包含一个或多个逗号分隔的用户名称的列表。此选项的多个实例是累加的。有关更多信息,请参见 mysqlpump 对象选择。

  • --insert-ignore

    命令行格式 --insert-ignore

    写入INSERT IGNORE语句而不是INSERT语句。

  • --log-error-file=*file_name*

    命令行格式 --log-error-file=file_name
    类型 文件名

    通过将警告和错误附加到指定的文件名来记录警告和错误。如果未提供此选项,mysqlpump将警告和错误写入标准错误输出。

  • --login-path=*name*

    命令行格式 --login-path=name
    类型 字符串

    .mylogin.cnf登录路径文件中的命名登录路径中读取选项。 “登录路径”是一个包含指定要连接到哪个 MySQL 服务器以及要作为哪个帐户进行身份验证的选项的选项组。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参见���6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。

    有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。

  • --max-allowed-packet=*N*

    命令行格式 --max-allowed-packet=N
    类型 数值
    默认值 25165824

    客户端/服务器通信缓冲区的最大大小。默认值为 24MB,最大值为 1GB。

  • --net-buffer-length=*N*

    命令行格式 --net-buffer-length=N
    类型 数值
    默认值 1047552

    客户端/服务器通信缓冲区的初始大小。在创建多行INSERT语句(如使用--extended-insert选项时),mysqlpump创建长度最长达到N字节的行。如果您使用此选项来增加值,请确保 MySQL 服务器的net_buffer_length系统变量至少具有这么大的值。

  • --no-create-db

    命令行格式 --no-create-db

    抑制可能包含在输出中的任何CREATE DATABASE语句。

  • --no-create-info-t

    命令行格式 --no-create-info

    不要编写创建每个转储表的CREATE TABLE语句。

  • --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 节,“影响选项文件处理的命令行选项”。

  • --parallel-schemas=[*N*:]*db_list*

    命令行格式 --parallel-schemas=[N:]schema_list
    类型 字符串

    创建一个用于处理 db_list 中的数据库的队列,其中 db_list 是一个或多个逗号分隔的数据库名称列表。如果给定 N,则队列使用 N 个线程。如果未给定 N,则 --default-parallelism 选项确定队列线程的数量。

    此选项的多个实例会创建多个队列。mysqlpump 还会创建一个默认队列,用于未在任何 --parallel-schemas 选项中命名的数据库,以及在命令选项选择它们时用于转储用户定义。有关更多信息,请参见 mysqlpump 并行处理。

  • --password[=*password*], -p[*password*]

    命令行格式 --password[=password]
    类型 字符串

    用于连接到服务器的 MySQL 帐户的密码。密码值是可选的。如果未提供,mysqlpump 会提示输入一个。如果提供了密码,则 --password=-p 和后面的密码之间 不能有空格。如果未指定密码选项,则默认情况下不发送密码。

    在命令行上指定密码应被视为不安全。为了避免在命令行上提供密码,请使用选项文件。请参阅 第 8.1.2.1 节,“终端用户密码安全指南”。

    要明确指定没有密码,并且 mysqlpump 不应提示输入密码,请使用 --skip-password 选项。

  • --password1[=*pass_val*]

    用于连接到服务器的 MySQL 帐户的多因素身份验证因子 1 的密码。密码值是可选的。如果未提供,mysqlpump 会提示输入一个。如果提供了密码,则 --password1= 和后面的密码之间 不能有空格。如果未指定密码选项,则默认情况下不发送密码。

    在命令行上指定密码应被视为不安全。为了避免在命令行上提供密码,请使用选项文件。请参阅 第 8.1.2.1 节,“终端用户密码安全指南”。

    明确指定没有密码,并且mysqlpump不���提示输入密码,请使用--skip-password1选项。

    --password1--password是同义词,--skip-password1--skip-password也是。

  • --password2[=*pass_val*]

    用于连接到服务器的 MySQL 帐户的多因素认证因子 2 的密码。此选项的语义类似于--password1的语义;有关详细信息,请参见该选项的描述。

  • --password3[=*pass_val*]

    用于连接到服务器的 MySQL 帐户的多因素认证因子 3 的密码。此选项的语义类似于--password1的语义;有关详细信息,请参见该选项的描述。

  • --plugin-dir=*dir_name*

    命令行格式 --plugin-dir=dir_name
    类型 目录名称

    查找插件的目录。如果使用--default-auth选项指定身份验证插件但mysqlpump找不到它,请指定此选项。参见第 8.2.17 节,“可插拔认证”。

  • --port=*port_num*, -P *port_num*

    命令行格式 --port=port_num
    类型 数字
    默认值 3306

    用于 TCP/IP 连接的端口号。

  • --print-defaults

    命令行格式 --print-defaults

    打印程序名称以及从选项文件获取的所有选项。

    有关此选项和其他选项文件选项的其他信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。

  • --protocol={TCP|SOCKET|PIPE|MEMORY}

    命令行格式 --protocol=type
    类型 字符串
    默认值 [见文本]
    有效值 TCP``SOCKET``PIPE``MEMORY

    用于连接到服务器的传输协议。当其他连接参数通常导致使用不希望使用的协议时,这很有用。有关允许值的详细信息,请参见第 6.2.7 节,“连接传输协议”。

  • --replace

    命令行格式 --replace

    使用REPLACE语句而不是INSERT语句。

  • --result-file=*file_name*

    命令行格式 --result-file=file_name
    类型 文件名

    将输出直接定向到指定的文件。即使在生成转储时发生错误,结果文件也会被创建并覆盖其先前的内容。

    此选项应在 Windows 上使用,以防止换行符\n被转换为\r\n回车/换行序列。

  • --routines

    命令行格式 --routines
    类型 布尔值
    默认值 TRUE

    在输出中包含已存储的例程(过程和函数)的转储数据库。此选项需要全局SELECT权限。

    使用--routines生成的输出包含CREATE PROCEDURECREATE FUNCTION语句以创建例程。

    此选项默认启用;使用--skip-routines来禁用它。

  • --server-public-key-path=*file_name*

    命令行格式 --server-public-key-path=file_name
    类型 文件名

    PEM 格式文件的路径名,其中包含服务器所需的客户端端公钥的副本,用于 RSA 密钥对密码交换。此选项适用于使用sha256_passwordcaching_sha2_password认证插件进行身份验证的客户端。对于不使用这些插件进行身份验证的帐户,此选项将被忽略。如果不使用基于 RSA 的密码交换,例如客户端使用安全连接连接到服务器时,也将被忽略。

    如果给定--server-public-key-path=*file_name*并指定有效的公钥文件,则优先于--get-server-public-key

    对于sha256_password,此选项仅在 MySQL 使用 OpenSSL 构建时适用。

    有关sha256_passwordcaching_sha2_password插件的信息,请参见第 8.4.1.3 节,“SHA-256 可插拔认证”和第 8.4.1.2 节,“缓存 SHA-2 可插拔认证”。

  • --set-charset

    命令行格式 --set-charset

    SET NAMES *default_character_set*写入输出。

    此选项默认启用。要禁用它并抑制SET NAMES语句,请使用--skip-set-charset

  • --set-gtid-purged=*value*

    命令行格式 --set-gtid-purged=value
    类型 枚举
    默认值 AUTO
    有效值 OFF``ON``AUTO

    此选项通过指示是否向输出添加SET @@GLOBAL.gtid_purged语句,使得可以控制写入转储文件的全局事务 ID(GTID)信息。此选项还可能导致在重新加载转储文件时向输出写入一个禁用二进制日志的语句。

    下表显示了允许的选项值。默认值为AUTO

    含义
    OFF 不向输出添加任何SET语句。
    ON 向输出添加一个SET语句。如果服务器未启用 GTIDs,则会发生错误。
    AUTO 如果服务器启用了 GTIDs,则向输出添加一个SET语句。

    当重新加载转储文件时,--set-gtid-purged选项对二进制日志的影响如下:

    • --set-gtid-purged=OFF:不向输出添加SET @@SESSION.SQL_LOG_BIN=0;

    • --set-gtid-purged=ON:向输出添加SET @@SESSION.SQL_LOG_BIN=0;

    • --set-gtid-purged=AUTO:如果您正在备份的服务器启用了 GTIDs(即AUTO评估为ON),则向输出添加SET @@SESSION.SQL_LOG_BIN=0;

  • --single-transaction

    命令行格式 --single-transaction

    此选项将事务隔离模式设置为REPEATABLE READ,并在转储数据之前向服务器发送一个START TRANSACTION SQL 语句。仅对诸如InnoDB之类的事务表有用,因为它会在发出START TRANSACTION时转储数据库的一致状态,而不会阻塞任何应用程序。

    在使用此选项时,应该记住只有InnoDB表会以一致的状态进行转储。例如,使用此选项时转储的任何MyISAMMEMORY表可能仍会改变状态。

    在进行--single-transaction转储时,为确保有效的转储文件(正确的表内容和二进制日志坐标),不应有其他连接使用以下语句:ALTER TABLECREATE TABLEDROP TABLERENAME TABLETRUNCATE TABLE。一致性读取与这些语句不隔离,因此在要转储的表上使用它们可能导致由mysqlpump执行的用于检索表内容的SELECT获取不正确的内容或失败。

    --add-locks--single-transaction是互斥的。

  • --skip-definer

    命令行格式 --skip-definer
    类型 布尔值
    默认值 FALSE

    从视图和存储程序的CREATE语句中省略DEFINERSQL SECURITY子句。重新加载转储文件时,创建使用默认DEFINERSQL SECURITY值的对象。参见第 27.6 节,“存储对象访问控制”。

  • --skip-dump-rows, -d

    命令行格式 --skip-dump-rows
    类型 布尔值
    默认值 FALSE

    不要转储表行。

  • --skip-generated-invisible-primary-key

    命令行格式 --skip-generated-invisible-primary-key
    引入版本 8.0.30
    类型 布尔值
    默认值 FALSE

    此选项从 MySQL 8.0.30 开始可用,导致生成的不可见主键(GIPKs)在转储中被排除。有关 GIPK 和 GIPK 模式的更多信息,请参见第 15.1.20.11 节,“生成的不可见主键”。

  • --socket=*path*, -S *path*

    命令行格式 --socket={file_name&#124;pipe_name}
    类型 字符串

    对于连接到localhost的情况,要使用的 Unix 套接字文件,或者在 Windows 上要使用的命名管道的名称。

    在 Windows 上,此选项仅在服务器启用了named_pipe系统变量以支持命名管道连接时才适用。此外,进行连接的用户必须是由named_pipe_full_access_group系统变量指定的 Windows 组的成员。

  • --ssl*

    --ssl 开头的选项指定是否使用加密连接连接到服务器,并指示 SSL 密钥和证书的位置。参见 加密连接的命令选项。

  • --ssl-fips-mode={OFF|ON|STRICT}

    命令行格式 --ssl-fips-mode={OFF&#124;ON&#124;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 设置为 ONSTRICT 会导致客户端在启动时产生警告并在非 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 协议和密码套件”。

  • --triggers

    命令行格式 --triggers
    类型 布尔
    默认值 TRUE

    在输出中为每个转储表包括触发器。

    默认情况下启用此选项;使用--skip-triggers来禁用它。

  • --tz-utc

    命令行格式 --tz-utc

    此选项允许在不同时区的服务器之间转储和重新加载TIMESTAMP列。mysqlpump将其连接时区设置为 UTC,并在转储文件中添加SET TIME_ZONE='+00:00'。如果没有此选项,TIMESTAMP列将在源服务器和目标服务器的本地时区中转储和重新加载,如果服务器位于不同的时区,可能会导致值发生变化。--tz-utc也可以防止由于夏令时变化而导致的变化。

    默认情况下启用此选项;使用--skip-tz-utc来禁用它。

  • --user=*user_name*, -u *user_name*

    命令行格式 --user=user_name
    类型 字符串

    用于连接到服务器的 MySQL 帐户的用户名。

    如果您在 MySQL 8.0.31 或更高版本中使用Rewriter插件,则应授予此用户SKIP_QUERY_REWRITE权限。

  • --users

    命令行格式 --users
    类型 布尔
    默认值 FALSE

    将用户帐户转储为CREATE USERGRANT语句的逻辑定义。

    用户定义存储在mysql系统数据库的授权表中。默认情况下,mysqlpump不包括mysql数据库转储中的授权表。要将授权表的内容作为逻辑定义转储,请使用--users选项并禁止所有数据库转储:

    mysqlpump --exclude-databases=% --users
    
  • --version, -V

    命令行格式 --version

    显示版本信息并退出。

  • --watch-progress

    命令行格式 --watch-progress
    类型 布尔
    默认值 TRUE

    定期显示有关已完成和总表、行和其他对象数量的进度指示器。

    默认情况下启用此选项;使用--skip-watch-progress来禁用它。

  • --zstd-compression-level=*level*

    命令行格式 --zstd-compression-level=#
    引入版本 8.0.18
    类型 整数

    用于使用 zstd 压缩算法连接到服务器的压缩级别。允许的级别从 1 到 22,较大的值表示较高级别的压缩。默认的 zstd 压缩级别为 3。压缩级别设置对不使用 zstd 压缩的连接没有影响。

    更多信息,请参见 6.2.8 节,“连接压缩控制”。

    此选项在 MySQL 8.0.18 版本中添加。

mysqlpump 对象选择

mysqlpump 具有一组包含和排除选项,可过滤多种对象类型,并提供对要转储的对象进行灵活控制:

  • --include-databases--exclude-databases 适用于数据库及其内部的所有对象。

  • --include-tables--exclude-tables 适用于表。这些选项还会影响与表相关的触发器,除非给出了特定于触发器的选项。

  • --include-triggers--exclude-triggers 适用于触发器。

  • --include-routines--exclude-routines 适用于存储过程和函数。如果一个例程选项匹配存储过程名称,它也会匹配同名的存储函数。

  • --include-events--exclude-events 适用于事件调度器事件。

  • --include-users--exclude-users 适用于用户账户。

任何包含或排除选项都可以多次给出。效果是累加的。这些选项的顺序不重要。

每个包含和排除选项的值是逗号分隔的适当对象类型的名称列表。例如:

--exclude-databases=test,world
--include-tables=customer,invoice

通配符字符允许在对象名称中使用:

  • % 匹配零个或多个字符的任意序列。

  • _ 匹配任意单个字符。

例如,--include-tables=t%,__tmp 匹配所有以 t 开头的表名和以 tmp 结尾的五个字符表名。

对于用户,没有主机部分指定的名称会被解释为隐含主机%。例如,u1u1@%是等效的。这与 MySQL 通常适用的等效性相同(参见第 8.2.4 节,“指定帐户名称”)。

包含和排除选项的交互如下:

  • 默认情况下,没有包含或排除选项,mysqlpump会转储所有数据库(特定例外情况在 mysqlpump 限制中有说明)。

  • 如果在没有排除选项的情况下给出了包含选项,则只有被包含命名的对象会被转储。

  • 如果在没有包含选项的情况下给出了排除选项,则所有对象都会被转储,除了被排除命名的对象。

  • 如果给出了包含和排除选项,则所有被排除的对象和未被包含的对象都不会被转储。所有其他对象都会被转储。

如果正在转储多个数据库,则可以通过使用数据库名称限定对象名称来命名特定数据库中的表、触发器和例程。以下命令转储数据库db1db2,但排除表db1.t1db2.t2

mysqlpump --include-databases=db1,db2 --exclude-tables=db1.t1,db2.t2

以下选项提供了指定要转储的数据库的替代方法:

  • --all-databases选项会转储所有数据库(特定例外情况在 mysqlpump 限制中有说明)。这等同于根本不指定任何对象选项(默认mysqlpump的操作是转储所有内容)。

    --include-databases=%类似于--all-databases,但选择所有数据库进行转储,即使它们是--all-databases的例外情况。

  • --databases选项会导致mysqlpump将所有名称参数视为要转储的数据库名称。这等同于一个--include-databases选项,命名相同的数据库。

mysqlpump 并行处理

mysqlpump可以使用并行处理来实现并发处理。您可以选择数据库之间的并发性(同时转储多个数据库)和数据库内的并发性(同时转储给定数据库中的多个对象)。

默认情况下,mysqlpump设置一个队列和两个线程。您可以创建额外的队列并控制分配给每个队列的线程数,包括默认队列:

  • --default-parallelism=*N*指定每个队列使用的默认线程数。如果没有此选项,N为 2。

    默认队列始终使用默认线程数。除非另有说明,否则其他队列使用默认线程数。

  • --parallel-schemas=[*N*:]*db_list*设置一个处理队列,用于转储db_list中命名的数据库,并可选择指定队列使用的线程数。db_list是逗号分隔的数据库名称列表。如果选项参数以*N*:开头,则队列使用N个线程。否则,--default-parallelism选项确定队列线程数。

    多个--parallel-schemas选项实例会创建多个队列。

    数据库列表中的名称允许包含与过滤选项支持的%_通配符相同的字符(请参阅 mysqlpump 对象选择)。

mysqlpump使用默认队列来处理未明确命名的任何数据库,并在命令选项选择它们时用于转储用户定义。

通常,对于多个队列,mysqlpump在队列处理的数据库集之间使用并行性,以同时转储多个数据库。对于使用多个线程的队列,mysqlpump在数据库内部使用并行性,以同时转储给定数据库中的多个对象。也可能会发生异常;例如,mysqlpump可能会在从服务器获取数据库对象列表时阻塞队列。

启用并行性后,不同数据库的输出可能会交错。例如,并行转储的多个表中的INSERT语句可能会交错;这些语句不会按任何特定顺序编写。这不会影响重新加载,因为输出语句会使用数据库名称限定对象名称,或根据需要在之前加上USE语句。

并行性的粒度是单个数据库对象。例如,单个表不能使用多个线程并行转储。

示例:

mysqlpump --parallel-schemas=db1,db2 --parallel-schemas=db3

mysqlpump设置一个队列来处理db1db2,另一个队列来处理db3,以及一个默认队列来处理所有其他数据库。所有队列都使用两个线程。

mysqlpump --parallel-schemas=db1,db2 --parallel-schemas=db3
          --default-parallelism=4

这与前面的示例相同,只是所有队列都使用四个线程。

mysqlpump --parallel-schemas=5:db1,db2 --parallel-schemas=3:db3

db1db2 的队列使用五个线程,db3 的队列使用三个线程,而默认队列使用默认的两个线程。

作为一个特例,使用 --default-parallelism=0 和没有 --parallel-schemas 选项时,mysqlpump 作为单线程进程运行,并且不创建任何队列。

mysqlpump 限制

mysqlpump 默认不会转储 performance_schemandbinfosys 模式。要转储其中任何一个,请在命令行上明确命名它们。您还可以使用 --databases--include-databases 选项来命名它们。

mysqlpump 不会转储 INFORMATION_SCHEMA 模式。

mysqlpump 不会转储 InnoDB CREATE TABLESPACE 语句。

mysqlpump 使用 CREATE USERGRANT 语句以逻辑形式转储用户帐户(例如,当您使用 --include-users--users 选项时)。因此,默认情况下,对 mysql 系统数据库的转储不包括包含用户定义的授权表:userdbtables_privcolumns_privprocs_privproxies_priv。要转储其中任何授权表,请在 mysql 数据库后面命名表名:

mysqlpump mysql user db ...

6.5.7 mysqlshow — 显示数据库、表和列信息

原文:dev.mysql.com/doc/refman/8.0/en/mysqlshow.html

mysqlshow客户端可用于快速查看存在哪些数据库、它们的表,或表的列或索引。

mysqlshow提供了一个命令行接口来执行几个 SQL SHOW语句。请参阅 Section 15.7.7, “SHOW 语句”。相同的信息可以通过直接使用这些语句来获取。例如,您可以从mysql客户端程序中发出它们。

调用像这样的mysqlshow

mysqlshow [*options*] [*db_name* [*tbl_name* [*col_name*]]]
  • 如果没有给出数据库,则显示数据库名称列表。

  • 如果没有给出表,则显示数据库中所有匹配的表。

  • 如果没有给出列,则显示表中所有匹配的列和列类型。

输出仅显示您具有某些权限的那些数据库、表或列的名称。

如果最后一个参数包含 shell 或 SQL 通配符(*, ?, %, 或 _),则只显示与通配符匹配的名称。如果数据库名称包含任何下划线,那么应该用反斜杠(某些 Unix shell 需要两个)对其进行转义,以获取正确的表或列列表。*? 字符会转换为 SQL %_ 通配符。当您尝试显示具有名称中带有 _ 的表的列时,这可能会导致一些混淆,因为在这种情况下,mysqlshow只会显示与模式匹配的表名。这很容易通过在命令行最后添加额外的 % 作为单独参数来解决。

mysqlshow支持以下选项,这些选项可以在命令行或选项文件的[mysqlshow][client]组中指定。有关 MySQL 程序使用的选项文件的信息,请参阅 Section 6.2.2.2, “使用选项文件”。

表 6.18 mysqlshow 选项

选项名称 描述 引入 废弃
--bind-address 使用指定的网络接口连接到 MySQL 服务器
--character-sets-dir 字符集所在目录
--compress 在客户端和服务器之间发送的所有信息进行压缩 8.0.18
--compression-algorithms 连接到服务器时允许的压缩算法 8.0.18
--count 每个表的行数
--debug 写入调试日志
--debug-check 程序退出时打印调试信息
--debug-info 程序退出时打印调试信息、内存和 CPU 统计信息
--default-auth 要使用的认证插件
--default-character-set 指定默认字符集
--defaults-extra-file 除了通常的选项文件之外,读取指定的选项文件
--defaults-file 仅读取指定的选项文件
--defaults-group-suffix 选项组后缀值
--enable-cleartext-plugin 启用明文认证插件
--get-server-public-key 从服务器请求 RSA 公钥
--help 显示帮助信息并退出
--host MySQL 服务器所在的主机
--keys 显示表索引
--login-path 从.mylogin.cnf 文件中读取登录路径选项
--no-defaults 不读取任何选项文件
--password 连接到服务器时使用的密码
--password1 连接到服务器时使用的第一个多因��身份验证密码 8.0.27
--password2 连接到服务器时使用的第二个多因素身份验证密码 8.0.27
--password3 连接到服务器时使用的第三个多因素身份验证密码 8.0.27
--pipe 使用命名管道连接到服务器(仅限 Windows)
--plugin-dir 插件安装目录
--port 连接的 TCP/IP 端口号
--print-defaults 打印默认选项
--protocol 使用的传输协议
--server-public-key-path 包含 RSA 公钥的文件路径名
--shared-memory-base-name 共享内存连接的共享内存名称(仅限 Windows)
--show-table-type 显示指示表类型的列
--socket 要使用的 Unix 套接字文件或 Windows 命名管道
--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
--status 显示有关每个表的额外信息
--tls-ciphersuites 用于加密连接的可接受的 TLSv1.3 密码套件 8.0.16
--tls-version 用于加密连接的可接受的 TLS 协议
--user 连接到服务器时要使用的 MySQL 用户名
--verbose 详细模式
--version 显示版本信息并退出
--zstd-compression-level 用于使用 zstd 压缩的服务器连接的压缩级别 8.0.18
选项名称 描述 引入版本 废弃版本
  • --help, -?

    命令行格式 --help

    显示帮助信息并退出。

  • --bind-address=*ip_address*

    命令行格式 --bind-address=ip_address

    在具有多个网络接口的计算机上,使用此选项选择连接到 MySQL 服务器的接口。

  • --character-sets-dir=*dir_name*

    命令行格式 --character-sets-dir=path
    类型 字符串
    默认值 [none]

    安装字符集的目录。请参见第 12.15 节,“字符集配置”。

  • --compress, -C

    命令行格式 --compress[={OFF&#124;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 中添加的。

  • --count

    命令行格式 --count

    显示每个表的行数。对于非MyISAM表来说可能会很慢。

  • --debug[=*debug_options*], -# [*debug_options*]

    命令行格式 --debug[=debug_options]
    类型 字符串
    默认值 d:t:o

    写入调试日志。典型的debug_options字符串是d:t:o,*file_name*。默认值为d:t:o

    只有在使用WITH_DEBUG构建 MySQL 时才可用此选项。由 Oracle 提供的 MySQL 发布二进制文件使用此选项构建。

  • --debug-check

    命令行格式 --debug-check
    类型 布尔值
    默认值 FALSE

    程序退出时打印一些调试信息。

    只有在使用WITH_DEBUG构建 MySQL 时才可用此选项。由 Oracle 提供的 MySQL 发布二进制文件使用此选项构建。

  • --debug-info

    命令行格式 --debug-info
    类型 布尔值
    默认值 FALSE

    在程序退出时打印调试信息以及内存和 CPU 使用统计信息。

    只有在使用WITH_DEBUG构建 MySQL 时才可用此选项。由 Oracle 提供的 MySQL 发布二进制文件使用此选项构建。

  • --default-character-set=*charset_name*

    命令行格式 --default-character-set=charset_name
    类型 字符串

    charset_name作为默认字符集。请参见第 12.15 节,“字符集配置”。

  • --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的组。例如,mysqlshow通常会读取[client][mysqlshow]组。如果此选项被指定为--defaults-group-suffix=_othermysqlshow还会读取[client_other][mysqlshow_other]组。

    有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。

  • --enable-cleartext-plugin

    命令行格式 --enable-cleartext-plugin
    类型 布尔值
    默认值 FALSE

    启用mysql_clear_password明文认证插件。(参见第 8.4.1.4 节,“客户端明文插件认证”。)

  • --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插件的信息,请参见第 8.4.1.2 节,“缓存 SHA-2 可插拔认证”。

  • --host=*host_name*-h *host_name*

    命令行格式 --host=host_name
    类型 字符串
    默认值 localhost

    连接到给定主机上的 MySQL 服务器。

  • --keys-k

    命令行格式 --keys

    显示表索引。

  • --login-path=*name*

    命令行格式 --login-path=name
    类型 字符串

    .mylogin.cnf登录路径文件中读取命名登录路径的选项。 “登录路径”是一个包含指定要连接到哪个 MySQL 服务器以及要作为哪个帐户进行身份验证的选项的选项组。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参见第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。

    有关此选项和其他选项文件选项的更多信息,请参见第 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 节,“影响选项文件处理的命令行选项”。

  • --password[=*password*], -p[*password*]

    命令行格式 --password[=password]
    类型 字符串

    用于连接服务器的 MySQL 帐户的密码。密码值是可选的。如果未提供,mysqlshow会提示输入密码。如果提供了密码,则--password=-p后面必须没有空格。如果未指定密码选项,则默认不发送密码。

    在命令行上指定密码应被视为不安全。为了避免在命令行上提供密码,请使用选项文件。请参见第 8.1.2.1 节,“密码安全的最终用户指南”。

    要明确指定没有密码,并且mysqlshow 不应提示输入密码,请使用--skip-password选项。

  • --password1[=*pass_val*]

    MySQL 账户用于连接服务器的多因素认证因子 1 的密码。密码值是可选的。如果未提供,mysqlshow 将提示输入密码。如果提供,--password1= 和后面的密码之间不能有空格。如果未指定密码选项,则默认不发送密码。

    在命令行上指定密码应被视为不安全。为了避免在命令行上提供密码,请使用选项文件。请参阅 Section 8.1.2.1, “End-User Guidelines for Password Security”。

    要明确指定没有密码,并且mysqlshow 不应提示输入密码,请使用--skip-password1选项。

    --password1--password 是同义词,--skip-password1--skip-password 也是同义词。

  • --password2[=*pass_val*]

    MySQL 账户用于连接服务器的多因素认证因子 2 的密码。此选项的语义与--password1的语义类似;有关详细信息,请参阅该选项的描述。

  • --password3[=*pass_val*]

    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选项指定了认证插件但mysqlshow找不到它,则指定此选项。参见第 8.2.17 节,“可插拔认证”。

  • --port=*port_num*, -P *port_num*

    命令行格式 --port=port_num
    类型 数字
    默认值 3306

    对于 TCP/IP 连接,要使用的端口号。

  • --print-defaults

    命令行格式 --print-defaults

    打印程序名称以及从选项文件获取的所有选项。

    有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。

  • --protocol={TCP|SOCKET|PIPE|MEMORY}

    命令行格式 --protocol=type
    类型 字符串
    默认值 [见文本]
    有效值 TCP``SOCKET``PIPE``MEMORY

    用于连接到服务器的传输协议。当其他连接参数通常导致使用您不想要的协议时,这很有用。有关允许值的详细信息,请参见第 6.2.7 节,“连接传输协议”。

  • --server-public-key-path=*file_name*

    命令行格式 --server-public-key-path=file_name
    类型 文件名

    PEM 格式文件中包含客户端公钥的路径名,该公钥是服务器用于 RSA 密钥对密码交换的必需部分。此选项适用于使用sha256_passwordcaching_sha2_password认证插件进行身份验证的客户端。对于不使用这些插件进行身份验证的帐户,此选项将被忽略。如果不使用基于 RSA 的密码交换,例如客户端通过安全连接连接到服务器时,此选项也将被忽略。

    如果给定--server-public-key-path=*file_name*并指定有效的公钥文件,则它优先于--get-server-public-key

    对于sha256_password,此选项仅在 MySQL 使用 OpenSSL 构建时适用。

    有关sha256_passwordcaching_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系统变量以支持共享内存连接时才适用。

  • --show-table-type, -t

    命令行格式 --show-table-type

    显示指示表类型的列,如SHOW FULL TABLES。类型为BASE TABLEVIEW

  • --socket=*path*, -S *path*

    命令行格式 --socket={file_name&#124;pipe_name}
    类型 字符串

    对于对localhost的连接,要使用的 Unix 套接字文件,或者在 Windows 上,要使用的命名管道的名称。

    在 Windows 上,此选项仅在服务器启动时启用了named_pipe系统变量以支持命名管道连接时才适用。此外,进行连接的用户必须是由named_pipe_full_access_group系统变量指定的 Windows 组的成员。

  • --ssl*

    --ssl开头的选项指定是否使用加密连接到服务器,并指示 SSL 密钥和证书的位置。请参阅加密连接的命令选项。

  • --ssl-fips-mode={OFF|ON|STRICT}

    命令行格式 --ssl-fips-mode={OFF&#124;ON&#124;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设置为ONSTRICT会导致客户端在启动时产生警告并在非 FIPS 模式下运行。

    从 MySQL 8.0.34 开始,此选项已被弃用。预计在未来的 MySQL 版本中将被移除。

  • --status, -i

    命令行格式 --status

    显示每个表的额外信息。

  • --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.5.8 mysqlslap — A Load Emulation Client

原文:dev.mysql.com/doc/refman/8.0/en/mysqlslap.html

mysqlslap是一个诊断程序,旨在模拟 MySQL 服务器的客户端负载,并报告每个阶段的时间。它的工作方式就像多个客户端正在访问服务器。

像这样调用mysqlslap

mysqlslap [*options*]

一些选项,如--create--query使您能够指定包含 SQL 语句的字符串或包含语句的文件。如果指定文件,默认情况下每行必须包含一个语句。(也就是说,隐式语句分隔符是换行符。)使用--delimiter选项指定不同的分隔符,这使您能够指定跨越多行的语句或将多个语句放在一行上。您不能在文件中包含注释;mysqlslap无法理解它们。

mysqlslap分为三个阶段:

  1. 创建模式、表,以及可选的任何存储程序或用于测试的数据。此阶段使用单个客户端连接。

  2. 运行负载测试。此阶段可以使用多个客户端连接。

  3. 清理(断开连接,如果指定了则删除表)。此阶段使用单个客户端连接。

示例:

提供您自己的创建和查询 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&#124;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_name*]

    命令行格式 --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=_othermysqlslap还会读取[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选项。

  • --password1[=*pass_val*]

    用于连接到服务器的 MySQL 帐户的多因素认证因子 1 的密码。密码值是可选的。如果未提供,mysqlslap会提示输入密码。如果提供了密码,则--password1=和其后的密码之间不能有空格。如果未指定密码选项,则默认不发送密码。

    在命令行上指定密码应被视为不安全。为了避免在命令行上提供密码,请使用选项文件。请参阅第 8.1.2.1 节,“密码安全的最终用户指南”。

    要明确指定没有密码,并且mysqlslap不应提示密码,请使用--skip-password1选项。

    --password1--password是同义词,--skip-password1--skip-password也是。

  • --password2[=*pass_val*]

    用于连接到服务器的 MySQL 帐户的多因素认证因子 2 的密码。此选项的语义类似于--password1的语义;有关详细信息,请参阅该选项的描述。

  • --password3[=*pass_val*]

    用于连接到服务器的 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_passwordcaching_sha2_password认证插件进行身份验证的客户端。对于不使用这些插件进行身份验证的帐户,此选项将被忽略。如果不使用基于 RSA 的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。

    如果给定--server-public-key-path=*file_name*并指定有效的公钥文件,则它将优先于--get-server-public-key

    对于sha256_password,仅当 MySQL 使用 OpenSSL 构建时,此选项才适用。

    有关sha256_passwordcaching_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&#124;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&#124;ON&#124;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设置为ONSTRICT会导致客户端在启动时产生警告并在非 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 提取实用程序

原文:dev.mysql.com/doc/refman/8.0/en/ibd2sdi.html

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 开始。

ibd2sdiJSON格式输出包含 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字段值,仅检索idtype字段值,这些字段值是 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.tablesmysql.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,我们可以看到列cdefault_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

    指定一个严格的校验算法,用于验证读取页面的校验和。选项包括innodbcrc32none

    在这个例子中,指定了innodb校验算法的严格版本:

    ibd2sdi --strict-check=innodb ../data/test/t1.ibd
    

    在这个例子中,指定了crc32校验算法的严格版本:

    ibd2sdi -c crc32 ../data/test/t1.ibd
    

    如果不指定--strict-check选项,则会根据非严格的innodbcrc32none校验进行验证。

  • --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 文件校验和实用程序

原文:dev.mysql.com/doc/refman/8.0/en/innochecksum.html

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

    指定严格的校验算法。选项包括innodbcrc32none

    在此示例中,指定了innodb校验算法:

    innochecksum --strict-check=innodb ../data/test/tab1.ibd
    

    在此示例中,指定了crc32校验算法:

    innochecksum -C crc32 ../data/test/tab1.ibd
    

    以下条件适用:

    • 如果您没有指定--strict-check选项,innochecksum 将校验innodbcrc32none

    • 如果指定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
    类型 字符串
    默认值 [无]

    将表空间中每个页面的页面类型信息转储到stderrstdout。示例用法:

    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 选项定义了三个系统表空间文件:ibdata1ibdata2ibdata3

./bin/mysqld --no-defaults --innodb-data-file-path="ibdata1:10M;ibdata2:10M;ibdata3:10M:autoextend"

三个文件(ibdata1ibdata2ibdata3)形成一个逻辑系统表空间。要对形成一个逻辑系统表空间的多个文件运行 innochecksuminnochecksum 需要使用 - 选项从标准输入读取表空间文件,这相当于连接多个文件以创建一个单一文件。对于上面提供的示例,将使用以下 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 — 显示全文索引信息

原文:dev.mysql.com/doc/refman/8.0/en/myisam-ftdump.html

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 表维护实用程序

原文:dev.mysql.com/doc/refman/8.0/en/myisamchk.html

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 TABLEREPAIR 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=_othermyisamchk还会读取[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_sizemyisam_sort_buffer_size的弃用同义词。

当你使用--extend-check检查表或通过逐行将键插入表中修复键时(例如进行正常插入时),会使用key_buffer_size。通过键缓冲区进行修复在以下情况下使用:

  • 你使用--safe-recover

  • 为了对键进行排序所需的临时文件大小会比直接创建键文件时大两倍以上。当你有大型键值的CHARVARCHARTEXT列时,通常会出现这种情况,因为排序操作需要在进行过程中存储完整的键值。如果你有大量临时空间,并且可以强制myisamchk通过排序来修复,你可以使用--sort-recover选项。

通过键缓冲区进行修复比使用排序需要的磁盘空间少得多,但速度也慢得多。

如果您想要更快的修复,请将key_buffer_sizemyisam_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_lenft_max_word_len表示MyISAM表上FULLTEXT索引的最小和最大单词长度。ft_stopword_file指定停用词文件。这些需要在以下情况下设置。

如果您使用myisamchk执行修改表索引的操作(如修复或分析),则FULLTEXT索引将使用默认的全文参数值进行重建,除非您另有指定。否则可能导致查询失败。

问题出现在这些参数只有服务器知道。它们不存储在MyISAM索引文件中。如果您在服务器中修改了最小或最大单词长度或停用词文件以避免问题,请为myisamchk指定与您用于mysqld相同的ft_min_word_lenft_max_word_lenft_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 TABLEANALYZE TABLEOPTIMIZE TABLEALTER 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

    非常彻底地检查表。如果表具有许多索引,则这将非常慢。此选项仅应在极端情况下使用。通常情况下,myisamchkmyisamchk --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 打包的表。

原文:dev.mysql.com/doc/refman/8.0/en/myisamchk-other-options.html

6.6.4.4 其他 myisamchk 选项

myisamchk支持以下选项,用于除表检查和修复之外的操作:

  • --analyze-a

    命令行格式 --analyze

    分析关键值的分布。这通过使连接优化器更好地选择连接表的顺序和应该使用的索引来提高连接性能。要获取关于关键分布的信息,请使用myisamchk --description --verbose tbl_name命令或SHOW INDEX FROM *tbl_name*语句。

  • --block-search=*offset*-b *offset*

    命令行格式 --block-search=offset
    类型 数字

    查找给定偏移处块所属的记录。

  • --description-d

    命令行格式 --description

    打印有关表的一些描述性信息。指定--verbose选项一次或两次会产生额外信息。参见第 6.6.4.5 节,“使用 myisamchk 获取表信息”

  • --set-auto-increment[=*value*]-A[*value*]

    强制AUTO_INCREMENT为新记录的编号从给定值开始(如果存在AUTO_INCREMENT值大于此值的现有记录,则从更高值开始)。如果未指定value,则新记录的AUTO_INCREMENT编号从表中当前最大值加一开始。

  • --sort-index-S

    命令行格式 --sort-index

    按高低顺序对索引树块进行排序。这优化了查找并使使用索引的表扫描更快。

  • --sort-records=*N*-R *N*

    命令行格式 --sort-records=#
    类型 数字

    根据特定索引对记录进行排序。这使您的数据更加本地化,并可能加快使用此索引的基于范围的SELECTORDER BY操作的速度。(第一次使用此选项对表进行排序时可能会非常慢。)要确定表的��引编号,请使用SHOW INDEX,它以myisamchk看到的相同顺序显示表的索引。索引从 1 开始编号。

    如果键没有打包(PACK_KEYS=0),它们的长度相同,因此当myisamchk对记录进行排序和移动时,它只是覆盖索引中的记录偏移量。如果键已经打包(PACK_KEYS=1),myisamchk必须首先解压键块,然后重新创建索引并再次打包键块。(在这种情况下,重新创建索引比为每个索引更新偏移量更快。)

原文:dev.mysql.com/doc/refman/8.0/en/myisamchk-table-info.html

6.6.4.5 使用 myisamchk 获取表信息

要获取 MyISAM 表的描述或有关其统计信息,请使用此处显示的命令。稍后将解释这些命令的输出。

  • myisamchk -d tbl_name

    在“描述模式”下运行myisamchk 以生成表的描述。如果使用外部锁定禁用启动 MySQL 服务器,则在运行时更新的表可能会报告错误。但是,因为myisamchk 在描述模式下不会更改表,所以不会破坏数据。

  • myisamchk -dv tbl_name

    添加 -v 参数以在详细模式下运行myisamchk,从而生成有关表的更多信息。再次添加 -v 参数会生成更多信息。

  • myisamchk -eis tbl_name

    仅显示表中最重要的信息。此操作速度较慢,因为它必须读取整个表。

  • myisamchk -eiv tbl_name

    这类似于 -eis,但告诉您正在执行什么操作。

tbl_name 参数可以是 MyISAM 表的名称,也可以是其索引文件的名称,如第 6.6.4 节,“myisamchk — MyISAM Table-Maintenance Utility”中所述。可以提供多个 tbl_name 参数。

假设名为 person 的表具有以下结构。(包含 MAX_ROWS 表选项,以便在稍后显示的myisamchk 示例输出中,某些值较小且更容易适应输出格式。)

CREATE TABLE person
(
  id         INT NOT NULL AUTO_INCREMENT,
  last_name  VARCHAR(20) NOT NULL,
  first_name VARCHAR(20) NOT NULL,
  birth      DATE,
  death      DATE,
  PRIMARY KEY (id),
  INDEX (last_name, first_name),
  INDEX (birth)
) MAX_ROWS = 1000000 ENGINE=MYISAM;

假设表具有以下数据和索引文件大小:

-rw-rw----  1 mysql  mysql  9347072 Aug 19 11:47 person.MYD
-rw-rw----  1 mysql  mysql  6066176 Aug 19 11:47 person.MYI

myisamchk -dvv 输出示例:

MyISAM file:         person
Record format:       Packed
Character set:       utf8mb4_0900_ai_ci (255)
File-version:        1
Creation time:       2017-03-30 21:21:30
Status:              checked,analyzed,optimized keys,sorted index pages
Auto increment key:              1  Last value:                306688
Data records:               306688  Deleted blocks:                 0
Datafile parts:             306688  Deleted data:                   0
Datafile pointer (bytes):        4  Keyfile pointer (bytes):        3
Datafile length:           9347072  Keyfile length:           6066176
Max datafile length:    4294967294  Max keyfile length:   17179868159
Recordlength:                   54

table description:
Key Start Len Index   Type                     Rec/key         Root  Blocksize
1   2     4   unique  long                           1                    1024
2   6     80  multip. varchar prefix                 0                    1024
    87    80          varchar                        0
3   168   3   multip. uint24 NULL                    0                    1024

Field Start Length Nullpos Nullbit Type
1     1     1
2     2     4                      no zeros
3     6     81                     varchar
4     87    81                     varchar
5     168   3      1       1       no zeros
6     171   3      1       2       no zeros

myisamchk 生成的信息类型解释在此处。 “Keyfile” 指的是索引文件。“Record” 和 “row” 是同义词,同样,“field” 和 “column” 也是。

表描述的初始部分包含这些值:

  • MyISAM 文件

    MyISAM(索引)文件的名称。

  • 记录格式

    用于存储表行的格式。前面的示例使用固定长度。其他可能的值包括压缩打包。(打包对应于SHOW TABLE STATUS报告的动态。)

  • 字符集

    表的默认字符集。

  • 文件版本

    MyISAM格式的版本。始终为 1。

  • 创建时间

    数据文件创建时间。

  • 恢复时间

    上次重建索引/数据文件的时间。

  • 状态

    表状态标志。可能的值为崩溃打开更改分析优化键排序索引页

  • 自增键, 最后值

    与表的AUTO_INCREMENT列相关联的键号,以及此列的最近生成的值。如果没有这样的列,则不显示这些字段。

  • 数据记录

    表中的行数。

  • 已删除块

    有多少已删除块仍然保留空间。您可以优化表以最小化此空间。请参阅第 9.6.4 节,“MyISAM 表优化”。

  • 数据文件部分

    对于动态行格式,这表示有多少数据块。对于没有碎片行的优化表,这与数据记录相同。

  • 已删除数据

    有多少字节的未回收删除数据。您可以优化表以最小化此空间。请参阅第 9.6.4 节,“MyISAM 表优化”。

  • 数据文件指针

    数据文件指针的大小,以字节为单位。通常为 2、3、4 或 5 字节。大多数表使用 2 字节,但目前无法从 MySQL 控制。对于固定表,这是一个行地址。对于动态表,这是一个字节地址。

  • 键文件指针

    索引文件指针的大小,以字节为单位。通常为 1、2 或 3 字节。大多数表使用 2 字节,但 MySQL 会自动计算。它始终是一个块地址。

  • 最大数据文件长度

    表数据文件可以变得多长,以字节为单位。

  • 最大键文件长度

    表索引文件可以变得多长,以字节为单位。

  • 记录长度

    每行占用多少空间,以字节为单位。

输出的表描述部分包括表中所有键的列表。对于每个键,myisamchk显示一些低级信息:

  • 此键的编号。仅对键的第一列显示此值。如果缺少此值,则该行对应于多列键的第二列或更高列。对于示例中显示的表,第二个索引有两行表描述。这表示它是一个具有两部分的多部分索引。

  • 开始

    此索引部分在行中的起始位置。

  • 长度

    此部分索引的长度。对于压缩数字,这应始终是列的完整长度。对于字符串,它可能比索引列的完整长度短,因为可以索引字符串列的前缀。多部分键的总长度是所有关键部分的Len值之和。

  • Index

    索引中是否可以存在多个相同的键值。可能的值为uniquemultip.(多个)。

  • Type

    此部分索引的数据类型。这是一个MyISAM数据类型,可能的值为packedstrippedempty

  • Root

    根索引块的地址。

  • Blocksize

    每个索引块的大小。默认情况下为 1024,但在从源代码构建 MySQL 时,该值可以在编译时更改。

  • Rec/key

    这是优化器使用的统计值。它告诉此索引每个值有多少行。唯一索引的值始终为 1。在加载表后(或大幅更改后),可以使用myisamchk -a更新此值。如果根本没有更新,将给出默认值 30。

输出的最后部分提供了有关每列的信息:

  • Field

    列号。

  • Start

    列在表行中的字节位置。

  • Length

    列的字节长度。

  • NullposNullbit

    对于可以为NULL的列,MyISAMNULL值存储为一个字节中的标志。根据可为空的列数,可以使用一个或多个字节用于此目的。如果NullposNullbit值非空,则指示哪个字节和位包含指示列是否为NULL的标志。

    显示用于存储NULL标志的位置和字节数的位置和数量在字段 1 的行中显示。这就是为什么person表有五列,但有六行Field行的原因。

  • Type

    数据类型。该值可能包含以下描述符之一:

    • constant

      所有行具有相同的值。

    • no endspace

      不要存储末尾空格。

    • no endspace, not_always

      不要存储末尾空格,也不要对所有值进行末尾空格压缩。

    • no endspace, no empty

      不要存储末尾空格。不要存储空值。

    • table-lookup

      该列已转换为ENUM

    • zerofill(*N*)

      值中最重要的N字节始终为 0 且不存储。

    • no zeros

      不要存储零值。

    • always zero

      零值使用一位存储。

  • Huff tree

    与列关联的 Huffman 树的编号。

  • Bits

    在 Huffman 树中使用的位数。

如果表已使用myisampack进行压缩,则显示Huff treeBits字段。参见第 6.6.6 节,“myisampack — 生成压缩的只读 MyISAM 表”,了解此信息的示例。

myisamchk -eiv输出示例:

Checking MyISAM file: person
Data records:  306688   Deleted blocks:       0
- check file-size
- check record delete-chain
No recordlinks
- check key delete-chain
block_size 1024:
- check index reference
- check data record references index: 1
Key:  1:  Keyblocks used:  98%  Packed:    0%  Max levels:  3
- check data record references index: 2
Key:  2:  Keyblocks used:  99%  Packed:   97%  Max levels:  3
- check data record references index: 3
Key:  3:  Keyblocks used:  98%  Packed:  -14%  Max levels:  3
Total:    Keyblocks used:  98%  Packed:   89%

- check records and index references
**** LOTS OF ROW NUMBERS DELETED ****

Records:            306688  M.recordlength:       25  Packed:            83%
Recordspace used:       97% Empty space:           2% Blocks/Record:   1.00
Record blocks:      306688  Delete blocks:         0
Record data:       7934464  Deleted data:          0
Lost space:         256512  Linkdata:        1156096

User time 43.08, System time 1.68
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 0, Physical pagefaults 0, Swaps 0
Blocks in 0 out 7, Messages in 0 out 0, Signals 0
Voluntary context switches 0, Involuntary context switches 0
Maximum memory usage: 1046926 bytes (1023k)

myisamchk -eiv输出包括以下信息:

  • 数据记录

    表中的行数。

  • 已删除块

    有多少已删除的块仍然保留了空间。您可以优化表以最小化此空间。参见第 9.6.4 节,“MyISAM 表优化”。

  • 键号。

  • 已使用键块

    使用的键块的百分比。当表刚刚使用myisamchk重新组织时,值非常高(非常接近理论最大值)。

  • 压缩

    MySQL 尝试压缩具有共同后缀的键值。这仅适用于CHARVARCHAR列上的索引。对于具有相似左侧部分的长索引字符串,这可以显着减少使用的空间。在前面的示例中,第二个键长 40 字节,实现了 97%的空间减少。

  • 最大级别

    此键的 B 树有多深。具有长键值的大表会获得较高的值。

  • 记录

    表中有多少行。

  • M.recordlength

    平均行长度。对于具有固定长度行的表,这是确切的行长度,因为所有行长度相同。

  • 压缩

    MySQL 从字符串末尾删除空格。压缩值指示通过执行此操作实现的节省百分比。

  • 已使用记录空间

    数据文件中已使用的百分比。

  • 空间

    数据文件中未使用的百分比。

  • 块/记录

    每行的平均块数(即,一个碎片化行由多少个链接组成)。对于固定格式表,这总是 1.0。此值应尽可能接近 1.0。如果值过大,您可以重新组织表。参见第 9.6.4 节,“MyISAM 表优化”。

  • 记录块

    使用了多少块(链接)。对于固定格式表,这与行数相同。

  • 删除块

    已删除(未使用)的块(链接)数。

  • 记录数据

    数据文件中已使用的字节数。

  • 已删除数据

    数据文件中已删除(未使用)的字节数。

  • 丢失空间

    如果将行更新为较短长度,则会丢失一些空间。这是所有此类损���的总和,以字节为单位。

  • 链接数据

    当使用动态表格式时,行片段通过指针(每个 4 到 7 个字节)连接。Linkdata是所有这些指针使用的存储量的总和。

原文:dev.mysql.com/doc/refman/8.0/en/myisamchk-memory.html

6.6.4.6 myisamchk 内存使用

在运行myisamchk时,内存分配非常重要。myisamchk使用的内存不会超过其与内存相关的变量设置的值。如果你要在非常大的表上使用myisamchk,你应该首先决定要使用多少内存。默认情况下,只使用约 3MB 来执行修复。通过使用更大的值,你可以让myisamchk运行得更快。例如,如果你有超过 512MB 的可用 RAM,你可以使用这些选项(除了你可能指定的其他选项):

myisamchk --myisam_sort_buffer_size=256M \
           --key_buffer_size=512M \
           --read_buffer_size=64M \
           --write_buffer_size=64M ...

使用--myisam_sort_buffer_size=16M对大多数情况来说可能已经足够了。

请注意,myisamchkTMPDIR中使用临时文件。如果TMPDIR指向一个内存文件系统,很容易发生内存不足错误。如果发生这种情况,请使用--tmpdir=*dir_name*选项运行myisamchk来指定一个位于具有更多空间的文件系统上的目录。

在执行修复操作时,myisamchk还需要大量的磁盘空间:

  • 数据文件的两倍大小(原始文件和副本)。如果你使用--quick进行修复,则不需要这个空间;在这种情况下,只重新创建索引文件。这个空间必须在与原始数据文件相同的文件系统上可用,因为副本是在与原始文件相同的目录中创建的。

  • 用于替换旧索引文件的新索引文件的空间。旧索引文件在修复操作开始时被截断,所以通常忽略这个空间。这个空间必须在与原始数据文件相同的文件系统上可用。

  • 当使用--recover--sort-recover(但不是使用--safe-recover)时,需要磁盘上的排序空间。这个空间在临时目录中分配(由TMPDIR--tmpdir=*dir_name*指定)。以下公式给出所需空间的量:

    (*largest_key* + *row_pointer_length*) * *number_of_rows* * 2
    

    你可以使用myisamchk -dv tbl_name来检查键的长度和row_pointer_length(参见第 6.6.4 节,“使用 myisamchk 获取表信息”)。row_pointer_lengthnumber_of_rows的值分别是表描述中的Datafile pointerData records值。要确定largest_key的值,请检查表描述中的Key行。Len列指示每个键部分的字节数。对于多列索引,键大小是所有键部分的Len值之和。

如果在修复过程中遇到磁盘空间问题,你可以尝试使用--safe-recover代替--recover

6.6.5 myisamlog — 显示 MyISAM 日志文件内容

dev.mysql.com/doc/refman/8.0/en/myisamlog.html

myisamlog 处理 MyISAM 日志文件的内容。要创建这样一个文件,请使用 --log-isam=log_file`` 选项启动服务器。

像这样调用 myisamlog

myisamlog [*options*] [*file_name* [*tbl_name*] ...]

默认操作是更新 (-u)。如果执行恢复操作 (-r),则会执行所有写入操作,可能还包括更新和删除操作,并且只计算错误。如果没有给出 log_file 参数,则默认日志文件名为 myisam.log。如果在命令行上命名了表,则只更新这些表。

myisamlog 支持以下选项:

  • -?, -I

    显示帮助信息并退出。

  • -c *N*

    仅执行 N 条命令。

  • -f *N*

    指定最大打开文件数。

  • -F *filepath/*

    指定带有尾随斜杠的文件路径。

  • -i

    在退出之前显示额外信息。

  • -o *offset*

    指定起始偏移量。

  • -p *N*

    从路径中移除 N 个组件。

  • -r

    执行恢复操作。

  • -R *record_pos_file record_pos*

    指定记录位置文件和记录位置。

  • -u

    执行更新操作。

  • -v

    详细模式。打印有关程序操作的更多输出。可以多次使用此选项以产生更多输出。

  • -w *write_file*

    指定写入文件。

  • -V

    显示版本信息。

6.6.6 myisampack — 生成压缩的只读 MyISAM 表

原文:dev.mysql.com/doc/refman/8.0/en/myisampack.html

myisampack 实用程序用于压缩MyISAM表。myisampack 通过分别压缩表中的每一列来工作。通常,myisampack 将数据文件压缩 40% 到 70%。

当稍后使用表时,服务器会读取解压缩列所需的信息到内存中。这样在访问单个行时会有更好的性能,因为你只需要解压缩一个行。

MySQL 在可能的情况下使用mmap()对压缩表执行内存映射。如果mmap()无法工作,MySQL 将退回到正常的读/写文件操作。

请注意以下事项:

  • 如果使用外部锁定禁用启动了mysqld服务器,如果在打包过程中服务器可能更新表,那么调用myisampack不是一个好主意。最安全的方法是在服务器停止时压缩表。

  • 对表进行打包后,它变为只读。这通常是有意为之的(比如在 CD 上访问打包的表时)。

  • myisampack 不支持分区表。

像这样调用myisampack

myisampack [*options*] *file_name* ...

每个文件名参数应该是一个索引(.MYI)文件的名称。如果你不在数据库目录中,你应该指定文件的路径名。可以省略.MYI扩展名。

在使用myisampack压缩表后,请使用myisamchk -rq重建其索引。6.6.4 “myisamchk — MyISAM 表维护实用程序”。

myisampack 支持以下选项。它还读取选项文件并支持处理它们的选项,详见 6.2.2.3 “影响选项文件处理的命令行选项”。

  • --help, -?

    命令行格式 --help

    显示帮助消息并退出。

  • --backup, -b

    命令行格式 --backup

    使用名称*tbl_name*.OLD备份每个表的数据文件。

  • --character-sets-dir=*dir_name*

    命令行格式 --character-sets-dir=dir_name
    类型 目录名称

    安装字符集的目录。参见第 12.15 节,“字符集配置”。

  • --debug[=*debug_options*], -# [*debug_options*]

    命令行格式 --debug[=debug_options]
    类型 字符串
    默认值 d:t:o

    写入调试日志。典型的debug_options字符串是d:t:o,*file_name*。默认为d:t:o

    只有在使用WITH_DEBUG构建 MySQL 时才可用此选项。由 Oracle 提供的 MySQL 发布二进制文件使用此选项构建。

  • --force, -f

    命令行格式 --force

    即使生成的打包表比原始表大,或者如果之前调用myisampack的中间文件存在,也要生成打包表。(myisampack在压缩表时在数据库目录中创建一个名为*tbl_name*.TMD的中间文件。如果终止myisampack,可能不会删除.TMD文件。)通常,如果发现*tbl_name*.TMD存在,myisampack会因此而出错。使用--forcemyisampack仍会打包表。

  • --join=*big_tbl_name*, -j *big_tbl_name*

    命令行格式 --join=big_tbl_name
    类型 字符串

    将命令行中命名的所有表连接成一个单独的打包表big_tbl_name。所有要合并的表必须具有相同的结构(相同的列名和类型,相同的索引等)。

    在连接操作之前,big_tbl_name不能存在。要合并到big_tbl_name的命令行中命名的所有源表必须存在。源表用于连接操作,但不会被修改。

  • --silent, -s

    命令行格式 --silent

    静默模式。仅在发生错误时输出。

  • --test, -t

    命令行格式 --test

    不实际打包表,只是测试打包。

  • --tmpdir=*dir_name*, -T *dir_name*

    命令行格式 --tmpdir=dir_name
    类型 目录名称

    使用命名目录作为myisampack创建临时文件的位置。

  • --verbose, -v

    命令行格式 --verbose

    详细模式。写入有关打包操作进展及其结果的信息。

  • --version, -V

    命令行格式 --version

    显示版本信息并退出。

  • --wait, -w

    命令行格式 --wait

    如果表正在使用,则等待并重试。如果mysqld服务器是在禁用外部锁定的情况下调用的,则在打包过程中服务器可能更新表时,调用myisampack不是一个好主意。

以下命令序列展示了一个典型的表压缩会话:

$> ls -l station.*
-rw-rw-r--   1 jones    my         994128 Apr 17 19:00 station.MYD
-rw-rw-r--   1 jones    my          53248 Apr 17 19:00 station.MYI

$> myisamchk -dvv station

MyISAM file:     station
Isam-version:  2
Creation time: 1996-03-13 10:08:58
Recover time:  1997-02-02  3:06:43
Data records:              1192  Deleted blocks:              0
Datafile parts:            1192  Deleted data:                0
Datafile pointer (bytes):     2  Keyfile pointer (bytes):     2
Max datafile length:   54657023  Max keyfile length:   33554431
Recordlength:               834
Record format: Fixed length

table description:
Key Start Len Index   Type                 Root  Blocksize    Rec/key
1   2     4   unique  unsigned long        1024       1024          1
2   32    30  multip. text                10240       1024          1

Field Start Length Type
1     1     1
2     2     4
3     6     4
4     10    1
5     11    20
6     31    1
7     32    30
8     62    35
9     97    35
10    132   35
11    167   4
12    171   16
13    187   35
14    222   4
15    226   16
16    242   20
17    262   20
18    282   20
19    302   30
20    332   4
21    336   4
22    340   1
23    341   8
24    349   8
25    357   8
26    365   2
27    367   2
28    369   4
29    373   4
30    377   1
31    378   2
32    380   8
33    388   4
34    392   4
35    396   4
36    400   4
37    404   1
38    405   4
39    409   4
40    413   4
41    417   4
42    421   4
43    425   4
44    429   20
45    449   30
46    479   1
47    480   1
48    481   79
49    560   79
50    639   79
51    718   79
52    797   8
53    805   1
54    806   1
55    807   20
56    827   4
57    831   4

$> myisampack station.MYI
Compressing station.MYI: (1192 records)
- Calculating statistics

normal:     20  empty-space:   16  empty-zero:     12  empty-fill:  11
pre-space:   0  end-space:     12  table-lookups:   5  zero:         7
Original trees:  57  After join: 17
- Compressing file
87.14%
Remember to run myisamchk -rq on compressed tables

$> myisamchk -rq station
- check record delete-chain
- recovering (with sort) MyISAM-table 'station'
Data records: 1192
- Fixing index 1
- Fixing index 2

$> mysqladmin -uroot flush-tables

$> ls -l station.*
-rw-rw-r--   1 jones    my         127874 Apr 17 19:00 station.MYD
-rw-rw-r--   1 jones    my          55296 Apr 17 19:04 station.MYI

$> myisamchk -dvv station

MyISAM file:     station
Isam-version:  2
Creation time: 1996-03-13 10:08:58
Recover time:  1997-04-17 19:04:26
Data records:               1192  Deleted blocks:              0
Datafile parts:             1192  Deleted data:                0
Datafile pointer (bytes):      3  Keyfile pointer (bytes):     1
Max datafile length:    16777215  Max keyfile length:     131071
Recordlength:                834
Record format: Compressed

table description:
Key Start Len Index   Type                 Root  Blocksize    Rec/key
1   2     4   unique  unsigned long       10240       1024          1
2   32    30  multip. text                54272       1024          1

Field Start Length Type                         Huff tree  Bits
1     1     1      constant                             1     0
2     2     4      zerofill(1)                          2     9
3     6     4      no zeros, zerofill(1)                2     9
4     10    1                                           3     9
5     11    20     table-lookup                         4     0
6     31    1                                           3     9
7     32    30     no endspace, not_always              5     9
8     62    35     no endspace, not_always, no empty    6     9
9     97    35     no empty                             7     9
10    132   35     no endspace, not_always, no empty    6     9
11    167   4      zerofill(1)                          2     9
12    171   16     no endspace, not_always, no empty    5     9
13    187   35     no endspace, not_always, no empty    6     9
14    222   4      zerofill(1)                          2     9
15    226   16     no endspace, not_always, no empty    5     9
16    242   20     no endspace, not_always              8     9
17    262   20     no endspace, no empty                8     9
18    282   20     no endspace, no empty                5     9
19    302   30     no endspace, no empty                6     9
20    332   4      always zero                          2     9
21    336   4      always zero                          2     9
22    340   1                                           3     9
23    341   8      table-lookup                         9     0
24    349   8      table-lookup                        10     0
25    357   8      always zero                          2     9
26    365   2                                           2     9
27    367   2      no zeros, zerofill(1)                2     9
28    369   4      no zeros, zerofill(1)                2     9
29    373   4      table-lookup                        11     0
30    377   1                                           3     9
31    378   2      no zeros, zerofill(1)                2     9
32    380   8      no zeros                             2     9
33    388   4      always zero                          2     9
34    392   4      table-lookup                        12     0
35    396   4      no zeros, zerofill(1)               13     9
36    400   4      no zeros, zerofill(1)                2     9
37    404   1                                           2     9
38    405   4      no zeros                             2     9
39    409   4      always zero                          2     9
40    413   4      no zeros                             2     9
41    417   4      always zero                          2     9
42    421   4      no zeros                             2     9
43    425   4      always zero                          2     9
44    429   20     no empty                             3     9
45    449   30     no empty                             3     9
46    479   1                                          14     4
47    480   1                                          14     4
48    481   79     no endspace, no empty               15     9
49    560   79     no empty                             2     9
50    639   79     no empty                             2     9
51    718   79     no endspace                         16     9
52    797   8      no empty                             2     9
53    805   1                                          17     1
54    806   1                                           3     9
55    807   20     no empty                             3     9
56    827   4      no zeros, zerofill(2)                2     9
57    831   4      no zeros, zerofill(1)                2     9

myisampack显示以下类型的信息:

  • 正常

    未使用额外打包的列数。

  • 空格空间

    只包含空格值的列数。这些占用一个位。

  • 空零

    只包含二进制零值的列数。这些占用一个位。

  • 空填充

    不占据其类型的完整字节范围的整数列数。这些将被更改为较小的类型。例如,BIGINT - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT")列(八个字节)可以存储为TINYINT - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT")列(一个字节),如果所有值都在-128127的范围内。

  • 前置空格

    存储有前导空格的十进制列数。在这种情况下,每个值都包含前导空格的计数。

  • 结束空间

    具有大量尾随空格的列数。在这种情况下,每个值都包含尾随空格的计数。

  • 表查找

    该列只有少量不同的值,这些值在 Huffman 压缩之前被转换为ENUM

  • 所有值都为零的列数。

  • 原始树

    初始 Huffman 树的数量。

  • 连接后

    在连接树以节省一些标题空间后剩余的不同 Huffman 树的数量。

表格压缩后,由myisamchk -dvv显示的Field行包括有关每列的附加信息:

  • 类型

    数据类型。值可能包含以下描述符之一:

    • 常量

      所有行具有相同的值。

    • 无末尾空格

      不要存储末尾空格。

    • 无末尾空格,非始终

      不要存储末尾空格,也不要对所有值进行末尾空格压缩。

    • 无末尾空格,无空值

      不要存储末尾空格。不要存储空值。

    • 表查找

      该列已转换为ENUM

    • 零填充(*N*)

      值中最重要的N字节始终为 0 且不存储。

    • 无零值

      不要存储零值。

    • 始终为零

      零值使用一位存储。

  • Huff 树

    与列相关的哈夫曼树的编号。

  • 哈夫曼树中使用的位数。

运行myisampack后,使用myisamchk重新创建任何索引。此时,您还可以对索引块进行排序,并创建 MySQL 优化器需要的统计信息,以使其更高效地工作:

myisamchk -rq --sort-index --analyze *tbl_name*.MYI

将打包的表安装到 MySQL 数据库目录后,应执行mysqladmin flush-tables以强制mysqld开始使用新表。

要解压缩打包的表,请使用--unpack选项到myisamchk

posted @ 2024-06-23 00:40  绝不原创的飞龙  阅读(4)  评论(0编辑  收藏  举报