MySQL8-中文参考-五-
MySQL8 中文参考(五)
6.5 客户端程序
6.5.1 mysql — MySQL 命令行客户端
6.5.2 mysqladmin — 一个 MySQL 服务器管理程序
6.5.3 mysqlcheck — 一个表维护程序
6.5.4 mysqldump — 一个数据库备份程序
6.5.5 mysqlimport — 一个数据导入程序
6.5.6 mysqlpump — 一个数据库备份程序
6.5.7 mysqlshow — 显示数据库、表和列信息
6.5.8 mysqlslap — 一个负载仿真客户端
本节描述连接到 MySQL 服务器的客户端程序。
6.5.1 mysql — MySQL 命令行客户端
6.5.1.1 mysql 客户端选项
6.5.1.2 mysql 客户端命令
6.5.1.3 mysql 客户端日志记录
6.5.1.4 mysql 客户端服务器端帮助
6.5.1.5 从文本文件执行 SQL 语句
6.5.1.6 mysql 客户端技巧
mysql 是一个带有输入行编辑功能的简单 SQL shell。它支持交互和非交互使用。在交互使用时,查询结果以 ASCII 表格格式呈现。在非交互使用时(例如作为过滤器),结果以制表符分隔的格式呈现。可以使用命令选项更改输出格式。
如果由于结果集过大而导致内存不足而出现问题,请使用 --quick
选项。这会强制mysql逐行从服务器检索结果,而不是检索整个结果集并在显示之前将其缓冲在内存中。这是通过在客户端/服务器库中使用 mysql_use_result()
C API 函数而不是 mysql_store_result()
来返回结果集来完成的。
注意
或者,MySQL Shell 提供对 X DevAPI 的访问。详情请参阅 MySQL Shell 8.0。
使用mysql非常简单。请在命令解释器的提示符下按以下方式调用它:
mysql *db_name*
或者:
mysql --user=*user_name* --password *db_name*
在这种情况下,您需要根据mysql 显示的提示输入密码:
Enter password: *your_password*
然后输入一个 SQL 语句,以 ;
、\g
或 \G
结尾,然后按 Enter 键。
输入 Control+C 可以中断当前语句(如果有的话),或者取消任何部分输入行。
您可以像这样在脚本文件(批处理文件)中执行 SQL 语句:
mysql *db_name* < *script.sql* > *output.tab*
在 Unix 上,mysql 客户端会将交互执行的语句记录到历史文件中。请参阅 6.5.1.3 “mysql 客户端日志记录”。
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html
6.5.1.1 mysql 客户端选项
mysql 支持以下选项,可以在命令行或选项文件的 [mysql]
和 [client]
组中指定。有关 MySQL 程序使用的选项文件的信息,请参见 6.2.2.2 使用选项文件。
表 6.12 mysql 客户端选项
选项名称 | 描述 | 引入 | 废弃 |
---|---|---|---|
--auto-rehash | 启用自动重新哈希 | ||
--auto-vertical-output | 启用自动垂直结果集显示 | ||
--batch | 不使用历史文件 | ||
--binary-as-hex | 以十六进制表示显示二进制值 | ||
--binary-mode | 禁用 \r\n - 到 - \n 的转换和将 \0 视为查询结束 | ||
--bind-address | 使用指定的网络接口连接到 MySQL 服务器 | ||
--character-sets-dir | 安装字符集的目录 | ||
--column-names | 在结果中写入列名 | ||
--column-type-info | 显示结果集元数据 | ||
--comments | 是否保留或剥离发送到服务器的语句中的注释 | ||
--compress | 压缩客户端和服务器之间发送的所有信息 | 8.0.18 | |
--compression-algorithms | 连接到服务器的允许压缩算法 | 8.0.18 | |
--connect-expired-password | 指示服务器客户端可以处理过期密码沙盒模式 | ||
--connect-timeout | 连接超时前的秒数 | ||
--database | 要使用的数据库 | ||
--debug | 写入调试日志;仅在 MySQL 构建时支持调试时可用 | ||
--debug-check | 程序退出时打印调试信息 | ||
--debug-info | 程序退出时打印调试信息、内存和 CPU 统计 | ||
--default-auth | 要使用的认证插件 | ||
--default-character-set | 指定默认字符集 | ||
--defaults-extra-file | 除了通常的选项文件外,读取命名的选项文件 | ||
--defaults-file | 仅读取命名的选项文件 | ||
--defaults-group-suffix | 选项组后缀值 | ||
--delimiter | 设置语句分隔符 | ||
--dns-srv-name | 使用 DNS SRV 查找主机信息 | 8.0.22 | |
--enable-cleartext-plugin | 启用明文认证插件 | ||
--execute | 执行语句并退出 | ||
--fido-register-factor | 必须进行注册的多因素认证因素 | 8.0.27 | 8.0.35 |
--force | 即使发生 SQL 错误也继续 | ||
--get-server-public-key | 从服务器请求 RSA 公钥 | ||
--help | 显示帮助信息并退出 | ||
--histignore | 指定要忽略记录的语句模式 | ||
--host | MySQL 服务器所在的主机 | ||
--html | 生成 HTML 输出 | ||
--ignore-spaces | 忽略函数名后的空格 | ||
--init-command | 连接后要执行的 SQL 语句 | ||
--line-numbers | 为错误写入行号 | ||
--load-data-local-dir | LOAD DATA LOCAL 语句中命名文件的目录 | 8.0.21 | |
--local-infile | 启用或禁用 LOAD DATA 的 LOCAL 功能 | ||
--login-path | 从.mylogin.cnf 中读取登录路径选项 | ||
--max-allowed-packet | 发送到服务器或从服务器接收的最大数据包长度 | ||
--max-join-size | 在使用--safe-updates 时,联接中的行的自动限制 | ||
--named-commands | 启用命名的 mysql 命令 | ||
--net-buffer-length | TCP/IP 和套接字通信的缓冲区大小 | ||
--network-namespace | 指定网络命名空间 | 8.0.22 | |
--no-auto-rehash | 禁用自动重新哈希 | ||
--no-beep | 发生错误时不发出蜂鸣声 | ||
--no-defaults | 不读取任何选项文件 | ||
--oci-config-file | 定义 Oracle Cloud Infrastructure CLI 配置文件的替代位置。 | 8.0.27 | |
--one-database | 忽略除了命令行上指定的默认数据库之外的语句 | ||
--pager | 用于分页查询输出的给定命令 | ||
--password | 连接到服务器时使用的密码 | ||
--password1 | 连接到服务器时使用的第一个多因素身份验证密码 | 8.0.27 | |
--password2 | 连接到服务器时使用的第二个多因素身份验证密码 | 8.0.27 | |
--password3 | 连接到服务器时使用的第三个多因素身份验证密码 | 8.0.27 | |
--pipe | 使用命名管道连接服务器(仅限 Windows) | ||
--plugin-authentication-kerberos-client-mode | 允许在 Windows 上通过 MIT Kerberos 库进行 GSSAPI 可插拔身份验证 | 8.0.32 | |
--plugin-dir | 插件安装目录 | ||
--port | 连接的 TCP/IP 端口号 | ||
--print-defaults | 打印默认选项 | ||
--prompt | 设置指定格式的提示符 | ||
--protocol | 使用的传输协议 | ||
--quick | 不缓存每个查询结果 | ||
--raw | 写入列值而不进行转义转换 | ||
--reconnect | 如果与服务器的连接丢失,自动尝试重新连接 | ||
--safe-updates, --i-am-a-dummy | 仅允许指定键值的 UPDATE 和 DELETE 语句 | ||
--select-limit | 在使用 --safe-updates 时 SELECT 语句的自动限制 | ||
--server-public-key-path | 包含 RSA 公钥的文件的路径名 | ||
--shared-memory-base-name | 共享内存连接的共享内存名称(仅限 Windows) | ||
--show-warnings | 如果有任何警告,则在每个语句后显示警告 | ||
--sigint-ignore | 忽略 SIGINT 信号(通常是键入 Control+C 的结果) | ||
--silent | 静默模式 | ||
--skip-auto-rehash | 禁用自动重新哈希 | ||
--skip-column-names | 在结果中不写入列名 | ||
--skip-line-numbers | 跳过错误的行号 | ||
--skip-named-commands | 禁用命名的 mysql 命令 | ||
--skip-pager | 禁用分��� | ||
--skip-reconnect | 禁用重新连接 | ||
--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 | |
--syslog | 将交互式语句记录到 syslog | ||
--table | 以表格格式显示输出 | ||
--tee | 将输出的副本追加到指定文件 | ||
--tls-ciphersuites | 加密连接的允许的 TLSv1.3 密码套件 | 8.0.16 | |
--tls-version | 加密连接的允许的 TLS 协议 | ||
--unbuffered | 在每个查询后刷新缓冲区 | ||
--user | 连接到服务器时要使用的 MySQL 用户名 | ||
--verbose | 详细模式 | ||
--version | 显示版本信息并退出 | ||
--vertical | 垂直打印查询输出行(每列值一行) | ||
--wait | 如果无法建立连接,则等待并重试,而不是中止 | ||
--xml | 生成 XML 输出 | ||
--zstd-compression-level | 使用 zstd 压缩连接到服务器的压缩级别 | 8.0.18 | |
选项名称 | 描述 | 引入 | 废弃 |
-
--help
,-?
命令行格式 --help
显示帮助信息并退出。
-
--auto-rehash
命令行格式 --auto-rehash
禁用方式 skip-auto-rehash
启用自动 rehash。默认情况下,此选项已启用,可实现数据库、表和列名的自动补全。使用
--disable-auto-rehash
来禁用 rehash。这会使mysql启动更快,但如果要使用名称补全,则必须发出rehash
命令或其\#
快捷方式。要完成一个名称,输入第一部分并按 Tab 键。如果名称是明确的,mysql会自动完成。否则,您可以再次按 Tab 键查看以您已输入的内容开头的可能名称。如果没有默认数据库,则不会发生自动完成。
注意
此功能需要使用readline库编译的 MySQL 客户端。通常,readline库在 Windows 上不可用。
-
--auto-vertical-output
命令行格式 --auto-vertical-output
如果结果集对当前窗口太宽,则使其以垂直方式显示,否则使用正常的表格格式显示。(这适用于以
;
或\G
结尾的语句。) -
--batch
,-B
命令行格式 --batch
使用制表符作为列分隔符打印结果,每行显示在新行上。使用此选项,mysql不使用历史文件。
批处理模式导致非表格输出格式和特殊字符的转义。可以通过使用原始模式来禁用转义;请参阅
--raw
选项的描述。 -
--binary-as-hex
命令行格式 --binary-as-hex
类型 布尔值 默认值(≥ 8.0.19) 非交互模式下为 FALSE
默认值(≤ 8.0.18) FALSE
当给定此选项时,mysql会使用十六进制表示法(
0x*
value*
)显示二进制数据。无论整体输出显示格式是表格、垂直、HTML 还是 XML,都会发生这种情况。当启用
--binary-as-hex
选项时,会影响所有二进制字符串的显示,包括由CHAR()
和UNHEX()
等函数返回的字符串。以下示例演示了使用 ASCII 码A
(65 十进制,41 十六进制)的情况:-
禁用
--binary-as-hex
:mysql> SELECT CHAR(0x41), UNHEX('41'); +------------+-------------+ | CHAR(0x41) | UNHEX('41') | +------------+-------------+ | A | A | +------------+-------------+
-
启用
--binary-as-hex
:mysql> SELECT CHAR(0x41), UNHEX('41'); +------------------------+--------------------------+ | CHAR(0x41) | UNHEX('41') | +------------------------+--------------------------+ | 0x41 | 0x41 | +------------------------+--------------------------+
要编写一个二进制字符串表达式,以便无论是否启用
--binary-as-hex
,都将其显示为字符字符串,请使用以下技术:-
CHAR()
函数有一个USING *
charset*
子句:mysql> SELECT CHAR(0x41 USING utf8mb4); +--------------------------+ | CHAR(0x41 USING utf8mb4) | +--------------------------+ | A | +--------------------------+
-
更一般地,使用
CONVERT()
将表达式转换为给定的字符集:mysql> SELECT CONVERT(UNHEX('41') USING utf8mb4); +------------------------------------+ | CONVERT(UNHEX('41') USING utf8mb4) | +------------------------------------+ | A | +------------------------------------+
截至 MySQL 8.0.19 版本,当mysql以交互模式运行时,默认情况下启用此选项。此外,当隐式或显式启用该选项时,
status
(或\s
)命令的输出包括以下行:Binary data as: Hexadecimal
要禁用十六进制表示法,请使用
--skip-binary-as-hex
。 -
-
--binary-mode
命令行格式 --binary-mode
此选项有助于处理可能包含
BLOB
值的mysqlbinlog输出。默认情况下,mysql将语句字符串中的\r\n
转换为\n
,并将\0
解释为语句终止符。--binary-mode
禁用这两个功能。它还在非交互模式下禁用所有mysql命令,除了在输入通过管道传输到mysql或使用source
命令加载时的charset
和delimiter
。 -
--bind-address=*
ip_address*
命令行格式 --bind-address=ip_address
在具有多个网络接口的计算机上,使用此选项选择连接到 MySQL 服务器的接口。
-
--character-sets-dir=*
dir_name*
命令行格式 --character-sets-dir=dir_name
类型 目录���称 安装字符集的目录。请参阅第 12.15 节,“字符集配置”。
-
--column-names
命令行格式 --column-names
写入结果中的列名。
-
--column-type-info
命令行格式 --column-type-info
显示结果集元数据。此信息对应于 C API
MYSQL_FIELD
数据结构的内容。请参阅 C API 基本数据结构。 -
--comments
,-c
命令行格式 --comments
类型 布尔值 默认值 FALSE
是否剥离或保留发送到服务器的语句中的注释。默认为
--skip-comments
(剥离注释),启用则使用--comments
(保留注释)。注意
无论是否给出此选项,mysql客户端始终向服务器传递优化器提示。
注释剥离已弃用。预计此功能及其控制选项将在未来的 MySQL 版本中被移除。
-
--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 中添加。
-
--connect-expired-password
命令行格式 --connect-expired-password
表示客户端可以处理沙盒模式,如果用于连接的帐户密码已过期。这对于非交互式调用 mysql 可能很有用,因为通常情况下,服务器会断开尝试使用帐户密码已过期的帐户连接的非交互式客户端。(参见 第 8.2.16 节,“服务器处理过期密码”。)
-
--connect-timeout=*
value*
命令行格式 --connect-timeout=value
类型 数值 默认值 0
连接超时之前的秒数。(默认值为
0
。) -
--database=*
db_name*
,-D *
db_name*
命令行格式 --database=dbname
类型 字符串 要使用的数据库。这主要在选项文件中很有用。
-
--debug[=*
debug_options*]
,-# [*
debug_options*]
命令行格式 --debug[=debug_options]
类型 字符串 默认值 d:t:o,/tmp/mysql.trace
写一个调试日志。一个典型的
debug_options
字符串是d:t:o,*
file_name*
。默认值是d:t:o,/tmp/mysql.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 节,“可插拔认证”。
-
--default-character-set=*
charset_name*
命令行格式 --default-character-set=charset_name
类型 字符串 将
charset_name
用作客户端和连接的默认字符集。如果操作系统使用一个字符集,而mysql客户端默认使用另一个字符集,则此选项可能很有用。在这种情况下,输出可能格式不正确。通常可以通过使用此选项强制客户端使用系统字符集来解决此类问题。
欲了解更多信息,请参阅第 12.4 节,“连接字符集和校对规则”,以及第 12.15 节,“字符集配置”。
-
--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
的组。例如,mysql通常会读取[client]
和[mysql]
组。如果给定此选项为--defaults-group-suffix=_other
,mysql还会读取[client_other]
和[mysql_other]
组。关于此选项文件和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
--delimiter=*
str*
命令行格式 --delimiter=str
类型 字符串 默认值 ;
设置语句分隔符。默认为分号字符(
;
)。 -
--disable-named-commands
禁用命名命令。仅使用
\*
形式,或仅在以分号(;
)结尾的行的开头使用命名命令。mysql默认启用此选项。但是,即使使用此选项,长格式命令仍然可以从第一行起作用。请参见第 6.5.1.2 节,“mysql 客户端命令”。 -
--dns-srv-name=*
name*
命令行格式 --dns-srv-name=name
引入版本 8.0.22 类型 字符串 指定确定用于建立与 MySQL 服务器的连接的候选主机的 DNS SRV 记录的名称。有关 MySQL 中 DNS SRV 支持的信息,请参见 第 6.2.6 节,“使用 DNS SRV 记录连接到服务器”。
假设 DNS 配置了
example.com
域的此 SRV 信息:Name TTL Class Priority Weight Port Target _mysql._tcp.example.com. 86400 IN SRV 0 5 3306 host1.example.com _mysql._tcp.example.com. 86400 IN SRV 0 10 3306 host2.example.com _mysql._tcp.example.com. 86400 IN SRV 10 5 3306 host3.example.com _mysql._tcp.example.com. 86400 IN SRV 20 5 3306 host4.example.com
要使用该 DNS SRV 记录,请像这样调用 mysql:
mysql --dns-srv-name=_mysql._tcp.example.com
mysql 然后尝试连接组中的每个服务器,直到建立成功的连接。仅当无法建立到任何服务器的连接时才会发生连接失败。DNS SRV 记录中的优先级和权重值确定应尝试的服务器顺序。
当使用
--dns-srv-name
调用时,mysql 仅尝试建立 TCP 连接。如果同时给出
--dns-srv-name
选项和--host
选项,则--dns-srv-name
选项优先于--host
选项。如果在 mysql 启动时同时给出了--dns-srv-name
选项以指定 DNS SRV 记录,并且随后在运行时使用connect
命令并指定主机名参数,则该主机名优先于任何--dns-srv-name
选项。此选项是在 MySQL 8.0.22 中添加的。
-
--enable-cleartext-plugin
命令行格式 --enable-cleartext-plugin
类型 布尔 默认值 FALSE
启用
mysql_clear_password
明文认证插件。(请参阅 第 8.4.1.4 节,“客户端端明文插件认证”。) -
--execute=*
statement*
,-e *
statement*
命令行格式 --execute=statement
类型 字符串 执行语句并退出。默认输出格式类似于使用
--batch
生成的格式。有关示例,请参见 第 6.2.2.1 节,“在命令行上使用选项”。使用此选项,mysql 不使用历史文件。 -
--fido-register-factor=*
value*
命令行格式 --fido-register-factor=value
引入 8.0.27 已弃用 8.0.35 类型 字符串 注意
从 MySQL 8.0.35 开始,此选项已弃用,并可能在未来的 MySQL 发行版中删除。
必须执行 FIDO 设备注册的因素或因素。此选项值必须是单个值,或用逗号分隔的两个值。每个值必须是 2 或 3,因此允许的选项值为
'2'
、'3'
、'2,3'
和'3,2'
。例如,需要为第三个认证因素注册的帐户调用 mysql 客户端如下:
mysql --user=*user_name* --fido-register-factor=3
需要为第二个和第三个认证因素注册的帐户调用 mysql 客户端如下:
mysql --user=*user_name* --fido-register-factor=2,3
如果注册成功,将建立连接。如果存在待注册的认证因素,在尝试连接到服务器时,连接将进入待注册模式。在这种情况下,断开连接并重新连接,使用正确的
--fido-register-factor
值完成注册。注册是一个包括 启动注册 和 完成注册 步骤的两步过程。启动注册步骤执行以下语句:
ALTER USER *user* *factor* INITIATE REGISTRATION
该语句返回一个包含 32 字节挑战、用户名和依赖方 ID(参见
authentication_fido_rp_id
)的结果集。完成注册步骤执行以下语句:
ALTER USER *user* *factor* FINISH REGISTRATION SET CHALLENGE_RESPONSE AS '*auth_string*'
该语句完成注册并将以下信息作为
auth_string
的一部分发送到服务器:认证器数据,X.509 格式的可选证书,以及签名。必须在单个连接中执行启动和注册步骤,因为客户端在启动步骤期间接收到的挑战会保存到客户端连接处理程序中。如果注册步骤由不同的连接执行,注册将失败。
--fido-register-factor
选项执行启动和注册步骤,避免了上述失败场景,并避免了手动执行ALTER USER
启动和注册语句。--fido-register-factor
选项仅适用于 mysql 客户端和 MySQL Shell。其他 MySQL 客户端程序不支持该选项。有关相关信息,请参阅使用 FIDO 认证。
-
--force
,-f
命令行格式 --force
即使发生 SQL 错误,也继续执行。
-
--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 可插拔认证”。 -
--histignore
命令行格式 --histignore=pattern_list
类型 字符串 一个或多个以冒号分隔的模式列表,用于指定在记录日志时要忽略的语句。这些模式将添加到默认模式列表(
"*IDENTIFIED*:*PASSWORD*"
)中。为此选项指定的值会影响写入历史文件和syslog
(如果给出了--syslog
选项)的语句的记录。有关更多信息,请参阅第 6.5.1.3 节,“mysql 客户端日志记录”。 -
--host=*
host_name*
,-h *
host_name*
命令行格式 --host=host_name
类型 字符串 默认值 localhost
连接到给定主机上的 MySQL 服务器。
如果同时给出
--dns-srv-name
选项和--host
选项,则--dns-srv-name
选项优先于--host
选项。--dns-srv-name
导致连接建立使用mysql_real_connect_dns_srv()
C API 函数而不是mysql_real_connect()
。但是,如果在运行时随后使用connect
命令并指定主机名参数,则该主机名优先于在 mysql 启动时给出的任何--dns-srv-name
选项以指定 DNS SRV 记录。 -
--html
,-H
命��行格式 --html
生成 HTML 输出。
-
--ignore-spaces
,-i
命令行格式 --ignore-spaces
忽略函数名后的空格。其效果在
IGNORE_SPACE
SQL 模式的讨论中有描述(参见第 7.1.11 节,“服务器 SQL 模式”)。 -
--init-command=str
命令行格式 --init-command=str
连接到服务器后要执行的单个 SQL 语句。如果启用了自动重新连接,则在重新连接发生后再次执行该语句。
-
--line-numbers
命令行格式 --line-numbers
禁用者 skip-line-numbers
为错误写入行号。使用
--skip-line-numbers
禁用此功能。 -
--load-data-local-dir=*
dir_name*
命令行格式 --load-data-local-dir=dir_name
引入版本 8.0.21 类型 目录名称 默认值 空字符串
此选项影响客户端端的
LOCAL
能力,用于LOAD DATA
操作。它指定了LOAD DATA LOCAL
语句中命名的文件必须位于的目录。--load-data-local-dir
的效果取决于是否启用或禁用了LOCAL
数据加载:-
如果启用了
LOCAL
数据加载,无论是在 MySQL 客户端库中默认启用还是通过指定--local-infile[=1]
,都会忽略--load-data-local-dir
选项。 -
如果禁用了
LOCAL
数据加载,无论是默认在 MySQL 客户端库中还是通过指定--local-infile=0
,都会应用--load-data-local-dir
选项。
当应用
--load-data-local-dir
时,选项值指定了必须位于其中的本地数据文件的目录。无论底层文件系统的大小写敏感性如何,目录路径名和要加载的文件的路径名的比较都是区分大小写的。如果选项值为空字符串,则不指定任何目录,结果是不允许进行本地数据加载。例如,要显式禁用除位于
/my/local/data
目录中的文件之外的���地数据加载,请像这样调用mysql:mysql --local-infile=0 --load-data-local-dir=/my/local/data
当同时给出
--local-infile
和--load-data-local-dir
时,它们给出的顺序并不重要。在mysql中成功使用
LOCAL
加载操作还需要服务器允许本地加载;请参阅第 8.1.6 节,“LOAD DATA LOCAL 的安全考虑”--load-data-local-dir
选项是在 MySQL 8.0.21 中添加的。 -
-
命令行格式 `--local-infile[={0 1}]` 类型 布尔值 默认值 FALSE
默认情况下,
LOAD DATA
的LOCAL
功能由编译到 MySQL 客户端库中的默认值确定。要显式启用或禁用LOCAL
数据加载,请使用--local-infile
选项。当不带值给出时,该选项启用LOCAL
数据加载。当作为--local-infile=0
或--local-infile=1
给出时,该选项禁用或启用LOCAL
数据加载。如果禁用了
LOCAL
功能,则可以使用--load-data-local-dir
选项来允许在指定目录中的文件进行受限制的本地加载。在mysql中成功使用
LOCAL
加载操作还需要服务器允许本地加载;请参阅第 8.1.6 节,“LOAD DATA LOCAL 的安全考虑” -
--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=*
value*
命令行格式 --max-allowed-packet=value
类型 数值 默认值 16777216
客户端/服务器通信缓冲区的最大大小。默认值为 16MB,最大值为 1GB。
-
--max-join-size=*
value*
命令行格式 --max-join-size=value
类型 数值 默认值 1000000
在使用
--safe-updates
时,连接中联接的行的自动限制。(默认值为 1,000,000。) -
--named-commands
,-G
命令行格式 --named-commands
被 skip-named-commands
禁用启用命名mysql命令。允许长格式命令,而不仅仅是短格式命令。例如,
quit
和\q
都被识别。使用--skip-named-commands
来禁用命名命令。请参见第 6.5.1.2 节,“mysql 客户端命令”。 -
--net-buffer-length=*
value*
命令行格式 --net-buffer-length=value
类型 数值 默认值 16384
TCP/IP 和套接字通信的缓冲区大小。(默认值为 16KB。)
-
--network-namespace=*
name*
命令行格式 --network-namespace=name
引入版本 8.0.22 类型 字符串 用于 TCP/IP 连接的网络命名空间。如果省略,连接将使用默认(全局)命名空间。有关网络命名空间的信息,请参见第 7.1.14 节,“网络命名空间支持”。
此选项已添加到 MySQL 8.0.22 中。仅在实现网络命名空间支持的平台上可用。
-
--no-auto-rehash
,-A
命令行格式 --no-auto-rehash
已弃用 是 这与
--skip-auto-rehash
具有相同的效果。请参阅--auto-rehash
的描述。 -
--no-beep
,-b
命令行格式 --no-beep
当发生错误时不发出蜂鸣声。
-
--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 节,“影响选项文件处理的命令行选项”。
-
--one-database
,-o
命令行格式 --one-database
忽略除了在默认数据库为命令行上指定的数据库时发生的语句之外的所有语句。此选项是基本的,应谨慎使用。语句过滤仅基于
USE
语句。最初,mysql执行输入中的语句,因为在命令行上指定一个数据库
db_name
等同于在输入开头插入USE *
db_name*
。然后,对于每个遇到的USE
语句,mysql根据命令行上的数据库名接受或拒绝后续语句。语句的内容并不重要。假设mysql被调用来处理这组语句:
DELETE FROM db2.t2; USE db2; DROP TABLE db1.t1; CREATE TABLE db1.t1 (i INT); USE db1; INSERT INTO t1 (i) VALUES(1); CREATE TABLE db2.t1 (j INT);
如果命令行是mysql --force --one-database db1,mysql处理输入如下:
-
DELETE
语句会被执行,因为默认数据库是db1
,尽管该语句指定了不同数据库中的表。 -
DROP TABLE
和CREATE TABLE
语句不会被执行,因为默认数据库不是db1
,尽管这些语句指定了db1
中的表。 -
INSERT
和CREATE TABLE
语句会被执行,因为默认数据库是db1
,尽管CREATE TABLE
语句指定了不同数据库中的表。
-
-
命令行格式 --pager[=command]
被 skip-pager
禁用--password[=password]
类型 字符串 使用给定的命令来分页查询输出。如果省略命令,则默认分页器是您的
PAGER
环境变量的值。有效的分页器包括 less、more、cat [> filename] 等。此选项仅在 Unix 上以及仅在交互模式下有效。要禁用分页,请使用--skip-pager
。Section 6.5.1.2, “mysql Client Commands” 进一步讨论了输出分页。 -
--password[=*
password*]
,-p[*
password*]
命令行格式 --password[=password]
类型 字符串 用于连接到服务器的 MySQL 账户的密码。密码值是可选的。如果没有提供,mysql 会提示输入密码。如果提供了密码,
--password=
或-p
与后面的密码之间不能有空格。如果未指定密码选项,则默认情况下不发送密码。在命令行上指定密码应被视为不安全。为了避免在命令行上提供密码,请使用选项文件。参见 Section 8.1.2.1, “End-User Guidelines for Password Security”。
要明确指定没有密码,并且 mysql 不应提示输入密码,使用
--skip-password
选项。 -
用于连接到服务器的 MySQL 帐户的多因素认证因子 1 的密码。密码值是可选的。如果未给出,则mysql会提示输入密码。如果给出,则
--password1=
和后面的密码之间不能有空格。如果未指定密码选项,则默认情况下不发送密码。在命令行上指定密码应被视为不安全。为了避免在命令行上提供密码,请使用选项文件。请参阅第 8.1.2.1 节,“密码安全的最终用户指南”。
要明确指定没有密码,并且mysql不应提示密码,请使用
--skip-password1
选项。--password1
和--password
是同义词,--skip-password1
和--skip-password
也是同义词。 -
用于连接到服务器的 MySQL 帐户的多因素认证因子 2 的密码。此选项的语义与
--password1
的语义类似;有关详细信息,请参阅该选项的描述。 -
用于连接到服务器的 MySQL 帐户的多因素认证因子 3 的密码。此选项的语义与
--password1
的语义类似;有关详细信息,请参阅该选项的描述。 -
--pipe
,-W
命令行格式 --pipe
类型 字符串 在 Windows 上,使用命名管道连接到服务器。此选项仅在服务器启动时启用了支持命名管道连接的
named_pipe
系统变量时才适用。此外,进行连接的用户必须是由named_pipe_full_access_group
系统变量指定的 Windows 组的成员。 -
--plugin-authentication-kerberos-client-mode=*
value*
命令行格式 --plugin-authentication-kerberos-client-mode
引入版本 8.0.32 类型 字符串 默认值 SSPI
有效值 GSSAPI``SSPI
在 Windows 上,
authentication_kerberos_client
认证插件支持此插件选项。它提供了两个客户端用户可以在运行时设置的可能值:SSPI
和GSSAPI
。客户端端插件选项的默认值使用了 Security Support Provider Interface(SSPI),它能够从 Windows 内存缓存中获取凭据。另外,客户端用户可以选择支持通过 Windows 上的 MIT Kerberos 库使用 Generic Security Service Application Program Interface(GSSAPI)的模式。GSSAPI 能够获取先前使用kinit命令生成的缓存凭据。
更多信息,请参见在 GSSAPI 模式下的 Windows 客户端命令。
-
--plugin-dir=*
dir_name*
命令行格式 --plugin-dir=dir_name
类型 目录名称 查找插件的目录。如果使用
--default-auth
选项指定了一个认证插件但mysql找不到它,请指定此选项。参见第 8.2.17 节,“可插拔认证”。 -
--port=*
port_num*
,-P *
port_num*
命令行格式 --port=port_num
类型 数字 默认值 3306
用于 TCP/IP 连接的端口号。
-
--print-defaults
命令行格式 --print-defaults
打印程序名称以及从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
--prompt=*
format_str*
命令行格式 --prompt=format_str
类型 字符串 默认值 mysql>
将提示设置为指定的格式。默认值为
mysql>
。提示可以包含的特殊序列在第 6.5.1.2 节,“mysql 客户端命令”中描述。 -
--protocol={TCP|SOCKET|PIPE|MEMORY}
命令行格式 --protocol=type
类型 字符串 默认值 [见文本]
有效值 TCP``SOCKET``PIPE``MEMORY
用于连接到服务器的传输协议。当其他连接参数通常导致使用不希望使用的协议时,这很有用。有关允许值的详细信息,请参见第 6.2.7 节,“连接传输协议”。
-
--quick
,-q
命令行格式 --quick
不要缓存每个查询结果,按接收顺序打印每行。如果输出被暂停,这可能会减慢服务器速度。使用此选项,mysql 不会使用历史文件。
默认情况下,mysql 在生成任何输出之前会获取所有结果行;在存储这些行时,它会从每一列的实际值中依次计算出最大列长度。在打印输出时,它会使用这个最大值来格式化输出。当指定
--quick
时,mysql 在开始之前没有行来计算长度,因此使用最大长度。在下面的示例中,表t1
有一个类型为BIGINT
- INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT") 的单列,包含 4 行。默认输出宽度为 9 个字符;这个宽度等于返回行中任何列值中的最大字符数(5),再加上用作填充的空格和用作列分隔符的|
字符,每个都是 2 个字符)。使用--quick
选项时的输出宽度为 25 个字符;这等于表示-9223372036854775808
所需的字符数,这是可以存储在(有符号的)BIGINT
列中的最长可能值,或者是 19 个字符,再加上用于填充和列分隔符的 4 个字符。可以在这里看到差异:$> mysql -t test -e "SELECT * FROM t1" +-------+ | c1 | +-------+ | 100 | | 1000 | | 10000 | | 10 | +-------+ $> mysql --quick -t test -e "SELECT * FROM t1" +----------------------+ | c1 | +----------------------+ | 100 | | 1000 | | 10000 | | 10 | +----------------------+
-
--raw
,-r
命令行格式 --raw
对于表格输出,围绕列的“框”使得一个列值可以与另一个区分开。对于非表格输出(例如在批处理模式下生成的输出或给出
--batch
或--silent
选项时生成的输出),特殊字符在输出中被转义,以便可以轻松识别它们。换行符、制表符、NUL
和反斜杠分别被写为\n
、\t
、\0
和\\
。--raw
选项禁用了这种字符转义。以下示例演示了表格与非表格输出以及使用原始模式禁用转义的情况:
% mysql mysql> SELECT CHAR(92); +----------+ | CHAR(92) | +----------+ | \ | +----------+ % mysql -s mysql> SELECT CHAR(92); CHAR(92) \\ % mysql -s -r mysql> SELECT CHAR(92); CHAR(92) \
-
--reconnect
命令行格式 --reconnect
禁用者 skip-reconnect
如果与服务器的连接丢失,自动尝试重新连接。每次连接丢失时都会尝试重新连接一次。要抑制重新连接行为,请使用
--skip-reconnect
。 -
--safe-updates
,--i-am-a-dummy
,-U
命令行格式 --safe-updates``--i-am-a-dummy
类型 布尔值 默认值 FALSE
如果启用此选项,则不使用
WHERE
子句中的键或LIMIT
子句的UPDATE
和DELETE
语句将产生错误。此外,对于产生(或估计产生)非常大结果集的SELECT
语句也会施加限制。如果在选项文件中设置了此选项,则可以在命令行上使用--skip-safe-updates
来覆盖它。有关此选项的更多信息,请参见 使用安全更新模式 (--safe-updates)")。 -
--select-limit=*
value*
命令行格式 --select-limit=value
类型 数值 默认值 1000
当使用
--safe-updates
时,SELECT
语句的自动限制。(默认值为 1,000)。 -
--server-public-key-path=*
file_name*
命令行格式 --server-public-key-path=file_name
类型 文件名 PEM 格式文件路径名,其中包含服务器所需的客户端端公钥的副本,用于 RSA 密钥对密码交换。此选项适用于使用
sha256_password
或caching_sha2_password
认证插件进行身份验证的客户端。对于不使用这些插件进行身份验证的帐户,此选项将被忽略。如果不使用基于 RSA 的密码交换,例如客户端使用安全连接连接到服务器时,此选项也将被忽略。如果给定
--server-public-key-path=*
file_name*
并指定有效的公钥文件,则优先于--get-server-public-key
。对于
sha256_password
,此选项仅在使用 OpenSSL 构建 MySQL 时适用。有关
sha256_password
和caching_sha2_password
插件的信息,请参见 第 8.4.1.3 节,“SHA-256 可插拔认证” 和 第 8.4.1.2 节,“缓存 SHA-2 可插拔认证”。 -
--shared-memory-base-name=*
name*
命令行格式 --shared-memory-base-name=name
特定平台 Windows 在 Windows 上,用于使用共享内存进行到本地服务器的连接的共享内存名称。默认值为
MYSQL
。共享内存名称区分大小写。只有在服务器启动时启用了支持共享内存连接的
shared_memory
系统变量时,此选项才适用。 -
--show-warnings
命令行格式 --show-warnings
导致在每个语句后显示警告(如果有)。此选项适用于交互和批处理模式。
-
--sigint-ignore
命令行格式 --sigint-ignore
忽略
SIGINT
信号(通常是键入Control+C的结果)。如果没有此选项,键入Control+C会中断当前语句(如果有的话),否则会取消任何部分输入行。
-
--silent
,-s
命令行格式 --silent
静默模式。产生较少输出。可以多次使用此选项以产生越来越少的输出。
此选项会导致非表格输出格式和特殊字符的转义。可以通过使用原始模式来禁用转义;请参阅
--raw
选项的描述。 -
--skip-column-names
,-N
命令行格式 --skip-column-names
不在结果中写入列名。使用此选项会导致输出右对齐,如下所示:
$> echo "SELECT * FROM t1" | mysql -t test +-------+ | c1 | +-------+ | a,c,d | | c | +-------+ $> echo "SELECT * FROM t1" | ./mysql -uroot -Nt test +-------+ | a,c,d | | c | +-------+
-
--skip-line-numbers
,-L
命令行格式 --skip-line-numbers
不为错误写入行号。在想要比较包含错误消息的结果文件时很有用。
-
--socket=*
路径*
,-S *
路径*
命令行格式 --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
设置为ON
或STRICT
会导致客户端在启动时产生警告并在非 FIPS 模式下运行。从 MySQL 8.0.34 开始,此选项已弃用。预计在将来的 MySQL 版本中将其移除。
-
-
--syslog
,-j
命令行格式 --syslog
此选项导致 mysql 将交互语句发送到系统日志设施。在 Unix 上,这是
syslog
;在 Windows 上,这是 Windows 事件日志。记录消息出现的目的地取决于系统。在 Linux 上,目的地通常是/var/log/messages
文件。这是在 Linux 上使用
--syslog
生成的输出示例。此输出已经过格式化以便阅读;每个记录的消息实际上占据一行。Mar 7 12:39:25 myhost MysqlClient[20824]: SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23, DB_SERVER:'127.0.0.1', DB:'--', QUERY:'USE test;' Mar 7 12:39:28 myhost MysqlClient[20824]: SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23, DB_SERVER:'127.0.0.1', DB:'test', QUERY:'SHOW TABLES;'
更多信息,请参阅 第 6.5.1.3 节,“mysql 客户端日志记录”。
-
--table
,-t
命令行格式 --table
以表格格式显示输出。这是交互使用的默认设置,但也可用于在批处理模式下生成表格输出。
-
--tee=*
file_name*
命令行格式 --tee=file_name
类型 文件名 将输出的副本附加到给定文件。此选项仅在交互模式下有效。第 6.5.1.2 节,“mysql 客户端命令”,进一步讨论了 tee 文件。
-
--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 协议和密码”。
-
--unbuffered
,-n
命令行格式 --unbuffered
在每个查询后刷新缓冲区。
-
--user=*
user_name*
,-u *
user_name*
命令行格式 --user=user_name
类型 字符串 用于连接到服务器的 MySQL 帐户的用户名。
-
--verbose
,-v
命令行格式 --verbose
冗长模式。产生关于程序操作的更多输出。可以多次使用此选项以产生更多输出。(例如,
-v -v -v
即使在批处理模式下也会产生表格输出格式。) -
--version
,-V
命令行格式 --version
显示版本信息并退出。
-
--vertical
,-E
命令行格式 --vertical
将查询输出行垂直显示(每列值一行)。如果不使用此选项,可以通过在语句末尾加上
\G
来指定单个语句的垂直输出。 -
--wait
,-w
命令行格式 --wait
如果无法建立连接,则等待并重试,而不是中止。
-
--xml
,-X
命令行格式 --xml
生成 XML 输出。
<field name="*column_name*">NULL</field>
当使用
--xml
与 mysql 一起使用时,输出与 mysqldump--xml
的匹配。详情请参见 第 6.5.4 节,“mysqldump — 数据库备份程序”。XML 输出还使用 XML 命名空间,如下所示:
$> mysql --xml -uroot -e "SHOW VARIABLES LIKE 'version%'" <?xml version="1.0"?> <resultset statement="SHOW VARIABLES LIKE 'version%'" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <row> <field name="Variable_name">version</field> <field name="Value">5.0.40-debug</field> </row> <row> <field name="Variable_name">version_comment</field> <field name="Value">Source distribution</field> </row> <row> <field name="Variable_name">version_compile_machine</field> <field name="Value">i686</field> </row> <row> <field name="Variable_name">version_compile_os</field> <field name="Value">suse-linux-gnu</field> </row> </resultset>
-
--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.1.2 mysql 客户端命令
mysql将您发出的每个 SQL 语句发送到服务器执行。还有一组mysql本身解释的命令。要查看这些命令的列表,请在mysql>
提示符处键入help
或\h
:
mysql> help
List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
? (\?) Synonym for `help'.
clear (\c) Clear the current input statement.
connect (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
edit (\e) Edit command with $EDITOR.
ego (\G) Send command to mysql server, display result vertically.
exit (\q) Exit mysql. Same as quit.
go (\g) Send command to mysql server.
help (\h) Display this help.
nopager (\n) Disable pager, print to stdout.
notee (\t) Don't write into outfile.
pager (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print (\p) Print current command.
prompt (\R) Change your mysql prompt.
quit (\q) Quit mysql.
rehash (\#) Rebuild completion hash.
source (\.) Execute an SQL script file. Takes a file name as an argument.
status (\s) Get status information from the server.
system (\!) Execute a system shell command.
tee (\T) Set outfile [to_outfile]. Append everything into given
outfile.
use (\u) Use another database. Takes database name as argument.
charset (\C) Switch to another charset. Might be needed for processing
binlog with multi-byte charsets.
warnings (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
resetconnection(\x) Clean session context.
query_attributes Sets string parameters (name1 value1 name2 value2 ...)
for the next query to pick up.
ssl_session_data_print Serializes the current SSL session data to stdout
or file.
For server side help, type 'help contents'
如果使用--binary-mode
选项调用mysql,除了非交互模式下的charset
和delimiter
命令外,所有mysql命令都被禁用(用于输入到mysql或使用source
命令加载的情况)。
每个命令都有长格式和短格式。长格式不区分大小写;短格式区分大小写。长格式可以跟随可选的分号终止符,但短格式不应该。
多行/* ... */
注释中不支持使用短格式命令。单行/*! ... */
版本注释中可以使用短格式命令,/*+ ... */
提示优化器的注释也可以使用,这些注释存储在对象定义中。如果担心优化器提示注释可能存储在对象定义中,导致重新加载时使用mysql
执行这些命令,要么使用带有--binary-mode
选项调用mysql,要么使用除mysql之外的重新加载客户端。
-
help [*
arg*]
,\h [*
arg*]
,\? [*
arg*]
,? [*
arg*]
显示列出可用mysql命令的帮助消息。
如果向
help
命令提供参数,mysql将其用作搜索字符串,以从 MySQL 参考手册的内容中访问服务器端帮助。更多信息,请参阅 Section 6.5.1.4, “mysql Client Server-Side Help”。 -
charset *
charset_name*
,\C *
charset_name*
更改默认字符集并发出
SET NAMES
语句。如果mysql以启用自动重新连接的方式运行(不建议),因为指定的字符集用于重新连接,所以客户端和服务器上的字符集保持同步。 -
clear
,\c
清除当前输入。如果更改主意不执行正在输入的语句,请使用此选项。
-
connect [*
db_name* [*
host_name*]]
,\r [*
db_name* [*
host_name*]]
重新连接到服务器。可以提供可选的数据库名称和主机名参数以指定默认数据库或运行服务器的主机。如果省略,则使用当前值。
如果
connect
命令指定了主机名参数,则该主机优先于在mysql启动时指定的任何--dns-srv-name
选项来指定 DNS SRV 记录。 -
delimiter *
str*
,\d *
str*
更改mysql解释为 SQL 语句之间的分隔符的字符串。默认为分号字符(
;
)。分隔符字符串可以在
delimiter
命令行上指定为未引用或引用的参数。引用可以使用单引号('
)、双引号("
)或反引号(```sql) characters. To include a quote within a quoted string, either quote the string with a different quote character or escape the quote with a backslash (\
) character. Backslash should be avoided outside of quoted strings because it is the escape character for MySQL. For an unquoted argument, the delimiter is read up to the first space or end of line. For a quoted argument, the delimiter is read up to the matching quote on the line.mysql interprets instances of the delimiter string as a statement delimiter anywhere it occurs, except within quoted strings. Be careful about defining a delimiter that might occur within other words. For example, if you define the delimiter as
X
, it is not possible to use the wordINDEX
in statements. mysql interprets this asINDE
followed by the delimiterX
.When the delimiter recognized by mysql is set to something other than the default of
;
, instances of that character are sent to the server without interpretation. However, the server itself still interprets;
as a statement delimiter and processes statements accordingly. This behavior on the server side comes into play for multiple-statement execution (see Multiple Statement Execution Support), and for parsing the body of stored procedures and functions, triggers, and events (see Section 27.1, “Defining Stored Programs”).
-
edit
,\e
Edit the current input statement. mysql checks the values of the
EDITOR
andVISUAL
environment variables to determine which editor to use. The default editor is vi if neither variable is set.The
edit
command works only in Unix. -
ego
,\G
Send the current statement to the server to be executed and display the result using vertical format.
-
exit
,\q
Exit mysql.
-
go
,\g
Send the current statement to the server to be executed.
-
nopager
,\n
Disable output paging. See the description for
pager
.The
nopager
command works only in Unix. -
notee
,\t
Disable output copying to the tee file. See the description for
tee
. -
nowarning
,\w
Disable display of warnings after each statement.
-
pager [*
command*]
,\P [*
command*]
Enable output paging. By using the
--pager
option when you invoke mysql, it is possible to browse or search query results in interactive mode with Unix programs such as less, more, or any other similar program. If you specify no value for the option, mysql checks the value of thePAGER
environment variable and sets the pager to that. Pager functionality works only in interactive mode.Output paging can be enabled interactively with the
pager
command and disabled withnopager
. The command takes an optional argument; if given, the paging program is set to that. With no argument, the pager is set to the pager that was set on the command line, orstdout
if no pager was specified.Output paging works only in Unix because it uses the
popen()
function, which does not exist on Windows. For Windows, thetee
option can be used instead to save query output, although it is not as convenient aspager
for browsing output in some situations. -
print
,\p
Print the current input statement without executing it.
-
prompt [*
str*]
,\R [*
str*]
Reconfigure the mysql prompt to the given string. The special character sequences that can be used in the prompt are described later in this section.
If you specify the
prompt
command with no argument, mysql resets the prompt to the default ofmysql>
. -
query_attributes *
name* *
value* [*
name* *
value* ...]
Define query attributes that apply to the next query sent to the server. For discussion of the purpose and use of query attributes, see Section 11.6, “Query Attributes”.
The
query_attributes
command follows these rules:-
The format and quoting rules for attribute names and values are the same as for the
delimiter
command. -
The command permits up to 32 attribute name/value pairs. Names and values may be up to 1024 characters long. If a name is given without a value, an error occurs.
-
If multiple
query_attributes
commands are issued prior to query execution, only the last command applies. After sending the query, mysql clears the attribute set. -
If multiple attributes are defined with the same name, attempts to retrieve the attribute value have an undefined result.
-
An attribute defined with an empty name cannot be retrieved by name.
-
If a reconnect occurs while mysql executes the query, mysql restores the attributes after reconnecting so the query can be executed again with the same attributes.
-
-
quit
,\q
Exit mysql.
-
rehash
,\#
Rebuild the completion hash that enables database, table, and column name completion while you are entering statements. (See the description for the
--auto-rehash
option.) -
resetconnection
,\x
Reset the connection to clear the session state. This includes clearing any current query attributes defined using the
query_attributes
command.Resetting a connection has effects similar to
mysql_change_user()
or an auto-reconnect except that the connection is not closed and reopened, and re-authentication is not done. See mysql_change_user(), and Automatic Reconnection Control.This example shows how
resetconnection
clears a value maintained in the session state:mysql> SELECT LAST_INSERT_ID(3); +-------------------+ | LAST_INSERT_ID(3) | | --- | +-------------------+ | 3 | | --- | +-------------------+ mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | | --- | +------------------+ | 3 | | --- | +------------------+ mysql> resetconnection; mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | | --- | +------------------+ | 0 | | --- | +------------------+ ```sql
-
source *
file_name*
,\. *
file_name*
Read the named file and executes the statements contained therein. On Windows, specify path name separators as
/
or\\
.Quote characters are taken as part of the file name itself. For best results, the name should not include space characters.
-
ssl_session_data_print [*
file_name*]
Fetches, serializes, and optionally stores the session data of a successful connection. The optional file name and arguments may be given to specify the file to store serialized session data. If omitted, the session data is printed to
stdout
.If the MySQL session is configured for reuse, session data from the file is deserialized and supplied to the
connect
command to reconnect. When the session is reused successfully, thestatus
command contains a row showingSSL session reused: true
while the client remains reconnected to the server. -
status
,\s
Provide status information about the connection and the server you are using. If you are running with
--safe-updates
enabled,status
also prints the values for the mysql variables that affect your queries. -
system *
command*
,\! *
command*
Execute the given command using your default command interpreter.
Prior to MySQL 8.0.19, the
system
command works only in Unix. As of 8.0.19, it also works on Windows. -
tee [*
file_name*]
,\T [*
file_name*]
By using the
--tee
option when you invoke mysql, you can log statements and their output. All the data displayed on the screen is appended into a given file. This can be very useful for debugging purposes also. mysql flushes results to the file after each statement, just before it prints its next prompt. Tee functionality works only in interactive mode.You can enable this feature interactively with the
tee
command. Without a parameter, the previous file is used. Thetee
file can be disabled with thenotee
command. Executingtee
again re-enables logging. -
use *
db_name*
,\u *
db_name*
Use
db_name
as the default database. -
warnings
,\W
Enable display of warnings after each statement (if there are any).
Here are a few tips about the pager
command:
-
You can use it to write to a file and the results go only to the file:
mysql> pager cat > /tmp/log.txt ```sql You can also pass any options for the program that you want to use as your pager:
mysql> pager less -n -i -S
-
In the preceding example, note the
-S
option. You may find it very useful for browsing wide query results. Sometimes a very wide result set is difficult to read on the screen. The-S
option to less can make the result set much more readable because you can scroll it horizontally using the left-arrow and right-arrow keys. You can also use-S
interactively within less to switch the horizontal-browse mode on and off. For more information, read the less manual page:人少 ```sql
-
The
-F
and-X
options may be used with less to cause it to exit if output fits on one screen, which is convenient when no scrolling is necessary:mysql> pager less -n -i -S -F -X ```sql
-
You can specify very complex pager commands for handling query output:
mysql> pager cat | tee /dr1/tmp/res.txt \ | tee /dr2/tmp/res2.txt | less -n -i -S ```sql In this example, the command would send query results to two files in two different directories on two different file systems mounted on `/dr1` and `/dr2`, yet still display the results onscreen using **less**.
You can also combine the tee
and pager
functions. Have a tee
file enabled and pager
set to less, and you are able to browse the results using the less program and still have everything appended into a file the same time. The difference between the Unix tee
used with the pager
command and the mysql built-in tee
command is that the built-in tee
works even if you do not have the Unix tee available. The built-in tee
also logs everything that is printed on the screen, whereas the Unix tee used with pager
does not log quite that much. Additionally, tee
file logging can be turned on and off interactively from within mysql. This is useful when you want to log some queries to a file, but not others.
The prompt
command reconfigures the default mysql>
prompt. The string for defining the prompt can contain the following special sequences.
| Option | Description |
| \C
| The current connection identifier |
| \c
| A counter that increments for each statement you issue |
| \D
| The full current date |
| \d
| The default database |
| \h
| The server host |
| \l
| The current delimiter |
| \m
| Minutes of the current time |
| \n
| A newline character |
| \O
| The current month in three-letter format (Jan, Feb, …) |
| \o
| The current month in numeric format |
| \P
| am/pm |
| \p
| The current TCP/IP port or socket file |
| \R
| The current time, in 24-hour military time (0–23) |
| \r
| The current time, standard 12-hour time (1–12) |
| \S
| Semicolon |
| \s
| Seconds of the current time |
| \T
| Print an asterisk (*
) if the current session is inside a transaction block (from MySQL 8.0.28) |
| \t
| A tab character |
| \U
| Your full *
user_name*@*
host_name*
account name |
| \u
| Your user name |
| \v
| The server version |
| \w
| The current day of the week in three-letter format (Mon, Tue, …) |
| \Y
| The current year, four digits |
| \y
| The current year, two digits |
| \_
| A space |
| \
| A space (a space follows the backslash) |
| \'
| Single quote |
| \"
| Double quote |
| \\
| A literal \
backslash character |
| \*
x*
| x
, for any “x
” not listed above |
| Option | Description |
You can set the prompt in several ways:
-
Use an environment variable. You can set the
MYSQL_PS1
environment variable to a prompt string. For example:export MYSQL_PS1="(\u@\h) [\d]> " ```sql
-
Use a command-line option. You can set the
--prompt
option on the command line to mysql. For example:$> mysql --prompt="(\u@\h) [\d]> " (user@host) [database]> ```sql
-
Use an option file. You can set the
prompt
option in the[mysql]
group of any MySQL option file, such as/etc/my.cnf
or the.my.cnf
file in your home directory. For example:[mysql] prompt=(\\u@\\h) [\\d]>\\_ ```sql In this example, note that the backslashes are doubled. If you set the prompt using the `prompt` option in an option file, it is advisable to double the backslashes when using the special prompt options. There is some overlap in the set of permissible prompt options and the set of special escape sequences that are recognized in option files. (The rules for escape sequences in option files are listed in Section 6.2.2.2, “Using Option Files”.) The overlap may cause you problems if you use single backslashes. For example, `\s` is interpreted as a space rather than as the current seconds value. The following example shows how to define a prompt within an option file to include the current time in `*`hh:mm:ss`*>` format:
[mysql]
prompt="\r:\m:\s> "
-
Set the prompt interactively. You can change your prompt interactively by using the
prompt
(or\R
) command. For example:mysql> prompt (\u@\h) [\d]>\_ PROMPT 设置为'(\u@\h) [\d]>\_' (*user*@*host*) [*database*]> (*user*@*host*) [*database*]> prompt 返回到默认的 mysql 提示> mysql>
6.5.1.3 mysql 客户端日志记录
mysql客户端可以对交互式执行的语句进行以下类型的记录:
-
在 Unix 上,mysql将语句写入历史文件。默认情况下,此文件在您的主目录中命名为
.mysql_history
。要指定不同的文件,请设置MYSQL_HISTFILE
环境变量的值。 -
在所有平台上,如果给定
--syslog
选项,mysql会将语句写入系统日志设施。在 Unix 上,这是syslog
;在 Windows 上,这是 Windows 事件日志。记录消息出现的目的地取决于系统。在 Linux 上,目的地通常是/var/log/messages
文件。
以下讨论描述适用于所有日志类型的特征,并提供每种日志类型的特定信息。
-
日志记录方式
-
控制历史文件
-
syslog 日志特性
日志记录方式
对于每个启用的日志记录目的地,语句记录如下进行:
-
只有在交互式执行时才记录语句。例如,从文件或管道中读取时,语句是非交互式的。还可以通过使用
--batch
或--execute
选项来抑制语句记录。 -
如果语句与“忽略”列表中的任何模式匹配,则会被忽略并不记录。此列表稍后描述。
-
mysql会单独记录每个非忽略的非空语句行。
-
如果一个非忽略的语句跨越多行(不包括结束分隔符),mysql会将这些行连接起来形成完整的语句,将换行符映射为空格,并记录结果,再加上一个分隔符。
因此,跨越多行的输入语句可能会被记录两次。考虑以下输入:
mysql> SELECT
-> 'Today is'
-> ,
-> CURDATE()
-> ;
在这种情况下,mysql记录“SELECT”、“'Today is'”、“,”、“CURDATE()”和“;”行,然后将它们映射到SELECT 'Today is' , CURDATE()
,再加上一个分隔符。因此,这些行会出现在记录的输出中:
SELECT
'Today is'
,
CURDATE()
;
SELECT 'Today is' , CURDATE();
mysql 在记录日志时会忽略与“ignore”列表中任何模式匹配的语句。默认情况下,模式列表是"*IDENTIFIED*:*PASSWORD*"
,用于忽略涉及密码的语句。模式匹配不区分大小写。在模式中,两个字符是特殊的:
-
?
匹配任何单个字符。 -
*
匹配零个或多个字符的任意序列。
要指定额外的模式,请使用--histignore
选项或设置MYSQL_HISTIGNORE
环境变量。(如果两者都指定,则选项值优先。)该值应该是一个或多个以冒号分隔的模式列表,这些模式将附加到默认模式列表。
在命令行上指定的模式可能需要用引号引起或转义,以防止您的命令解释器将其视为特殊字符。例如,为了除了忽略涉及密码的语句外,还抑制UPDATE
和DELETE
语句的记录,请像这样调用mysql:
mysql --histignore="*UPDATE*:*DELETE*"
控制历史文件
.mysql_history
文件应受到限制访问模式的保护,因为可能会写入敏感信息,例如包含密码的 SQL 语句的文本。当使用上箭头键召回历史记录时,文件中的语句可从mysql客户端访问。请参阅禁用交互式历史记录。
如果您不想维护历史文件,请先删除.mysql_history
(如果存在)。然后使用以下任一技术防止它再次被创建:
-
将
MYSQL_HISTFILE
环境变量设置为/dev/null
。要使此设置每次登录时生效,请将其放入您的 shell 启动文件之一。 -
创建
.mysql_history
作为指向/dev/null
的符号链接;这只需要做一次:ln -s /dev/null $HOME/.mysql_history
syslog 日志特性
如果给出--syslog
选项,mysql将交互式语句写入系统日志设施。消息记录具有以下特性。
记录发生在“信息”级别。这对应于 Unix/Linux 上syslog
功能的LOG_INFO
优先级和 Windows 事件日志的EVENTLOG_INFORMATION_TYPE
。请参考您的系统文档以配置您的日志功能。
消息大小限制为 1024 字节。
消息由标识符MysqlClient
后跟这些值组成:
-
SYSTEM_USER
操作系统用户名(登录名)或如果用户未知则为
--
。 -
MYSQL_USER
MySQL 用户名(使用
--user
选项指定)或者--
如果用户未知。 -
CONNECTION_ID
:客户端连接标识符。这与会话中的
CONNECTION_ID()
函数值相同。 -
DB_SERVER
服务器主机或者
--
如果主机未知。 -
DB
默认数据库或者
--
如果没有选择数据库。 -
QUERY
记录语句的文本。
这是在 Linux 上使用--syslog
生成的输出示例。此输出已经格式化以便阅读;每个记录的消息实际上占据一行。
Mar 7 12:39:25 myhost MysqlClient[20824]:
SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23,
DB_SERVER:'127.0.0.1', DB:'--', QUERY:'USE test;'
Mar 7 12:39:28 myhost MysqlClient[20824]:
SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23,
DB_SERVER:'127.0.0.1', DB:'test', QUERY:'SHOW TABLES;'
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-server-side-help.html
6.5.1.4 mysql 客户端服务器端帮助
mysql> help *search_string*
如果您向help
命令提供参数,mysql将其用作搜索字符串,以从 MySQL 参考手册的内容中访问服务器端帮助。该命令的正确操作要求mysql
数据库中的帮助表已初始化为帮助主题信息(请参阅 Section 7.1.17, “服务器端帮助支持”)。
如果搜索字符串没有匹配项,搜索失败:
mysql> help me
Nothing found
Please try to run 'help contents' for a list of all accessible topics
使用帮助目录查看帮助类别列表:
mysql> help contents
You asked for help about help category: "Contents"
For more information, type 'help <item>', where <item> is one of the
following categories:
Account Management
Administration
Data Definition
Data Manipulation
Data Types
Functions
Functions and Modifiers for Use with GROUP BY
Geographic Features
Language Structure
Plugins
Storage Engines
Stored Routines
Table Maintenance
Transactions
Triggers
如果搜索字符串匹配多个项目,mysql将显示匹配主题的列表:
mysql> help logs
Many help items for your request exist.
To make a more specific request, please type 'help <item>',
where <item> is one of the following topics:
SHOW
SHOW BINARY LOGS
SHOW ENGINE
SHOW LOGS
使用一个主题作为搜索字符串,查看该主题的帮助条目:
mysql> help show binary logs
Name: 'SHOW BINARY LOGS'
Description:
Syntax:
SHOW BINARY LOGS
SHOW MASTER LOGS
Lists the binary log files on the server. This statement is used as
part of the procedure described in [purge-binary-logs], that shows how
to determine which logs can be purged.
mysql> SHOW BINARY LOGS;
+---------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000015 | 724935 | Yes |
| binlog.000016 | 733481 | Yes |
+---------------+-----------+-----------+
搜索字符串可以包含通配符字符%
和_
。这些字符的含义与使用LIKE
运算符执行的模式匹配操作相同。例如,HELP rep%
返回以rep
开头的主题列表:
mysql> HELP rep%
Many help items for your request exist.
To make a more specific request, please type 'help <item>',
where <item> is one of the following
topics:
REPAIR TABLE
REPEAT FUNCTION
REPEAT LOOP
REPLACE
REPLACE FUNCTION
原文:
dev.mysql.com/doc/refman/8.0/en/mysql-batch-commands.html
6.5.1.5 从文本文件执行 SQL 语句
mysql客户端通常是以交互方式使用的,就像这样:
mysql *db_name*
但是,您也可以将 SQL 语句放在一个文件中,然后告诉mysql从该文件中读取输入。要这样做,请创建一个包含您希望执行的语句的文本文件 text_file
。然后按照这里所示调用mysql:
mysql *db_name* < *text_file*
如果您在文件中将 USE *
db_name*
语句作为第一条语句,那么在命令行上指定数据库名称是不必要的:
mysql < text_file
如果您已经运行mysql,您可以使用 source
命令或 \.
命令执行一个 SQL 脚本文件:
mysql> source *file_name*
mysql> \. *file_name*
有时,您可能希望脚本向用户显示进度信息。为此,您可以插入如下语句:
SELECT '<info_to_display>' AS ' ';
所示语句输出 <info_to_display>
。
您还可以使用 --verbose
选项调用mysql,这会导致在产生结果之前显示每个语句。
mysql会忽略输入文件开头的 Unicode 字节顺序标记(BOM)字符。以前,它会读取它们并将它们发送到服务器,导致语法错误。BOM 的存在不会导致mysql更改其默认字符集。要这样做,请使用诸如 --default-character-set=utf8mb4
的选项调用mysql。
有关批处理模式的更多信息,请参见第 5.5 节,“在批处理模式下使用 mysql”。
6.5.1.6 mysql 客户端技巧
本节提供有关更有效使用 mysql 和 mysql 操作行为的技术信息。
-
输入行编辑
-
禁用交互式历史记录
-
Windows 上的 Unicode 支持
-
垂直显示查询结果
-
使用安全更新模式(--safe-updates)
-
禁用 mysql 自动重新连接
-
mysql 客户端解析器与服务器解析器
输入行编辑
mysql 支持输入行编辑,使您能够就地修改当前输入行或回忆先前输入的行。例如,左箭头 和 右箭头 键在当前输入行内水平移动,上箭头 和 下箭头 键在先前输入的行集合中上下移动。退格键 删除光标前的字符,输入新字符会在光标位置输入。要输入行,按 Enter 键。
在 Windows 上,编辑键序列与控制台窗口中支持的命令编辑相同。在 Unix 上,键序列取决于用于构建 mysql 的输入库(例如,libedit
或 readline
库)。
libedit
和 readline
库的文档可在线获取。要更改给定输入库允许的键序列集合,请在库启动文件中定义键绑定。这是位于您的主目录中的文件:对于 libedit
是 .editrc
,对于 readline
是 .inputrc
。
例如,在 libedit
中,Control+W 删除当前光标位置之前的所有内容,Control+U 删除整行。在 readline
中,Control+W 删除光标前的单词,Control+U 删除当前光标位置之前的所有内容。如果 mysql 是使用 libedit
构建的,喜欢这两个键的 readline
行为的用户可以将以下行放入 .editrc
文件中(必要时创建文件):
bind "^W" ed-delete-prev-word
bind "^U" vi-kill-line-prev
要查看当前的键绑定集,请在.editrc
的末尾暂时放置一行只写bind
。mysql 在启动时显示绑定。
禁用交互式历史记录
上箭头键可让您回忆当前和以前会话中的输入行。在共享控制台的情况下,此行为可能不合适。mysql支持根据主机平台部分或完全禁用交互式历史记录。
在 Windows 上,历史记录存储在内存中。Alt+F7删除当前历史缓冲区中存储的所有输入行。它还删除了显示在输入行前面的顺序号列表,该列表可以通过F7显示,并通过F9按编号召回。按下Alt+F7后输入的新输入行将重新填充当前历史缓冲区。清除缓冲区不会阻止记录到 Windows 事件查看器,如果使用--syslog
选项启动mysql。关闭控制台窗口也会清除当前历史缓冲区。
要在 Unix 上禁用交互式历史记录,首先删除.mysql_history
文件(如果存在的话,否则将回忆以前的条目)。然后使用--histignore="*"
选项启动mysql以忽略所有新的输入行。要重新启用回忆(和记录)行为,请重新启动mysql而不使用该选项。
如果阻止创建.mysql_history
文件(请参见控制历史文件),并使用--histignore="*"
启动mysql客户端,则完全禁用交互式历史记录设施。或者,如果省略--histignore
选项,则可以回忆在当前会话期间输入的输入行。
Windows 上的 Unicode 支持
Windows 提供基于 UTF-16LE 的 API,用于从控制台读取和写入;Windows 上的mysql客户端可以使用这些 API。Windows 安装程序在 MySQL 菜单中创建一个名为MySQL command line client - Unicode
的项目。此项目调用mysql客户端,并设置属性以通过控制台使用 Unicode 与 MySQL 服务器通信。
要手动利用此支持,请在使用兼容 Unicode 字体的控制台中运行mysql,并将默认字符集设置为与服务器通信支持的 Unicode 字符集:
-
打开一个控制台窗口。
-
转到控制台窗口属性,选择字体选项卡,并选择 Lucida Console 或其他兼容的 Unicode 字体。这是必要的,因为控制台窗口默认使用不适合 Unicode 的 DOS 点阵字体。
-
执行mysql.exe时,使用
--default-character-set=utf8mb4
(或utf8mb3
)选项。这个选项是必需的,因为utf16le
是不能用作客户端字符集的字符集之一。参见不允许的客户端字符集。
通过这些更改,mysql使用 Windows API 与控制台使用 UTF-16LE 进行通信,并使用 UTF-8 与服务器进行通信。(前面提到的菜单项设置了如上述的字体和字符集。)
为了避免每次运行mysql都要执行这些步骤,你可以创建一个快捷方式来调用mysql.exe。这个快捷方式应该将控制台字体设置为 Lucida Console 或其他兼容的 Unicode 字体,并传递--default-character-set=utf8mb4
(或utf8mb3
)选项给mysql.exe。
或者,创建一个仅设置控制台字体的快捷方式,并在你的my.ini
文件的[mysql]
组中设置字符集:
[mysql]
default-character-set=utf8mb4 # or utf8mb3
垂直显示查询结果
一些查询结果以垂直显示比通常的水平表格格式更易读。可以通过在查询末尾使用\G 而不是分号来垂直显示查询。例如,包含换行符的较长文本值通常使用垂直输出更容易阅读:
mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G
*************************** 1\. row ***************************
msg_nro: 3068
date: 2000-03-01 23:29:50
time_zone: +0200
mail_from: Jones
reply: jones@example.com
mail_to: "John Smith" <smith@example.com>
sbj: UTF-8
txt: >>>>> "John" == John Smith writes:
John> Hi. I think this is a good idea. Is anyone familiar
John> with UTF-8 or Unicode? Otherwise, I'll put this on my
John> TODO list and see what happens.
Yes, please do that.
Regards,
Jones
file: inbox-jani-1
hash: 190402944
1 row in set (0.09 sec)
使用安全更新模式(--safe-updates)
对于初学者,一个有用的启动选项是--safe-updates
(或--i-am-a-dummy
,效果相同)。安全更新模式对于可能已经发出UPDATE
或DELETE
语句但忘记在WHERE
子句中指定要修改的行时很有帮助。通常,这些语句会更新或删除表中的所有行。使用--safe-updates
,您只能通过指定标识它们的键值、LIMIT
子句或两者来修改行。这有助于防止意外发生。安全更新模式还限制产生(或估计产生)非常大结果集的SELECT
语句。
--safe-updates
选项在连接到 MySQL 服务器时,会让mysql执行以下语句,以设置sql_safe_updates
、sql_select_limit
和max_join_size
系统变量的会话值:
SET sql_safe_updates=1, sql_select_limit=1000, max_join_size=1000000;
SET
语句会影响语句处理如下:
-
启用
sql_safe_updates
会导致UPDATE
和DELETE
语句如果在WHERE
子句中未指定关键约束,或提供LIMIT
子句,或两者都没有,则产生错误。例如:UPDATE *tbl_name* SET *not_key_column*=*val* WHERE *key_column*=*val*; UPDATE *tbl_name* SET *not_key_column*=*val* LIMIT 1;
-
将
sql_select_limit
设置为 1,000 会导致服务器将所有SELECT
结果集限制为 1,000 行,除非语句包含LIMIT
子句。 -
将
max_join_size
设置为 1,000,000 会导致多表SELECT
语句在服务器估计必须检查超过 1,000,000 行组合时产生错误。
若要指定不同于 1,000 和 1,000,000 的结果集限制,可以在调用mysql时使用--select-limit
和--max-join-size
选项覆盖默认值:
mysql --safe-updates --select-limit=500 --max-join-size=10000
即使在WHERE
子句中指定了关键列,如果优化器决定不使用关键列上的索引,则UPDATE
和DELETE
语句在安全更新模式下也可能产生错误:
-
如果内存使用超过
range_optimizer_max_mem_size
系统变量允许的范围,则无法使用索引上的范围访问。优化器然后退回到表扫描。请参阅限制范围优化的内存使用。 -
如果键比较需要类型转换,则可能不使用索引(参见第 10.3.1 节,“MySQL 如何使用索引”)。假设一个索引的字符串列
c1
与数值2222
进行比较,使用WHERE c1 = 2222
。对于这样的比较,字符串值会转换为数字,然后进行数值比较(参见第 14.3 节,“表达式求值中的类型转换”),从而阻止使用索引。如果启用了安全更新模式,将会产生错误。
截至 MySQL 8.0.13,安全更新模式还包括以下行为:
-
UPDATE
和DELETE
语句的EXPLAIN
不会产生安全更新错误。这使得可以使用EXPLAIN
加上SHOW WARNINGS
来查看为什么不使用索引,这在出现range_optimizer_max_mem_size
违规或类型转换并且优化器没有使用索引的情况下非常有帮助,即使在WHERE
子句中指定了关键列。 -
当发生安全更新错误时,错误消息包含首次生成的诊断信息,以提供关于失败原因的信息。例如,消息可能指出
range_optimizer_max_mem_size
值超过限制或发生类型转换,这两种情况都可能导致无法使用索引。 -
对于多表删除和更新,仅当任何目标表使用表扫描时,启用安全更新时才会产生错误。
禁用 mysql 自动重新连接
如果mysql客户端在发送语句时失去与服务器的连接,它会立即自动尝试重新连接到服务器并重新发送语句。然而,即使mysql成功重新连接,你的第一个连接已经结束,所有之前的会话对象和设置都会丢失:临时表、自动提交模式以及用户定义和会话变量。此外,任何当前事务都会回滚。这种行为可能对你很危险,就像以下示例中,在第一条和第二条语句之间服务器被关闭并重新启动而你并不知情的情况下:
mysql> SET @a=1;
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO t VALUES(@a);
ERROR 2006: MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 1
Current database: test Query OK, 1 row affected (1.30 sec)
mysql> SELECT * FROM t;
+------+
| a |
+------+
| NULL |
+------+
1 row in set (0.05 sec)
@a
用户变量在连接断开后已丢失,并在重新连接后未定义。如果重要的是在连接丢失时让mysql以错误终止,可以使用--skip-reconnect
选项启动mysql客户端。
有关自动重新连接及其在重新连接发生时对状态信息的影响的更多信息,请参阅 Automatic Reconnection Control。
mysql 客户端解析器与服务器解析器
mysql客户端在客户端端使用一个解析器,这个解析器不是mysqld服务器在服务器端使用的完整解析器的副本。这可能导致对某些结构的处理方式不同。例如:
-
如果启用了
ANSI_QUOTES
SQL 模式,服务器解析器会将由"
字符界定的字符串视为标识符而不是普通字符串。mysql客户端解析器不考虑
ANSI_QUOTES
SQL 模式。它会将由"
,'
, 和```字符界定的字符串视为相同,无论是否启用了ANSI_QUOTES
。 -
在
/*! ... */
和/*+ ... */
注释中,mysql客户端解析器会解释简短形式的mysql命令。服务器解析器不会解释它们,因为这些命令在服务器端没有意义。如果希望mysql不解释注释中的简短命令,部分解决方法是使用
--binary-mode
选项,该选项会导致所有mysql命令在非交互模式下被禁用,除了\C
和\d
(对于通过管道输入到mysql或使用source
命令加载的输入)。
6.5.2 mysqladmin — A MySQL Server Administration Program
mysqladmin 是用于执行管理操作的客户端。您可以使用它来检查服务器的配置和当前状态,创建和删除数据库等。
像这样调用mysqladmin:
mysqladmin [*options*] *command* [*command-arg*] [*command* [*command-arg*]] ...
mysqladmin 支持以下命令。一些命令在命令名称后面需要一个参数。
-
create *
db_name*
创建一个名为
db_name
的新数据库。 -
debug
在 MySQL 8.0.20 之前,告诉服务器将调试信息写入错误日志。连接的用户必须具有
SUPER
权限。此信息的格式和内容可能会发生变化。这包括有关事件调度程序的信息。参见 Section 27.4.5, “Event Scheduler Status”。
-
drop *
db_name*
删除名为
db_name
的数据库及其所有表。 -
extended-status
显示服务器状态变量及其值。
-
flush-hosts
刷新主机缓存中的所有信息。参见 Section 7.1.12.3, “DNS Lookups and the Host Cache”。
-
flush-logs [*
log_type* ...]
刷新所有日志。
mysqladmin flush-logs 命令允许提供可选的日志类型,以指定要刷新的日志。在
flush-logs
命令之后,您可以提供一个空格分隔的日志类型列表,其中包括以下一个或多个日志类型:binary
、engine
、error
、general
、relay
、slow
。这些对应于可以为FLUSH LOGS
SQL 语句指定的日志类型。 -
flush-privileges
重新加载授权表(与
reload
相同)。 -
flush-status
清除状态变量。
-
flush-tables
刷新所有表。
-
flush-threads
刷新线程缓存。
-
kill *
id*,*
id*,...
终止服务器线程。如果给出多个线程 ID 值,则列表中不能有空格。
要终止属于其他用户的线程,连接的用户必须具有
CONNECTION_ADMIN
权限(或已弃用的SUPER
权限)。 -
password *
new_password*
设置一个新密码。这将为您在使用mysqladmin连接到服务器的帐户更改密码为
new_password
。因此,下次您使用相同帐户调用mysqladmin(或任何其他客户端程序)时,您必须指定新密码。警告
使用mysqladmin设置密码应被视为不安全。在某些系统上,您的密码会对系统状态程序(如ps)可见,其他用户可能调用这些程序来显示命令行。MySQL 客户端通常在初始化序列期间用零覆盖命令行密码参数。但是,在这个值可见的瞬间仍然存在。此外,在某些系统上,这种覆盖策略是无效的,密码仍然对ps可见。(SystemV Unix 系统和其他系统可能存在此问题。)
如果
new_password
值包含空格或其他对您的命令解释器特殊的字符,则需要将其放在引号内。在 Windows 上,请确保使用双引号而不是单引号;单引号不会从密码中删除,而是被解释为密码的一部分。例如:mysqladmin password "my new password"
在
password
命令后可以省略新密码。在这种情况下,mysqladmin会提示输入密码值,这样您就可以避免在命令行中指定密码。只有在password
是mysqladmin命令行上的最后一个命令时才应省略密码值。否则,下一个参数将被视为密码。注意
如果服务器是使用
--skip-grant-tables
选项启动的,请勿使用此命令。密码更改不会生效。即使您在password
命令之前在同一命令行上使用flush-privileges
重新启用授权表,因为刷新操作发生在连接之后。但是,您可以使用mysqladmin flush-privileges重新启用授权表,然后使用单独的mysqladmin password命令更改密码。 -
ping
检查服务器是否可用。从mysqladmin返回的状态为 0 表示服务器正在运行,为 1 表示未运行。即使出现
拒绝访问
等错误,返回状态也为 0,因为这意味着服务器正在运行但拒绝连接,这与服务器未运行不同。 -
processlist
显示活动服务器线程的列表。这类似于
SHOW PROCESSLIST
语句的输出。如果给出了--verbose
选项,则输出类似于SHOW FULL PROCESSLIST
的输出。(参见第 15.7.7.29 节,“SHOW PROCESSLIST Statement”.) -
reload
重新加载授权表。
-
refresh
刷新所有表并关闭和打开日志文件。
-
关闭
停止服务器。
-
start-replica
在副本服务器上启动复制。使用 MySQL 8.0.26 中的此命令。
-
start-slave
在副本服务器上启动复制。使用 MySQL 8.0.26 之前的此命令。
-
status
显示简短的服务器状态消息。
-
stop-replica
在副本服务器上停止复制。使用 MySQL 8.0.26 中的此命令。
-
stop-slave
在 MySQL 8.0.26 之前,在副本服务器上停止复制。
-
变量
显示服务器系统变量及其值。
-
版本
显示服务器的版本信息。
所有命令都可以缩写为任何唯一前缀。例如:
$> mysqladmin proc stat
+----+-------+-----------+----+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------+-----------+----+---------+------+-------+------------------+
| 51 | jones | localhost | | Query | 0 | | show processlist |
+----+-------+-----------+----+---------+------+-------+------------------+
Uptime: 1473624 Threads: 1 Questions: 39487
Slow queries: 0 Opens: 541 Flush tables: 1
Open tables: 19 Queries per second avg: 0.0268
mysqladmin status 命令结果显示以下数值:
-
运行时间
MySQL 服务器已运行的秒数。
-
线程
活动线程(客户端)的数量。
-
查询数
从服务器启动以来客户端发出的查询数。
-
慢查询
超过
long_query_time
秒的查询数。参见第 7.4.5 节,“慢查询日志”. -
打开
服务器打开的表的数量。
-
Flush tables
服务器执行的
flush-*
、refresh
和reload
命令数。 -
打开的表
当前打开的表的数量。
如果在使用 Unix 套接字文件连接到本地服务器时执行mysqladmin shutdown,mysqladmin 会等到服务器的进程 ID 文件被移除,以确保服务器已正确停止。
mysqladmin 支持以下选项,可以在命令行或选项文件的[mysqladmin]
和[client]
组中指定。有关 MySQL 程序使用的选项文件的信息,请参阅 6.2.2.2 节,“使用选项文件”。
表 6.13 mysqladmin 选项
选项名称 | 描述 | 引入 | 废弃 |
---|---|---|---|
--bind-address | 使用指定的网络接口连接到 MySQL 服务器 | ||
--character-sets-dir | 字符集所在目录 | ||
--compress | 在客户端和服务器之间发送的所有信息进行压缩 | 8.0.18 | |
--compression-algorithms | 用于与服务器连接的允许压缩算法 | 8.0.18 | |
--connect-timeout | 连接超时前的秒数 | ||
--count | 重复执行命令的迭代次数 | ||
--debug | 写入调试日志 | ||
--debug-check | 程序退出时打印调试信息 | ||
--debug-info | 程序退出时打印调试信息、内存和 CPU 统计信息 | ||
--default-auth | 要使用的认证插件 | ||
--default-character-set | 指定默认字符集 | ||
--defaults-extra-file | 除了通常的选项文件外,还读取指定的选项文件 | ||
--defaults-file | 仅读取指定的选项文件 | ||
--defaults-group-suffix | 选项组后缀值 | ||
--enable-cleartext-plugin | 启用明文认证插件 | ||
--force | 即使发生 SQL 错误也继续 | ||
--get-server-public-key | 从服务器请求 RSA 公钥 | ||
--help | 显示帮助信息并退出 | ||
--host | MySQL 服务器所在的主机 | ||
--login-path | 从 .mylogin.cnf 文件中读取登录路径选项 | ||
--no-beep | 发生错误时不发出蜂鸣声 | ||
--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 | 要使用的传输协议 | ||
--relative | 与--sleep 选项一起使用时显示当前值与先前值之间的差异 | ||
--server-public-key-path | 包含 RSA 公钥的文件的路径名 | ||
--shared-memory-base-name | 共享内存连接的共享内存名称(仅限 Windows) | ||
--show-warnings | 在语句执行后显示警告 | ||
--shutdown-timeout | 等待服务器关闭的最大秒数 | ||
--silent | 静默模式 | ||
--sleep | 重复执行命令,在每次执行之间休眠 delay 秒 | ||
--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 协议 | ||
--user | 连接到服务器时要使用的 MySQL 用户名 | ||
--verbose | 详细模式 | ||
--version | 显示版本信息并退出 | ||
--vertical | 垂直打印查询输出行(每列值一行) | ||
--wait | 如果无法建立连接,则等待并重试,而不是中止 | ||
--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|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 中添加。
-
--connect-timeout=*
value*
命令行格式 --connect-timeout=value
类型 数值 默认值 43200
连接超时之前的最大秒数。默认值为 43200(12 小时)。
-
--count=*
N*
,-c *
N*
命令行格式 --count=#
如果给定了
--sleep
选项,则重复执行命令的次数。 -
--debug[=*
debug_options*]
,-# [*
debug_options*]
命令行格式 --debug[=debug_options]
类型 字符串 默认值 d:t:o,/tmp/mysqladmin.trace
写入调试日志。典型的
debug_options
字符串是d:t:o,*
file_name*
。默认值为d:t:o,/tmp/mysqladmin.trace
。此选项仅在使用
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-auth=*
plugin*
命令行格式 --default-auth=plugin
类型 字符串 一个关于使用哪个客户端端身份验证插件的提示。参见第 8.2.17 节,“可插拔身份验证”。
-
--default-character-set=*
charset_name*
命令行格式 --default-character-set=charset_name
类型 字符串 将
charset_name
用作默认字符集。参见第 12.15 节,“字符集配置”。 -
--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
的组。例如,mysqladmin通常会读取[client]
和[mysqladmin]
组。如果给定此选项作为--defaults-group-suffix=_other
,mysqladmin还会读取[client_other]
和[mysqladmin_other]
组。有关此选项和其他选项��件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
--enable-cleartext-plugin
命令行格式 --enable-cleartext-plugin
类型 布尔值 默认值 FALSE
启用
mysql_clear_password
明文认证插件。(参见第 8.4.1.4 节,“客户端明文可插拔认证”。) -
--force
,-f
命令行格式 --force
不要为
drop *
db_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
插件的更多信息,请参见第 8.4.1.2 节,“缓存 SHA-2 可插拔认证”。 -
--host=*
host_name*
,-h *
host_name*
命令行格式 --host=host_name
类型 字符串 默认值 localhost
连接到给定主机上的 MySQL 服务器。
-
--login-path=*
name*
命令行格式 --login-path=name
类型 字符串 从
.mylogin.cnf
登录路径文件中的命名登录路径读取选项。 “登录路径”是一个包含指定要连接到哪个 MySQL 服务器以及要作为哪个帐户进行身份验证的选项组。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参见第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。关于这个和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
--no-beep
,-b
命令行格式 --no-beep
抑制默认情况下发出的警告蜂鸣声,例如连接到服务器失败时发出的警告。
-
--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 帐户的密码。密码值是可选的。如果没有给出,mysqladmin会提示输入一个。如果给出,
--password=
或-p
后面必须没有空格跟着密码。如果未指定密码选项,则默认情况是不发送密码。在命令行上指定密码应被视为不安全。为了避免在命令行上提供密码,请使用选项文件。请参见第 8.1.2.1 节,“密码安全的最终用户指南”。
为明确指定没有密码,并且mysqladmin不应提示输入密码,请使用
--skip-password
选项。 -
用于连接到服务器的 MySQL 帐户的多因素认证因子 1 的密码。密码值是可选的。如果未提供,mysql会提示输入密码。如果提供,
--password1=
和后面的密码之间不能有空格。如果未指定密码选项,则默认不发送密码。在命令行上指定密码应被视为不安全。为了避免在命令行上提供密码,请使用一个选项文件。请参阅第 8.1.2.1 节,“密码安全的最终用户指南”。
明确指定没有密码,并且mysqladmin不应提示输入密码,使用
--skip-password1
选项。--password1
和--password
是同义词,--skip-password1
和--skip-password
也是同义词。 -
用于连接到服务器的 MySQL 帐户的多因素认证因子 2 的密码。此选项的语义与
--password1
的语义类似;有关详细信息,请参阅该选项的描述。 -
用于连接到服务器的 MySQL 帐户的多因素认证因子 3 的密码。此选项的语义与
--password1
的语义类似;有关详细信息,请参阅该选项的描述。 -
--pipe
,-W
命令行格式 --pipe
类型 字符串 在 Windows 上,使用命名管道连接到服务器。此选项仅在服务器启动时启用了
named_pipe
系统变量以支持命名管道连接时适用。此外,进行连接的用户必须是由named_pipe_full_access_group
系统变量指定的 Windows 组的成员。 -
--plugin-dir=*
dir_name*
命令行格式 --plugin-dir=dir_name
类型 目录名称 查找插件的目录。如果使用
--default-auth
选项指定身份验证插件但 mysqladmin 找不到它,请指定此选项。请参见 第 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 节,“连接传输协议”。
-
--relative
,-r
命令行格式 --relative
与
--sleep
选项一起使用时,显示当前值与先前值之间的差异。此选项仅适用于extended-status
命令。 -
--server-public-key-path=*
file_name*
命令行格式 --server-public-key-path=file_name
类型 文件名 包含客户端端公钥的 PEM 格式文件的路径名,该公钥是服务器用于 RSA 密钥对密码交换所需的。此选项适用于使用
sha256_password
或caching_sha2_password
认证插件进行身份验证的客户端。对于不使用这些插件进行身份验证的帐户,此选项将被忽略。如果不使用基于 RSA 的密码交换(例如客户端使用安全连接连接到服务器时),也将被忽略。如果给定
--server-public-key-path=*
file_name*
并指定有效的公钥文件,则它优先于--get-server-public-key
。对于
sha256_password
,仅当 MySQL 使用 OpenSSL 构建时才适用此选项。有关
sha256_password
和caching_sha2_password
插件的信息,请参见第 8.4.1.3 节,“SHA-256 可插入式认证”和第 8.4.1.2 节,“缓存 SHA-2 可插入式认证”。 -
--shared-memory-base-name=*
name*
命令行格式 --shared-memory-base-name=name
特定平台 Windows 在 Windows 上,用于使用共享内存连接到本地服务器的共享内存名称。默认值为
MYSQL
。共享内存名称区分大小写。仅当服务器启用了支持共享内存连接的
shared_memory
系统变量时,此选项才适用。 -
--show-warnings
命令行格式 --show-warnings
显示由发送到服务器的语句执行引起的警告。
-
--shutdown-timeout=*
value*
命令行格式 --shutdown-timeout=seconds
类型 数字 默认值 3600
等待服务器关闭的最大秒数。默认值为 3600(1 小时)。
-
--silent
,-s
命令行格式 --silent
如果无法建立与服务器的连接,则静默退出。
-
--sleep=*
delay*
,-i *
delay*
命令行格式 --sleep=delay
重复执行命令,在
delay
秒之间休眠。--count
选项确定迭代次数。如果未提供--count
,mysqladmin将无限期执行命令,直到被中断。 -
--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
设置为ON
或STRICT
会导致客户端在启动时产生警告并在非 FIPS 模式下运行。截至 MySQL 8.0.34,此选项已弃用。预计在将来的 MySQL 版本中将其移除。
-
-
--tls-ciphersuites=*
ciphersuite_list*
命令行格式 --tls-ciphersuites=ciphersuite_list
引入版本 8.0.16 类型 字符串 用于使用 TLSv1.3 的加密连接的可用密码套件。该值是一个或多个以冒号分隔的密码套件名称列表。可以为此选项命名的密码套件取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。
此选项已于 MySQL 8.0.16 中添加。
-
--tls-version=*
protocol_list*
命令行格式 --tls-version=protocol_list
类型 字符串 默认值 (≥ 8.0.16) TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
(OpenSSL 1.1.1 或更高版本)TLSv1,TLSv1.1,TLSv1.2
(否则)默认值 (≤ 8.0.15) TLSv1,TLSv1.1,TLSv1.2
可用于加密连接的 TLS 协议。该值是一个或多个逗号分隔的协议名称列表。可以为此选项命名的协议取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。
-
--user=*
user_name*
,-u *
user_name*
命令行格式 --user=user_name,
类型 字符串 用于连接到服务器的 MySQL 帐户的用户名。
如果您在 MySQL 8.0.31 或更高版本中使用
Rewriter
插件,则应授予该用户SKIP_QUERY_REWRITE
权限。 -
--verbose
,-v
命令行格式 --verbose
详细模式。打印程序执行的更多信息。
-
--version
,-V
命令行格式 --version
显示版本信息并退出。
-
--vertical
,-E
命令行格式 --vertical
垂直打印输出。类似于
--relative
,但是垂直打印输出。 -
--wait[=*
count*]
,-w[*
count*]
命令行格式 --wait
如果无法建立连接,则等待并重试,而不是中止。如果给定了
count
值,则表示重试次数。默认值为一次。 -
--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.3 mysqlcheck — A Table Maintenance Program
mysqlcheck客户端执行表维护:检查、修复、优化或分析表。
每个表在处理过程中被锁定,因此在处理过程中对其他会话不可用,尽管对于检查操作,表仅使用READ
锁定(请参阅第 15.3.6 节“LOCK TABLES 和 UNLOCK TABLES 语句”,了解有关READ
和WRITE
锁定的更多信息)。表维护操作可能耗时,特别是对于大表。如果使用--databases
或--all-databases
选项来处理一个或多个数据库中的所有表,那么调用mysqlcheck可能需要很长时间。(如果 MySQL 升级过程确定需要进行表检查,因为它以相同方式处理表,这也适用。)
mysqlcheck 必须在mysqld服务器运行时使用,这意味着您无需停止服务器即可执行表维护。
mysqlcheck 使用 SQL 语句CHECK TABLE
、REPAIR TABLE
、ANALYZE TABLE
和OPTIMIZE TABLE
以一种方便用户的方式进行操作。它确定要执行的操作所需的语句,然后将这些语句发送到服务器执行。有关每个语句适用的存储引擎的详细信息,请参阅第 15.7.3 节“表维护语句”中这些语句的描述。
并非所有存储引擎都必然支持所有四种维护操作。在这种情况下,会显示错误消息。例如,如果test.t
是一个MEMORY
表,尝试检查它会产生这样的结果:
$> mysqlcheck test t
test.t
note : The storage engine for the table doesn't support check
如果mysqlcheck无法修复表格,请参阅第 3.14 节,“重建或修复表格或索引”以获取手动表格修复策略。例如,对于InnoDB
表格,可以使用CHECK TABLE
进行检查,但无法使用REPAIR TABLE
进行修复。
注意
在执行表格修复操作之前最好备份表格;在某些情况下,该操作可能导致数据丢失。可能的原因包括但不限于文件系统错误。
有三种常见的调用mysqlcheck的方法:
mysqlcheck [*options*] *db_name* [*tbl_name* ...]
mysqlcheck [*options*] --databases *db_name* ...
mysqlcheck [*options*] --all-databases
如果在db_name
后没有命名任何表格,或者使用--databases
或--all-databases
选项,则会检查整个数据库。
与其他客户端程序相比,mysqlcheck具有特殊功能。检查表格的默认行为(--check
)可以通过重命名二进制文件来更改。如果您希望默认情况下修复表格的工具,只需复制一个名为mysqlrepair的mysqlcheck副本,或者创建一个指向名为mysqlrepair的mysqlcheck的符号链接。如果调用mysqlrepair,它会修复表格。
下表中显示的名称可用于更改mysqlcheck的默认行为。
命令 | 含义 |
---|---|
mysqlrepair | 默认选项是--repair |
mysqlanalyze | 默认选项是--analyze |
mysqloptimize | 默认选项是--optimize |
mysqlcheck支持以下选项,可以在命令行或选项文件的[mysqlcheck]
和[client]
组中指定。有关 MySQL 程序使用的选项文件的信息,请参阅第 6.2.2.2 节,“使用选项文件”。
表格 6.14 mysqlcheck 选项
选项名称 | 描述 | 引入 | 废弃 |
---|---|---|---|
--all-databases | 检查所有数据库中的所有表 | ||
--all-in-1 | 为每个命名了该数据库中所有表格的数据库执行单个语句 | ||
--analyze | 分析表 | ||
--auto-repair | 如果���查的表损坏,自动修复 | ||
--bind-address | 使用指定的网络接口连接到 MySQL 服务器 | ||
--character-sets-dir | 安装字符集的目录 | ||
--check | 检查表中的错误 | ||
--check-only-changed | 仅检查自上次检查以来发生变化的表 | ||
--check-upgrade | 使用 FOR UPGRADE 选项调用 CHECK TABLE | ||
--compress | 在客户端和服务器之间发送的所有信息进行压缩 | 8.0.18 | |
--compression-algorithms | 与服务器连接时允许的压缩算法 | 8.0.18 | |
--databases | 将所有参数解释为数据库名称 | ||
--debug | 写调试日志 | ||
--debug-check | 程序退出时打印调试信息 | ||
--debug-info | 程序退出时打印调试信息、内存和 CPU 统计信息 | ||
--default-auth | 要使用的认证插件 | ||
--default-character-set | 指定默认字符集 | ||
--defaults-extra-file | 除了通常的选项文件外,读取指定的选项文件 | ||
--defaults-file | 仅读取指定的选项文件 | ||
--defaults-group-suffix | 选项组后缀值 | ||
--enable-cleartext-plugin | 启用明文认证插件 | ||
--extended | 检查和修复表 | ||
--fast | 仅检查未正确关闭的表 | ||
--force | 即使发生 SQL 错误也继续 | ||
--get-server-public-key | 从服务器请求 RSA 公钥 | ||
--help | 显示帮助信息并退出 | ||
--host | MySQL 服务器所在的主机 | ||
--login-path | 从.mylogin.cnf 文件中读取登录路径选项 | ||
--medium-check | 执行比--extended 操作更快的检查 | ||
--no-defaults | 不读取任何选项文件 | ||
--optimize | 优��表 | ||
--password | 连接到服务器时使用的密码 | ||
--password1 | 连接到服务器时使用的第一个多因素身份验证密码 | 8.0.27 | |
--password2 | 连接到服务器时使用的第二个多因素身份验证密码 | 8.0.27 | |
--password3 | 连接到服务器时使用的第三个多因素身份验证密码 | 8.0.27 | |
--pipe | 使用命名管道连接到服务器(仅限 Windows) | ||
--plugin-dir | 安装插件的目录 | ||
--port | 连接的 TCP/IP 端口号 | ||
--print-defaults | 打印默认选项 | ||
--protocol | 要使用的传输协议 | ||
--quick | 检查的最快方法 | ||
--repair | 执行修复操作,可以修复几乎所有问题,除了不唯一的唯一键 | ||
--server-public-key-path | 包含 RSA 公钥的文件路径名 | ||
--shared-memory-base-name | 共享内存连接的共享内存名称(仅限 Windows) | ||
--silent | 静默模式 | ||
--skip-database | 在执行操作时跳过此数据库 | ||
--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 | |
--tables | 覆盖 --databases 或 -B 选项 | ||
--tls-ciphersuites | 用于加密连接的允许的 TLSv1.3 密码套件 | 8.0.16 | |
--tls-version | 用于加密连接的允许的 TLS 协议 | ||
--use-frm | 用于对 MyISAM 表进行修复操作 | ||
--user | 连接到服务器时要使用的 MySQL 用户名 | ||
--verbose | 详细模式 | ||
--version | 显示版本信息并退出 | ||
--write-binlog | 将 ANALYZE、OPTIMIZE、REPAIR 语句记录到二进制日志。--skip-write-binlog 将 NO_WRITE_TO_BINLOG 添加到这些语句中 | ||
--zstd-compression-level | 用于使用 zstd 压缩连接到服务器的压缩级别 | 8.0.18 | |
选项名称 | 描述 | 引入 | 废弃 |
-
--help
,-?
命令行格式 --help
显示帮助信息并退出。
-
--all-databases
,-A
命令行格式 --all-databases
检查所有数据库中的所有表。这与使用
--databases
选项并在命令行上命名所有数据库相同,只是不会检查INFORMATION_SCHEMA
和performance_schema
数据库。可以通过显式使用--databases
选项来检查它们。 -
--all-in-1
,-1
命令行格式 --all-in-1
与为每个表发出语句不同,执行一个单独的语句,其中包含要处理的来自该数据库的所有表的名称。
-
--analyze
,-a
命令行格式 --analyze
分析表格。
-
--auto-repair
命令行格式 --auto-repair
如果检查的表损坏,将自动修复。所有必要的修复将在所有表检查完成后进行。
-
--bind-address=*
ip_address*
命令行格式 --bind-address=ip_address
在具有多个网络接口的计算机上,使用此选项选择连接到 MySQL 服务器的接口。
-
--character-sets-dir=*
dir_name*
命令行格式 --character-sets-dir=dir_name
类型 目录名称 安装字符集的目录。请参阅第 12.15 节,“字符集配置”。
-
--check
,-c
命令行格式 --check
检查表格是否有错误。这是默认操作。
-
--check-only-changed
,-C
命令行格式 --check-only-changed
仅检查自上次检查以来发生更改或未正确关闭的表。
-
--check-upgrade
,-g
命令行格式 --check-upgrade
使用
FOR UPGRADE
选项调用CHECK TABLE
以检查表格与当前服务器版本的不兼容性。 -
--compress
命令行格式 --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 中添加。
-
--databases
,-B
命令行格式 --databases
处理命名数据库中的所有表。通常,mysqlcheck将命令行上的第一个名称参数视为数据库名称,任何后续名称视为表名���。使用此选项,它将所有名称参数视为数据库名称。
-
--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 节,“字符集配置”。 -
--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
的组。例如,mysqlcheck通常会读取[client]
和[mysqlcheck]
组。如果此选项给定为--defaults-group-suffix=_other
,mysqlcheck还会读取[client_other]
和[mysqlcheck_other]
组。有关此选项和其他选项文件选项的其他信息,请参阅第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
--extended
,-e
命令行格式 --extended
如果您正在使用此选项来检查表格,它会确保它们是 100%一致的,但需要很长时间。
如果您正在使用此选项来修复表格,它会运行一个可能不仅执行时间长,而且可能产生大量垃圾行的扩展修复!
-
--default-auth=*
plugin*
命令行格式 --default-auth=plugin
类型 字符串 关于要使用的客户端端身份验证插件的提示。请参阅第 8.2.17 节,“可插拔认证”。
-
--enable-cleartext-plugin
命令行格式 --enable-cleartext-plugin
类型 布尔值 默认值 FALSE
启用
mysql_clear_password
明文身份验证插件。(请参阅第 8.4.1.4 节,“客户端明文插拔式身份验证”。) -
--fast
,-F
命令行格式 --fast
仅检查未正确关闭的表格。
-
--force
,-f
命令行格式 --force
即使发生 SQL 错误,也要继续。
-
--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 服务器。
-
--login-path=*
name*
命令行格式 --login-path=name
类型 字符串 从
.mylogin.cnf
登录路径文件中的指定登录路径中读取选项。 “登录路径”是一个包含指定要连接到哪个 MySQL 服务器以及要作为哪个帐户进行身份验证的选项的选项组。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参见第 6.6.7 节,“mysql_config_editor — MySQL Configuration Utility”。有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
--medium-check
,-m
命令行格式 --medium-check
进行比
--extended
操作更快的检查。这只能找到所有错误的 99.99%,在大多数情况下应该足够好。 -
--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 节,“影响选项文件处理的命令行选项”。
-
--optimize
,-o
命令行格式 --optimize
优化表格。
-
--password[=*
password*]
,-p[*
password*]
命令行格式 --password[=password]
类型 字符串 用于连接到服务器的 MySQL 帐户的密码。密码值是可选的。如果未提供,mysqlcheck会提示输入密码。如果提供了密码,则
--password=
或-p
后面必须没有空格。如果未指定���码选项,则默认不发送密码。在命令行上指定密码应被视为不安全。为了避免在命令行上输入密码,请使用一个选项文件。参见第 8.1.2.1 节,“密码安全的最终用户指南”。
要明确指定没有密码,并且mysqlcheck不应提示密码,请使用
--skip-password
选项。 -
用于连接到服务器的 MySQL 帐户的多因素认证因子 1 的密码。密码值是可选的。如果未提供,mysqlcheck会提示输入密码。如果提供了密码,则
--password1=
后面必须没有空格。如果未指定密码选项,则默认不发送密码。在命令行上指定密码应被视为不安全。为了避免在命令行上输入密码,请使用一个选项文件。参见第 8.1.2.1 节,“密码安全的最终用户指南”。
要明确指定没有密码,并且mysqlcheck不应提示输入密码,请使用
--skip-password1
选项。--password1
和--password
是同义词,--skip-password1
和--skip-password
也是同义词。 -
用于连接到服务器的 MySQL 帐户的多因素认证因子 2 的密码。此选项的语义类似于
--password1
的语义;有关详细信息,请参阅该选项的描述。 -
用于连接到服务器的 MySQL 帐户的多因素认证因子 3 的密码。此选项的语义类似于
--password1
的语义;有关详细信息,请参阅该选项的描述。 -
--pipe
,-W
命令行格式 --pipe
类型 字符串 在 Windows 上,使用命名管道连接到服务器。此选项仅在服务器启动时启用了
named_pipe
系统变量以支持命名管道连接时适用。此外,进行连接的用户必须是由named_pipe_full_access_group
系统变量指定的 Windows 组的成员。 -
--plugin-dir=*
dir_name*
命令行格式 --plugin-dir=dir_name
类型 目录名称 查找插件的目录。如果使用
--default-auth
选项指定身份验证插件但mysqlcheck找不到它,请指定此选项。请参阅第 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 节,“连接传输协议”。
-
--quick
,-q
命令行格式 --quick
如果您使用此选项来检查表格,则可以防止检查扫描行以检查不正确的链接。这是最快的检查方法。
如果您使用此选项来修复表格,则尝试仅修复索引树。这是最快的修复方法。
-
--repair
,-r
命令行格式 --repair
执行一个修复操作,可以修复几乎所有问题,除了不唯一的唯一键。
-
--server-public-key-path=*
file_name*
命令行格式 --server-public-key-path=file_name
类型 文件名 以 PEM 格式的文件路径名,其中包含服务器所需的用于 RSA 密钥对密码交换的客户端端公钥的副本。此选项适用于使用
sha256_password
或caching_sha2_password
身份验证插件进行身份验证的客户端。对于不使用这些插件进行身份验证的帐户,此选项将被忽略。如果不使用基于 RSA 的密码交换,例如客户端使用安全连接连接到服务器时,此选项也将被忽略。如果给定
--server-public-key-path=*
file_name*
并指定有效的公钥文件,则它优先于--get-server-public-key
。对于
sha256_password
,此选项仅在 MySQL 使用 OpenSSL 构建时适用。有关
sha256_password
和caching_sha2_password
插件的信息,请参见第 8.4.1.3 节,“SHA-256 可插拔认证”和第 8.4.1.2 节,“缓存 SHA-2 可插拔认证”。 -
--shared-memory-base-name=*
name*
命令行格式 --shared-memory-base-name=name
特定平台 Windows 在 Windows 上,用于通过共享内存连接到本地服务器的共享内存名称。默认值为
MYSQL
。共享内存名称区分大小写。此选项仅在服务器启用了
shared_memory
系统变量以支持共享内存连接时适用。 -
--silent
,-s
命令行格式 --silent
静默模式。仅打印错误消息。
-
--skip-database=*
db_name*
命令行格式 --skip-database=db_name
在 mysqlcheck 执行的操作中不包括命名数据库(区分大小写)。
-
--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 Object 模块不可用,则
--ssl-fips-mode
的唯一允许值是OFF
。在这种情况下,将--ssl-fips-mode
设置为ON
或STRICT
会导致客户端在启动时产生警告并在非 FIPS 模式下运行。截至 MySQL 8.0.34,此选项已被弃用。预计将在未来的 MySQL 版本中移除。
-
-
--tables
命令行格式 --tables
覆盖
--databases
或-B
选项。选项后面的所有名称参数都被视为表名。 -
--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 协议和密码”。
-
--use-frm
命令行格式 --use-frm
对于
MyISAM
表的修复操作,从数据字典获取表结构,以便即使.MYI
头文件损坏,也可以修复表。 -
--user=*
user_name*
,-u *
user_name*
命令行格式 --user=user_name,
类型 字符串 用于连接到服务器的 MySQL 帐户的用户名。
-
--verbose
,-v
命令行格式 --verbose
详细模式。打印有关程序操作各个阶段的信息。
-
--version
,-V
命令行格式 --version
显示版本信息并退出。
-
--write-binlog
命令行格式 --write-binlog
默认情况下启用此选项,因此由 mysqlcheck 生成的
ANALYZE TABLE
、OPTIMIZE TABLE
和REPAIR TABLE
语句将被写入二进制日志。使用--skip-write-binlog
可以添加NO_WRITE_TO_BINLOG
到语句中,以便不记录这些语句。当这些语句不应发送到副本或在使用二进制日志从备份中恢复时运行时,请使用--skip-write-binlog
。 -
--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.4 mysqldump — 一个数据库备份程序
mysqldump客户端实用程序执行逻辑备份,生成一组可以执行的 SQL 语句,以重现原始数据库对象定义和表数据。它为备份或传输到另一个 SQL 服务器转储一个或多个 MySQL 数据库。mysqldump命令还可以生成 CSV、其他分隔文本或 XML 格式的输出。
提示
考虑使用 MySQL Shell dump 工具,提供多线程并行转储、文件压缩、进度信息显示,以及云功能,如 Oracle Cloud 基础设施对象存储流式传输,以及 MySQL HeatWave 服务兼容性检查和修改。转储可以轻松导入到 MySQL Server 实例或 MySQL HeatWave 服务 DB 系统中,使用 MySQL Shell load dump 工具。MySQL Shell 的安装说明可以在这里找到。
-
性能和可伸缩性考虑
-
调用语法
-
选项语法 - 按字母顺序总结
-
连接选项
-
选项文件选项
-
DDL 选项
-
调试选项
-
帮助选项
-
国际化选项
-
复制选项
-
格式选项
-
过滤选项
-
性能选项
-
事务选项
-
选项组
-
示例
-
限制
mysqldump需要至少具有SELECT
权限来备份表格,SHOW VIEW
用于备份视图,TRIGGER
用于备份触发器,如果未使用--single-transaction
选项,则需要LOCK TABLES
,如果未使用--no-tablespaces
选项(自 MySQL 8.0.21 起),还需要PROCESS
,如果同时使用了gtid_mode=ON
和gtid_purged=ON|AUTO
,则还需要(自 MySQL 8.0.32 起)具有RELOAD
或FLUSH_TABLES
权限和--single-transaction
。某些选项可能需要其他权限,如选项描述中所述。
要重新加载转储文件,您必须具有执行其中包含的语句所需的权限,例如由这些语句创建的对象所需的适当CREATE
权限。
mysqldump输出可能包括ALTER DATABASE
语句来更改数据库排序规则。在转储存储程序以保留其字符编码时可能会使用这些语句。要重新加载包含此类语句的转储文件,需要受影响数据库的ALTER
权限。
注意
在 Windows 上使用 PowerShell 进行输出重定向创建的转储文件具有 UTF-16 编码:
mysqldump [options] > dump.sql
然而,不允许使用 UTF-16 作为连接字符集(参见不允许的客户端字符集),因此无法正确加载转储文件。为解决此问题,请使用--result-file
选项,该选项以 ASCII 格式创建输出:
mysqldump [options] --result-file=dump.sql
不建议在服务器启用 GTIDs(gtid_mode=ON
)时加载转储文件,如果您的转储文件包含系统表。mysqldump为使用非事务性 MyISAM 存储引擎的系统表发出 DML 指令,而在启用 GTIDs 时不允许此组合。
性能和可伸缩性考虑
mysqldump
的优点包括在恢复之前查看或甚至编辑输出的便利性和灵活性。您可以为开发和 DBA 工作克隆数据库,或为测试生成现有数据库的轻微变体。它并不旨在用作备份大量数据的快速或可扩展解决方案。对于大数据量,即使备份步骤花费合理的时间,恢复数据可能会非常缓慢,因为重放 SQL 语句涉及磁盘 I/O 进行插入、索引创建等操作。
对于大规模备份和恢复,物理备份更为合适,可以复制数据文件的原始格式,以便快速恢复。
如果您的表主要是InnoDB
表,或者如果您有InnoDB
和MyISAM
表的混合,请考虑使用mysqlbackup,它作为 MySQL Enterprise 的一部分提供。该工具为InnoDB
备份提供高性能,几乎没有中断;它还可以备份MyISAM
和其他存储引擎的表;它还提供许多方便的选项以适应不同的备份场景。请参见 Section 32.1, “MySQL Enterprise Backup Overview”。
mysqldump可以逐行检索和转储表内容,或者可以从表中检索整个内容并在转储之前在内存中缓冲它。如果要逐行转储表,请使用--quick
选项(或--opt
,它启用--quick
)。--opt
选项(因此--quick
)默认启用,因此要启用内存缓冲,请使用--skip-quick
。
如果您使用最新版本的mysqldump生成要重新加载到非常旧的 MySQL 服务器中的转储,请使用--skip-opt
选项,而不是--opt
或--extended-insert
选项。
有关mysqldump的更多信息,请参见 Section 9.4, “Using mysqldump for Backups”。
调用语法
通常有三种使用mysqldump的方式——用于转储一个或多个表、一个或多个完整数据库的集合,或整个 MySQL 服务器——如下所示:
mysqldump [*options*] *db_name* [*tbl_name* ...]
mysqldump [*options*] --databases *db_name* ...
mysqldump [*options*] --all-databases
要转储整个数据库,请不要在db_name
后面命名任何表,或使用--databases
或--all-databases
选项。
要查看您的版本支持的mysqldump选项列表,请发出命令mysqldump --help
。
选项语法 - 按字母顺序总结
mysqldump支持以下选项,可以在命令行或选项文件的[mysqldump]
和[client]
组中指定。有关 MySQL 程序使用的选项���件的信息,请参见 Section 6.2.2.2, “Using Option Files”。
表 6.15 mysqldump 选项
选项名称 | 描述 | 引入 | 废弃 |
---|---|---|---|
--add-drop-database | 在每个 CREATE DATABASE 语句之前添加 DROP DATABASE 语句 | ||
--add-drop-table | 在每个 CREATE TABLE 语句之前添加 DROP TABLE 语句 | ||
--add-drop-trigger | 在每个 CREATE TRIGGER 语句之前添加 DROP TRIGGER 语句 | ||
--add-locks | 将每个表转储包围在 LOCK TABLES 和 UNLOCK TABLES 语句中 | ||
--all-databases | 转储所有数据库中的所有表 | ||
--allow-keywords | 允许创建关键字列名 | ||
--apply-replica-statements | 在输出的 CHANGE REPLICATION SOURCE TO 语句之前包括 STOP REPLICA,并在结束时包括 START REPLICA | 8.0.26 | |
--apply-slave-statements | 在输出的 CHANGE MASTER 语句之前包括 STOP SLAVE,并在结束时包括 START SLAVE | 8.0.26 | |
--bind-address | 使用指定的网络接口连接到 MySQL 服务器 | ||
--character-sets-dir | 安装字符集的目录 | ||
--column-statistics | 写入 ANALYZE TABLE 语句以生成统计直方图 | ||
--comments | 向转储文件添加注释 | ||
--compact | 生成更紧凑的输出 | ||
--compatible | 生成与其他数据库系统或较旧的 MySQL 服务器更兼容的输出 | ||
--complete-insert | 使用包含列名的完整 INSERT 语句 | ||
--compress | 在客户端和服务器之间发送的所有信息进行压缩 | 8.0.18 | |
--compression-algorithms | 用于与服务器连接的允许的压缩算法 | 8.0.18 | |
--create-options | 在 CREATE TABLE 语句中包括所有特定于 MySQL 的表选项 | ||
--databases | 将所有名称参数解释为数据库名称 | ||
--debug | 写调试日志 | ||
--debug-check | 程序退出时打印调试信息 | ||
--debug-info | 程序退出时打印调试信息、内存和 CPU 统计信息 | ||
--default-auth | 要使用的身份验证插件 | ||
--default-character-set | 指定默认字符集 | ||
--defaults-extra-file | 除了通常的选项文件外,还读取命名的选项文件 | ||
--defaults-file | 仅读取命名的选项文件 | ||
--defaults-group-suffix | 选项组后缀值 | ||
--delete-master-logs | 在复制源服务器上,在执行转储操作后删除二进制日志 | 8.0.26 | |
--delete-source-logs | 在复制源服务器上,在执行转储操作后删除二进制日志 | 8.0.26 | |
--disable-keys | 对于每个表,用于禁用和启用键的语句包围 INSERT 语句 | ||
--dump-date | 如果给定了--comments,则包括转储日期作为“Dump completed on”注释 | ||
--dump-replica | 包括 CHANGE REPLICATION SOURCE TO 语句,列出副本源的二进制日志坐标 | 8.0.26 | |
--dump-slave | 包括列出副本源的二进制日志坐标的 CHANGE MASTER 语句 | 8.0.26 | |
--enable-cleartext-plugin | 启用明文认证插件 | ||
--events | 转储来自已转储数据库的事件 | ||
--extended-insert | 使用多行 INSERT 语法 | ||
--fields-enclosed-by | 此选项与 --tab 选项一起使用,具有与 LOAD DATA 相应子句相同的含义 | ||
--fields-escaped-by | 此选项与 --tab 选项一起使用,具有与 LOAD DATA 相应子句相同的含义 | ||
--fields-optionally-enclosed-by | 此选项与 --tab 选项一起使用,具有与 LOAD DATA 相应子句相同的含义 | ||
--fields-terminated-by | 此选项与 --tab 选项一起使用,具有与 LOAD DATA 相应子句相同的含义 | ||
--flush-logs | 在开始转储之前刷新 MySQL 服务器日志文件 | ||
--flush-privileges | 在转储 mysql 数据库后发出 FLUSH PRIVILEGES 语句 | ||
--force | 即使在转储表时发生 SQL 错误也继续 | ||
--get-server-public-key | 从服务器请求 RSA 公钥 | ||
--help | 显示帮助消息并退出 | ||
--hex-blob | 使用十六进制表示法转储二进制列 | ||
--host | MySQL 服务器所在的主机 | ||
--ignore-error | 忽略指定的错误 | ||
--ignore-table | 不转储给定表 | ||
--include-master-host-port | 在使用 --dump-slave 生成的 CHANGE MASTER 语句中包含 MASTER_HOST/MASTER_PORT 选项 | 8.0.26 | |
--include-source-host-port | 在使用 --dump-replica 生成的 CHANGE REPLICATION SOURCE TO 语句中包含 SOURCE_HOST 和 SOURCE_PORT 选项 | 8.0.26 | |
--insert-ignore | 写入 INSERT IGNORE 而不是 INSERT 语句 | ||
--lines-terminated-by | 此选项与 --tab 选项一起使用,具有与 LOAD DATA 相应子句相同的含义 | ||
--lock-all-tables | 锁定所有数据库中的所有表 | ||
--lock-tables | 转储表之前锁定所有表 | ||
--log-error | 将警告和错误追加到指定文件 | ||
--login-path | 从.mylogin.cnf 中读取登录路径选项 | ||
--master-data | 将二进制日志文件名和位置写入输出 | 8.0.26 | |
--max-allowed-packet | 发送到服务器或从服务器接收的最大数据包长度 | ||
--mysqld-long-query-time | 慢查询阈值的会话值 | 8.0.30 | |
--net-buffer-length | TCP/IP 和套接字通信的缓冲区大小 | ||
--network-timeout | 增加网络超时以允许更大的表转储 | ||
--no-autocommit | 将每个转储表的 INSERT 语句括在 SET autocommit = 0 和 COMMIT 语句中 | ||
--no-create-db | 不写入 CREATE DATABASE 语句 | ||
--no-create-info | 不写入重新创建每个转储表的 CREATE TABLE 语句 | ||
--no-data | 不转储表内容 | ||
--no-defaults | 不读取任何选项文件 | ||
--no-set-names | 与--skip-set-charset 相同 | ||
--no-tablespaces | 在输出中不写入任何 CREATE LOGFILE GROUP 或 CREATE TABLESPACE 语句 | ||
--opt | --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset 的简写 | ||
--order-by-primary | 按每个表的主键或第一个唯一索引对其行进行排序 | ||
--password | 连接到服务器时使用的密码 | ||
--password1 | 连接到服务器时使用的第一个多因素身份验证密码 | 8.0.27 | |
--password2 | 连接到服务器时使用的第二个多因素身份验证密码 | 8.0.27 | |
--password3 | 连接到服务器时使用的第三个多因素身份验证密码 | 8.0.27 | |
--pipe | 使用命名管道连接到服务器(仅限 Windows) | ||
--plugin-authentication-kerberos-client-mode | 允许通过 Windows 上的 MIT Kerberos 库进行 GSSAPI 可插拔认证 | 8.0.32 | |
--plugin-dir | 插件安装目录 | ||
--port | TCP/IP 连接的端口号 | ||
--print-defaults | 打印默认选项 | ||
--protocol | 要使用的传输协议 | ||
--quick | 逐行从服务器检索表的行 | ||
--quote-names | 在反引号字符内引用标识符 | ||
--replace | 写入 REPLACE 语句而不是 INSERT 语句 | ||
--result-file | 将输出直接定向到给定文件 | ||
--routines | 从转储的数据库中转储存储过程(procedures)和函数(functions) | ||
--server-public-key-path | 包含 RSA 公钥的文件路径名 | ||
--set-charset | 将 SET NAMES default_character_set 添加到输出 | ||
--set-gtid-purged | 是否将 SET @@GLOBAL.GTID_PURGED 添加到输出中 | ||
--shared-memory-base-name | 共享内存连接的共享内存名称(仅限 Windows) | ||
--show-create-skip-secondary-engine | 从 CREATE TABLE 语句中排除 SECONDARY ENGINE 子句 | 8.0.18 | |
--single-transaction | 在从服务器转储数据之前发出 BEGIN SQL 语句 | ||
--skip-add-drop-table | 在每个 CREATE TABLE 语句之前不添加 DROP TABLE 语句 | ||
--skip-add-locks | 不添加锁 | ||
--skip-comments | 不向转储文件添加注释 | ||
--skip-compact | 不生成更紧凑的输出 | ||
--skip-disable-keys | 不禁用键 | ||
--skip-extended-insert | 关闭扩展插入 | ||
--skip-generated-invisible-primary-key | 不在转储文件中包含生成的不可见主键 | 8.0.30 | |
--skip-opt | 关闭--opt 设置的选项 | ||
--skip-quick | 不从服务器逐行检索表的行 | ||
--skip-quote-names | 不引用标识符 | ||
--skip-set-charset | 不写入 SET NAMES 语句 | ||
--skip-triggers | 不转储触发器 | ||
--skip-tz-utc | 关闭 tz-utc | ||
--socket | Unix 套接字文件或 Windows 命名管道 | ||
--source-data | 将二进制日志文件名和位置写入输出 | 8.0.26 | |
--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 | |
--tab | 生成制表符分隔的数据文件 | ||
--tables | 覆盖--databases 或-B 选项 | ||
--tls-ciphersuites | 用于加密连接的 TLSv1.3 密码套件 | 8.0.16 | |
--tls-version | 用于加密连接的 TLS 协议 | ||
--triggers | 为每个转储表转储触发器 | ||
--tz-utc | 在转储文件中添加 SET TIME_ZONE='+00:00' | ||
--user | 连接到服务器时要使用的 MySQL 用户名 | ||
--verbose | 详细模式 | ||
--version | 显示版本信息并退出 | ||
--where | 仅转储由给定 WHERE 条件选择的行 | ||
--xml | 生成 XML 输出 | ||
--zstd-compression-level | 用于使用 zstd 压缩的服务器连接的压缩级别 | 8.0.18 | |
选项名称 | 描述 | 引入 | 已弃用 |
连接选项
mysqldump 命令登录到 MySQL 服务器以提取信息。以下选项指定如何连接到 MySQL 服务器,无论是在同一台机器上还是在远程系统上。
-
--bind-address=*
ip_address*
命令行格式 --bind-address=ip_address
在具有多个网络接口的计算机上,使用此选项选择要用于连接到 MySQL 服务器的接口。
-
--compress
,-C
命令行格式 --compress[={OFF|ON}]
已弃用 8.0.18 类型 布尔值 默认值 OFF
尽可能压缩客户端和服务器之间发送的所有信息。请参见 Section 6.2.8, “Connection Compression Control”。
从 MySQL 8.0.18 开始,此选项已弃用。预计将在将来的 MySQL 版本中删除。请参见 Configuring Legacy Connection Compression。
-
--compression-algorithms=*
value*
命令行格式 --compression-algorithms=value
引入 8.0.18 类型 设置 默认值 uncompressed
有效值 zlib``zstd``uncompressed
连接到服务器的允许的压缩算法。可用的算法与
protocol_compression_algorithms
系统变量相同。默认值为uncompressed
。更多信息,请参见 Section 6.2.8, “Connection Compression Control”。
此选项已添加到 MySQL 8.0.18 中。
-
--default-auth=*
plugin*
命令行格式 --default-auth=plugin
类型 字符串 有关要使用的客户端端身份验证插件的提示。请参见 Section 8.2.17, “Pluggable Authentication”。
-
--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
从给定主机的 MySQL 服务器中转储数据。默认主机是
localhost
. -
--login-path=*
name*
命令行格式 --login-path=name
类型 字符串 从
.mylogin.cnf
登录路径文件中的指定登录路径读取选项。 “登录路径”是一个选项组,其中包含指定要连接到的 MySQL 服务器和要进行身份验证的帐户的选项。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参阅第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”.有关此选项和其他选项文件选项的更多信息,请参阅第 6.2.2.3 节,“影响选项文件处理的命令行选项”.
-
--password[=*
password*]
,-p[*
password*]
命令行格式 --password[=password]
类型 字符串 用于连接到服务器的 MySQL 帐户的密码。密码值是可选的。如果未提供,mysqldump 会提示输入密码。如果提供了密码,则
--password=
或-p
后面必须没有空格。如果未指定密码选项,则默认不发送密码。在命令行上指定密码应被视为不安全。为了避免在命令行上提供密码,请使用选项文件。请参阅第 8.1.2.1 节,“密码安全的最终用户指南”。
明确指定没有密码且mysqldump不应提示输入密码,请使用
--skip-password
选项。 -
用于连接到服务器的 MySQL 帐户的多因素认证因子 1 的密码。密码值是可选的。如果未提供,mysqldump 会提示输入密码。如果提供了密码,则
--password1=
后面必须没有空格。如果未指定密码选项,则默认不发送密码。在命令行上指定密码应被视为不安全。为了避免在命令行上提供密码,请使用选项文件。请参阅第 8.1.2.1 节,“密码安全的最终用户指南”。
明确指定没有密码且mysqldump不应提示输入密码,请使用
--skip-password1
选项。--password1
和--password
是同义词,--skip-password1
和--skip-password
也是同义词。 -
用于连接到服务器的 MySQL 帐户的多因素认证因子 2 的密码。此选项的语义与
--password1
的语义类似;有关详细信息,请参阅该选项的描述。 -
用于连接到服务器的 MySQL 帐户的多因素认证因子 3 的密码。此选项的语义与
--password1
的语义类似;有关详细信息,请参阅该选项的描述。 -
--pipe
,-W
命令行格式 --pipe
类型 字符串 在 Windows 上,使用命名管道连接到服务器。此选项仅在服务器启动时启用了支持命名管道连接的
named_pipe
系统变量时才适用。此外,进行连接的用户必须是由named_pipe_full_access_group
系统变量指定的 Windows 组的成员。 -
--plugin-authentication-kerberos-client-mode=*
value*
命令行格式 --plugin-authentication-kerberos-client-mode
引入版本 8.0.32 类型 字符串 默认值 SSPI
有效值 GSSAPI
在 Windows 上,
authentication_kerberos_client
认证插件支持此插件选项。客户端用户可以在运行时设置两个可能的值:SSPI
和GSSAPI
。客户端端插件选项的默认值使用了 Security Support Provider Interface (SSPI),它能够从 Windows 内存缓存中获取凭据。另外,客户端用户可以选择支持在 Windows 上通过 MIT Kerberos 库使用 Generic Security Service Application Program Interface (GSSAPI)的模式。GSSAPI 能够通过使用kinit命令之前生成的缓存凭据。
有关更多信息,请参见 GSSAPI 模式下 Windows 客户端的命令。
-
--plugin-dir=*
dir_name*
命令行格式 --plugin-dir=dir_name
类型 目录名称 查找插件的目录。如果使用
--default-auth
选项指定了一个认证插件,但mysqldump找不到它,那么请指定此选项。请参见第 8.2.17 节,“可插拔认证”。 -
--port=*
port_num*
,-P *
port_num*
命令行格式 --port=port_num
类型 数字 默认值 3306
用于 TCP/IP 连接的端口号。
-
--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_password
或caching_sha2_password
认证插件进行身份验证的客户端。对于不使用这些插件进行身份验证的帐户,此选项将被忽略。如果不使用基于 RSA 的密码交换,例如客户端使用安全连接连接到服务器时,此选项也将被忽略。如果给定
--server-public-key-path=*
file_name*
,并指定一个有效的公钥文件,则优先使用该文件,而不是--get-server-public-key
。对于
sha256_password
,此选项仅在使用 OpenSSL 构建 MySQL 时适用。有关
sha256_password
和caching_sha2_password
插件的信息,请参阅第 8.4.1.3 节,“SHA-256 可插拔认证”,以及第 8.4.1.2 节,“缓存 SHA-2 可插拔认证”。 -
--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
设置为ON
或STRICT
会导致客户端在启动时产生警告并在非 FIPS 模式下运行。从 MySQL 8.0.34 开始,此选项已被弃用。预计将在将来的 MySQL 版本中删除。
-
-
--tls-ciphersuites=*
ciphersuite_list*
命令行格式 --tls-ciphersuites=ciphersuite_list
引入版本 8.0.16 类型 字符串 用于使用 TLSv1.3 的加密连接的允许密码套件。该值是一个或多个以冒号分隔的密码套件名称列表。可以为此选项命名的密码套件取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。
此选项已添加到 MySQL 8.0.16 中。
-
--tls-version=*
protocol_list*
命令行格式 --tls-version=protocol_list
类型 字符串 默认值(≥ 8.0.16) TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
(OpenSSL 1.1.1 或更高版本)TLSv1,TLSv1.1,TLSv1.2
(否则)默认值(≤ 8.0.15) TLSv1,TLSv1.1,TLSv1.2
允许的加密连接的 TLS 协议。该值是一个或多个逗号分隔的协议名称列表。可以为此选项命名的协议取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。
-
--user=*
user_name*
,-u *
user_name*
命令行格式 --user=user_name
类型 字符串 用于连接到服务器的 MySQL 帐户的用户名。
如果您正在使用 MySQL 8.0.31 或更高版本的
Rewriter
插件,则应授予该用户SKIP_QUERY_REWRITE
权限。 -
--zstd-compression-level=*
level*
命令行格式 --zstd-compression-level=#
引入版本 8.0.18 类型 整数 用于使用
zstd
压缩算法连接到服务器的连接的压缩级别。允许的级别从 1 到 22,较大的值表示更高级别的压缩。默认的zstd
压缩级别为 3。压缩级别设置对不使用zstd
压缩的连接没有影响。更多信息,请参见第 6.2.8 节,“连接压缩控制”。
此选项在 MySQL 8.0.18 中添加。
选项文件选项
这些选项用于控制要读取哪些选项文件。
-
--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
的组。例如,mysqldump通常会读取[client]
和[mysqldump]
组。如果此选项给出为--defaults-group-suffix=_other
,mysqldump还会读取[client_other]
和[mysqldump_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 节,“影响选项文件处理的命令行选项”。
DDL 选项
mysqldump的使用场景包括设置一个全新的 MySQL 实例(包括数据库表),以及用现有数据库和表替换现有实例中的数据。以下选项允许您在恢复转储时指定要拆除和设置的内容,通过在转储文件中编码各种 DDL 语句。
-
--add-drop-database
命令行格式 --add-drop-database
在每个
CREATE DATABASE
语句之前写入一个DROP DATABASE
语句。此选项通常与--all-databases
或--databases
选项一起使用,因为除非指定了其中一个选项,否则不会写入任何CREATE DATABASE
语句。注意
在 MySQL 8.0 中,
mysql
模式被视为无法被最终用户删除的系统模式。如果使用--add-drop-database
与--all-databases
或与包括mysql
的要转储的模式列表的--databases
一起使用,则转储文件包含一个导致重新加载转储文件时出错的DROP DATABASE
mysql`` 语句。相反,要使用
--add-drop-database
,请使用带有要转储的模式列表的--databases
选项,其中列表不包括mysql
。 -
--add-drop-table
命令行格式 --add-drop-table
在每个
CREATE TABLE
语句之前写入一个DROP TABLE
语句。 -
--add-drop-trigger
命令行格式 --add-drop-trigger
在每个
CREATE TRIGGER
语句之前写入一个DROP TRIGGER
语句。 -
--all-tablespaces
,-Y
命令行格式 --all-tablespaces
将用于创建
NDB
表的所有表空间的 SQL 语句添加到表转储中。这些信息在 mysqldump 的输出中通常不包含。此选项目前仅与 NDB Cluster 表相关。 -
--no-create-db
,-n
命令行格式 --no-create-db
如果给定了
--databases
或--all-databases
选项,则在输出中包含的CREATE DATABASE
语句将被抑制。 -
--no-create-info
,-t
命令行格式 --no-create-info
不要编写创建每个转储表的
CREATE TABLE
语句。注意
此选项不排除从 mysqldump 输出中创建日志文件组或表空间的语句;但是,您可以使用
--no-tablespaces
选项来实现此目的。 -
--no-tablespaces
,-y
命令行格式 --no-tablespaces
此选项在mysqldump的输出中抑制所有
CREATE LOGFILE GROUP
和CREATE TABLESPACE
语句。 -
--replace
命令行格式 --replace
写入
REPLACE
语句而不是INSERT
语句。
调试选项
以下选项打印调试信息,在转储文件中编码调试信息,或让转储操作继续进行,而不考虑潜在问题。
-
--allow-keywords
命令行格式 --allow-keywords
允许创建关键字列名。这通过在每个列名前缀中添加表名来实现。
-
--comments
,-i
命令行格式 --comments
在转储文件中写入额外信息,如程序版本、服务器版本和主机。此选项默认启用。要抑制此额外信息,请使用
--skip-comments
。 -
--debug[=*
debug_options*]
,-# [*
debug_options*]
命令行格式 --debug[=debug_options]
类型 字符串 默认值 d:t:o,/tmp/mysqldump.trace
写入调试日志。典型的
debug_options
字符串是d:t:o,*
file_name*
。默认值为d:t:o,/tmp/mysqldump.trace
。该选项仅在使用
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 发布二进制文件不使用此选项构建。 -
--dump-date
命令行格式 --dump-date
类型 布尔值 默认值 TRUE
如果提供了
--comments
选项,mysqldump会在转储结束时生成以下形式的注释:-- Dump completed on *DATE*
然而,日期会导致在不同时间生成的转储文件看起来不同,即使数据本身相同。
--dump-date
和--skip-dump-date
控制是否将日期添加到注释中。默认是--dump-date
(在注释中包含日期)。--skip-dump-date
会禁止打印日期。 -
--force
,-f
命令行格式 --force
忽略所有错误;即使在表转储过程中发生 SQL 错误,也继续执行。
此选项的一个用途是导致mysqldump在遇到因引用已删除的表而无效的视图时继续执行。没有
--force
,mysqldump会退出并显示错误消息。有了--force
,mysqldump会打印错误消息,但也会将包含视图定义的 SQL 注释写入转储输出并继续执行。如果还提供了
--ignore-error
选项来忽略特定错误,则--force
优先。 -
--log-error=*
file_name*
命令行格式 --log-error=file_name
类型 文件名 通过将警告和错误附加到指定文件来记录。默认情况下不记录任何日志。
-
--skip-comments
命令行格式 --skip-comments
请参阅
--comments
选项的描述。 -
--verbose
,-v
命令行格式 --verbose
详细模式。打印有关程序操作的更多信息。
帮助选项
以下选项显示有关mysqldump命令本身的信息。
-
--help
,-?
命令行格式 --help
显示帮助消息并退出。
-
--version
,-V
命令行格式 --version
显示版本信息并退出。
国际化选项
以下选项更改mysqldump命令如何使用国家语言设置表示字符数据。
-
--character-sets-dir=*
dir_name*
命令行格式 --character-sets-dir=dir_name
类型 目录名称 安装字符集的目录。参见第 12.15 节,“字符集配置”。
-
--default-character-set=*
charset_name*
命令行格式 --default-character-set=charset_name
类型 字符串 默认值 utf8
使用
charset_name
作为默认字符集。参见第 12.15 节,“字符集配置”。如果未指定字符集,mysqldump将使用utf8mb4
。 -
--no-set-names
,-N
命令行格式 --no-set-names
已弃用 是 关闭
--set-charset
设置,与指定--skip-set-charset
相同。 -
--set-charset
命令行格式 --set-charset
禁用者 skip-set-charset
将
SET NAMES *
default_character_set*
写入输出。此选项默认启用。要禁止SET NAMES
语句,请使用--skip-set-charset
。
复制选项
mysqldump命令经常用于在复制配置中的复制服务器上创建空实例或包含数据的实例。以下选项适用于在复制源服务器和副本上转储和恢复数据。
-
--apply-replica-statements
命令行格式 --apply-replica-statements
引入版本 8.0.26 类型 布尔值 默认值 FALSE
从 MySQL 8.0.26 开始,使用
--apply-replica-statements
,在 MySQL 8.0.26 之前,使用--apply-slave-statements
。这两个选项具有相同的效果。对于使用--dump-replica
或--dump-slave
选项生成的副本转储,这些选项在具有二进制日志坐标的语句之前添加一个STOP REPLICA
(在 MySQL 8.0.22 之前为STOP SLAVE
)语句,并在输出末尾添加一个START REPLICA
语句。 -
--apply-slave-statements
命令行格式 --apply-slave-statements
已弃用 8.0.26 类型 布尔值 默认值 FALSE
在 MySQL 8.0.26 之前,请使用此选项,而不是
--apply-replica-statements
。这两个选项具有相同的效果。 -
--delete-source-logs
命令行格式 --delete-source-logs
引入版本 8.0.26 从 MySQL 8.0.26 开始,请使用
--delete-source-logs
,在 MySQL 8.0.26 之前,请使用--delete-master-logs
。这两个选项具有相同的效果。在复制源服务器上,这些选项通过在执行转储操作后向服务器发送PURGE BINARY LOGS
语句来删除二进制日志。这些选项需要RELOAD
权限以及足够执行该语句的权限。这些选项会自动启用--source-data
或--master-data
。 -
--delete-master-logs
命令行格式 --delete-master-logs
已弃用 8.0.26 在 MySQL 8.0.26 之前,请使用此选项,而不是
--delete-source-logs
。这两个选项具有相同的效果。 -
命令行格式 --dump-replica[=value]
引入版本 8.0.26 类型 数值 默认值 1
有效值 1``2
从 MySQL 8.0.26 开始,请使用
--dump-replica
,在 MySQL 8.0.26 之前,请使用--dump-slave
。这两个选项具有相同的效果。这些选项类似于--source-data
,只是用于转储副本服务器以生成可用于设置另一台具有与转储服务器相同源的服务器的转储文件。这些选项导致转储输出包括一个CHANGE REPLICATION SOURCE TO
语句(从 MySQL 8.0.23 开始)或一个CHANGE MASTER TO
语句(在 MySQL 8.0.23 之前),指示转储副本的源的二进制日志坐标(文件名和位置)。CHANGE REPLICATION SOURCE TO
语句从SHOW REPLICA STATUS
输出中读取Relay_Master_Log_File
和Exec_Master_Log_Pos
的值,并将它们分别用于SOURCE_LOG_FILE
和SOURCE_LOG_POS
。这些是副本开始复制的复制源服务器坐标。注意
从已执行的中继日志事务序列中的不一致性可能导致使用错误的位置。有关更多信息,请参见第 19.5.1.34 节,“复制和事务不一致性”。
--dump-replica
或--dump-slave
导致使用源的坐标而不是备份服务器的坐标,就像--source-data
或--master-data
选项所做的那样。此外,指定此选项会覆盖使用的--source-data
或--master-data
选项,并有效地被忽略。警告
如果将要应用备份的服务器使用了
gtid_mode=ON
和SOURCE_AUTO_POSITION=1
或MASTER_AUTO_POSITION=1
,则不应使用--dump-replica
或--dump-slave
。选项值的处理方式与
--source-data
相同。设置为无值或 1 会导致写入一个CHANGE REPLICATION SOURCE TO
语句(从 MySQL 8.0.23 开始)或CHANGE MASTER TO
语句(在 MySQL 8.0.23 之前)。设置为 2 会导致写入该语句,但用 SQL 注释括起来。在启用或禁用其他选项以及处理锁定方面,它与--source-data
具有相同的效果。--dump-replica
或--dump-slave
导致mysqldump在备份前停止复制 SQL 线程,并在备份后重新启动。--dump-replica
或--dump-slave
向服务器发送一个SHOW REPLICA STATUS
语句以获取信息,因此它们需要具有足够权限执行该语句。--apply-replica-statements
和--include-source-host-port
选项可以与--dump-replica
或--dump-slave
一起使用。 -
命令行格式 --dump-slave[=value]
已弃用 8.0.26 类型 数值 默认值 1
有效数值 1``2
在 MySQL 8.0.26 之前,请使用这个选项,而不是
--dump-replica
。这两个选项具有相同的效果。 -
--include-source-host-port
命令行格式 --include-source-host-port
引入版本 8.0.26 类型 布尔值 默认值 FALSE
从 MySQL 8.0.26 开始,使用
--include-source-host-port
,在 MySQL 8.0.26 之前,使用--include-master-host-port
。这两个选项具有相同的效果。这些选项为主机名和复制源的 TCP/IP 端口号添加了SOURCE_HOST
|MASTER_HOST
和SOURCE_PORT
|MASTER_PORT
选项,以便在使用--dump-replica
或--dump-slave
选项生成的复制转储中的CHANGE REPLICATION SOURCE TO
语句(从 MySQL 8.0.23 开始)或CHANGE MASTER TO
语句(在 MySQL 8.0.23 之前)。 -
--include-master-host-port
命令行格式 --include-master-host-port
已弃用 8.0.26 类型 布尔值 默认值 FALSE
在 MySQL 8.0.26 之前,请使用此选项,而不是
--include-source-host-port
。这两个选项具有相同的效果。 -
命令���格式 --source-data[=value]
引入版本 8.0.26 类型 数值 默认值 1
有效数值 1``2
从 MySQL 8.0.26 开始,使用
--source-data
,在 MySQL 8.0.26 之前,使用--master-data
。这两个选项具有相同的效果。这些选项用于转储复制源服务器,以生成一个可以用来设置另一台服务器作为源的副本的转储文件。这些选项导致转储输出包括一个CHANGE REPLICATION SOURCE TO
语句(从 MySQL 8.0.23 开始)或CHANGE MASTER TO
语句(在 MySQL 8.0.23 之前),指示了被转储服务器的二进制日志坐标(文件名和位置)。这些是副本在将转储文件加载到副本后应从中开始复制的复制源服务器坐标。如果选项值为 2,则
CHANGE REPLICATION SOURCE TO
|CHANGE MASTER TO
语句被写为 SQL 注释,因此仅具有信息性;在重新加载转储文件时不起作用。如果选项值为 1,则该语句不会被写为注释,并在重新加载转储文件时生效。如果未指定选项值,则默认值为 1。--source-data
和--master-data
向服务器发送SHOW MASTER STATUS
语句以获取信息,因此它们需要具有足够执行该语句的权限。此选项还需要RELOAD
权限,并且必须启用二进制日志。--source-data
和--master-data
会自动关闭--lock-tables
。它们还会打开--lock-all-tables
,除非还指定了--single-transaction
,在这种情况下,全局读锁仅在转储开始时的短时间内获取(请参阅--single-transaction
的描述)。在所有情况下,日志上的任何操作都发生在转储的确切时刻。通过使用
--dump-replica
或--dump-slave
选项,可以通过转储源的现有副本来设置副本,这将覆盖--source-data
和--master-data
,并导致它们被忽略。 -
命令行格式 --master-data[=value]
已弃用 8.0.26 类型 数值 默认值 1
有效值 1``2
在 MySQL 8.0.26 之前,请使用此选项,而不是
--source-data
。这两个选项具有相同的效果。 -
--set-gtid-purged=*
value*
命令行格式 --set-gtid-purged=value
类型 枚举 默认值 AUTO
有效值 OFF``ON``AUTO
这个选项适用于使用基于 GTID 的复制的服务器(
gtid_mode=ON
)。它控制在转储输出中包含一个SET @@GLOBAL.gtid_purged
语句,该语句更新重新加载转储文件的服务器上的gtid_purged
的值,以添加源服务器的gtid_executed
系统变量中的 GTID 集。gtid_purged
保存了已应用于服务器上的所有事务的 GTID,但在服务器上的任何二进制日志文件中不存在。因此,mysqldump会为在源服务器上执行的事务添加 GTID,以便目标服务器记录这些事务已应用,尽管它在其二进制日志中没有这些事务。--set-gtid-purged
还控制在重新加载转储文件时包含一个SET @@SESSION.sql_log_bin=0
语句,该语句在禁用二进制日志记录时防止生成新的 GTID 并将其分配给转储文件中执行的事务,以便使用原始事务的 GTID。如果不设置
--set-gtid-purged
选项,则默认情况下,如果您要备份的服务器启用了 GTID,并且全局值的gtid_executed
系统变量中的 GTID 集不为空,则在转储输出中包含一个SET @@GLOBAL.gtid_purged
语句。如果服务器启用了 GTID,则还包括一个SET @@SESSION.sql_log_bin=0
语句。您可以将
gtid_purged
的值替换为指定的 GTID 集,或者在语句中添加加号(+)以将指定的 GTID 集附加到已由gtid_purged
持有的 GTID 集。由mysqldump记录的SET @@GLOBAL.gtid_purged
语句包含一个加号(+
)的特定版本注释,使得 MySQL 将转储文件中的 GTID 集添加到现有的gtid_purged
值中。需要注意的是,由 mysqldump 包含在
SET @@GLOBAL.gtid_purged
语句中的值包括服务器上gtid_executed
集合中的所有事务的 GTID,甚至包括更改了数据库的被抑制部分或服务器上未包含在部分转储中的其他数据库的事务。这意味着在重放转储文件的服务器上更新了gtid_purged
值后,可能存在与目标服务器上的任何数据无关的 GTID。如果在目标服务器上不再重放任何进一步的转储文件,则多余的 GTID 不会对服务器未来的操作造成任何问题,但它们使得在复制拓扑中的不同服务器上比较或协调 GTID 集合变得更加困难。如果在目标服务器上重放包含相同 GTID 的进一步转储文件(例如,来自相同原始服务器的另一个部分转储),第二个转储文件中的任何SET @@GLOBAL.gtid_purged
语句都会失败。在这种情况下,在重放转储文件之前要么手动删除该语句,要么在输出转储文件时不包含该语句。在 MySQL 8.0.32 之前:在使用
--single-transaction
选项时,可能会导致输出不一致。如果需要--set-gtid-purged=ON
,可以与--lock-all-tables
一起使用,但这可能会在运行 mysqldump 时阻止并行查询。如果
SET @@GLOBAL.gtid_purged
语句在目标服务器上不会产生预期结果,您可以将该语句从输出中排除,或者(从 MySQL 8.0.17 开始)包含该语句但将其注释掉,以便不会自动执行。您也可以包含该语句,但在转储文件中手动编辑以实现预期结果。--set-gtid-purged
选项的可能值如下:AUTO
默认值。如果在您备份的服务器上启用了 GTID,并且
gtid_executed
不为空,则将SET @@GLOBAL.gtid_purged
添加到输出中,其中包含来自gtid_executed
的 GTID 集合。如果启用了 GTID,则将SET @@SESSION.sql_log_bin=0
添加到输出中。如果在服务器上未启用 GTID,则不会添加这些语句到输出中。OFF
SET @@GLOBAL.gtid_purged
不会被添加到输出中,SET @@SESSION.sql_log_bin=0
也不会被添加到输出中。对于不使用 GTIDs 的服务器,请使用此选项或AUTO
。仅对使用 GTIDs 的服务器使用此选项,如果您确定所需的 GTID 集已经存在于目标服务器的gtid_purged
中并且不应更改,或者如果您计划手动识别并添加任何缺失的 GTIDs。ON
如果服务器启用了 GTIDs,
SET @@GLOBAL.gtid_purged
将被添加到输出中(除非gtid_executed
为空),并且SET @@SESSION.sql_log_bin=0
将被添加到输出中。如果设置了此选项但服务器未启用 GTIDs,则会发生错误。对于使用 GTIDs 的服务器,请使用此选项或AUTO
,除非您确定gtid_executed
中的 GTIDs 在目标服务器上不需要。COMMENTED
从 MySQL 8.0.17 开始可用。如果服务器启用了 GTIDs,
SET @@GLOBAL.gtid_purged
将被添加到输出中(除非gtid_executed
为空),但被注释掉。这意味着gtid_executed
的值在输出中是可用的,但在重新加载转储文件时不会自动执行任何操作。SET @@SESSION.sql_log_bin=0
被添加到输出中,并且没有被注释掉。通过COMMENTED
,您可以手动或通过自动化控制gtid_executed
集的使用。例如,如果您正在将数据迁移到另一个已经具有不同活动数据库的服务器上,您可能更喜欢这样做。
格式选项
以下选项指定如何表示整个转储文件或转储文件中某些类型的数据。它们还控制是否将某些可选信息写入转储文件。
-
--compact
命令行格式 --compact
生成更紧凑的输出。此选项启用
--skip-add-drop-table
、--skip-add-locks
、--skip-comments
、--skip-disable-keys
和--skip-set-charset
选项。 -
--compatible=*
name*
命令行格式 --compatible=name[,name,...]
类型 字符串 默认值 ''
有效值 ansi``mysql323``mysql40``postgresql``oracle``mssql``db2``maxdb``no_key_options``no_table_options``no_key_options
生���与其他数据库系统或较旧的 MySQL 服务器更兼容的输出。此选项的唯一允许值为
ansi
,其含义与设置服务器 SQL 模式的相应选项相同。参见 Section 7.1.11, “Server SQL Modes”。 -
--complete-insert
,-c
命令行格式 --complete-insert
使用包含列名的完整
INSERT
语句。 -
--create-options
命令行格式 --create-options
在
CREATE TABLE
语句中包含所有特定于 MySQL 的表选项。 -
--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
类型 字符串 这些选项与
--tab
选项一起使用,具有与LOAD DATA
中相应FIELDS
子句相同的含义。参见 Section 15.2.9, “LOAD DATA Statement”。 -
--hex-blob
命令行格式 --hex-blob
使用十六进制表示法转储二进制列(例如,
'abc'
变为0x616263
)。受影响的数据类型包括BINARY
类型,VARBINARY
类型,BLOB
类型,BIT
类型,所有空间数据类型,以及其他非二进制数据类型(当与binary
字符集一起使用时)。当使用
--tab
时,将忽略--hex-blob
选项。 -
--lines-terminated-by=...
命令行格式 --lines-terminated-by=string
类型 字符串 此选项与
--tab
选项一起使用,具有与LOAD DATA
中相应LINES
子句相同的含义。参见 Section 15.2.9, “LOAD DATA Statement”。 -
--quote-names
,-Q
Command-Line Format --quote-names
Disabled by skip-quote-names
在```sql characters. If the
ANSI_QUOTES
SQL mode is enabled, identifiers are quoted within"
characters. This option is enabled by default. It can be disabled with--skip-quote-names
, but this option should be given after any option such as--compatible
that may enable--quote-names
.
-
--result-file=*
file_name*
,-r *
file_name*
| Command-Line Format |
--result-file=file_name
|
| Type | File name |Direct output to the named file. The result file is created and its previous contents overwritten, even if an error occurs while generating the dump.
This option should be used on Windows to prevent newline
\n
characters from being converted to\r\n
carriage return/newline sequences. -
--show-create-skip-secondary-engine=*
value*
| Command-Line Format |
--show-create-skip-secondary-engine
|
| Introduced | 8.0.18 |Excludes the
SECONDARY ENGINE
clause fromCREATE TABLE
statements. It does so by enabling theshow_create_table_skip_secondary_engine
system variable for the duration of the dump operation. Alternatively, you can enable theshow_create_table_skip_secondary_engine
system variable prior to using mysqldump.This option was added in MySQL 8.0.18. Attempting a mysqldump operation with the
--show-create-skip-secondary-engine
option on a release prior to MySQL 8.0.18 that does not support theshow_create_table_skip_secondary_engine
variable causes an error. -
--tab=*
dir_name*
,-T *
dir_name*
| Command-Line Format |
--tab=dir_name
|
| Type | Directory name |Produce tab-separated text-format data files. For each dumped table, mysqldump creates a
*
tbl_name*.sql
file that contains theCREATE TABLE
statement that creates the table, and the server writes a*
tbl_name*.txt
file that contains its data. The option value is the directory in which to write the files.Note
This option should be used only when mysqldump is run on the same machine as the mysqld server. Because the server creates
*.txt
files in the directory that you specify, the directory must be writable by the server and the MySQL account that you use must have theFILE
privilege. Because mysqldump creates*.sql
in the same directory, it must be writable by your system login account.By default, the
.txt
data files are formatted using tab characters between column values and a newline at the end of each line. The format can be specified explicitly using the--fields-*
xxx*
and--lines-terminated-by
options.Column values are converted to the character set specified by the
--default-character-set
option. -
--tz-utc
| Command-Line Format |
--tz-utc
|
| Disabled by |skip-tz-utc
|This option enables
TIMESTAMP
columns to be dumped and reloaded between servers in different time zones. mysqldump sets its connection time zone to UTC and addsSET TIME_ZONE='+00:00'
to the dump file. Without this option,TIMESTAMP
columns are dumped and reloaded in the time zones local to the source and destination servers, which can cause the values to change if the servers are in different time zones.--tz-utc
also protects against changes due to daylight saving time.--tz-utc
is enabled by default. To disable it, use--skip-tz-utc
. -
--xml
,-X
| Command-Line Format |
--xml
|Write dump output as well-formed XML.
NULL
,'NULL'
, and Empty Values: For a column namedcolumn_name
, theNULL
value, an empty string, and the string value'NULL'
are distinguished from one another in the output generated by this option as follows.| Value: | XML Representation: |
|NULL
(unknown value) |<field name="*
column_name*" xsi:nil="true" />
|
|''
(empty string) |<field name="*
column_name*"></field>
|
|'NULL'
(string value) |<field name="*
column_name*">NULL</field>
|The output from the mysql client when run using the
--xml
option also follows the preceding rules. (See Section 6.5.1.1, “mysql Client Options”.)XML output from mysqldump includes the XML namespace, as shown here:
$> mysqldump --xml -u root world City <?xml version="1.0"?> <mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <database name="world"> <table_structure name="City"> <field Field="ID" Type="int(11)" Null="NO" Key="PRI" Extra="auto_increment" /> <field Field="Name" Type="char(35)" Null="NO" Key="" Default="" Extra="" /> <field Field="CountryCode" Type="char(3)" Null="NO" Key="" Default="" Extra="" /> <field Field="District" Type="char(20)" Null="NO" Key="" Default="" Extra="" /> <field Field="Population" Type="int(11)" Null="NO" Key="" Default="0" Extra="" /> <key Table="City" Non_unique="0" Key_name="PRIMARY" Seq_in_index="1" Column_name="ID" Collation="A" Cardinality="4079" Null="" Index_type="BTREE" Comment="" /> <options Name="City" Engine="MyISAM" Version="10" Row_format="Fixed" Rows="4079" Avg_row_length="67" Data_length="273293" Max_data_length="18858823439613951" Index_length="43008" Data_free="0" Auto_increment="4080" Create_time="2007-03-31 01:47:01" Update_time="2007-03-31 01:47:02" Collation="latin1_swedish_ci" Create_options="" Comment="" /> </table_structure> <table_data name="City"> <row> <field name="ID">1</field> <field name="Name">Kabul</field> <field name="CountryCode">AFG</field> <field name="District">Kabol</field> <field name="Population">1780000</field> </row> *...* <row> <field name="ID">4079</field> <field name="Name">Rafah</field> <field name="CountryCode">PSE</field> <field name="District">Rafah</field> <field name="Population">92020</field> </row> </table_data> </database> </mysqldump> ```sql
Filtering Options
The following options control which kinds of schema objects are written to the dump file: by category, such as triggers or events; by name, for example, choosing which databases and tables to dump; or even filtering rows from the table data using a WHERE
clause.
-
--all-databases
,-A
| Command-Line Format |
--all-databases
|Dump all tables in all databases. This is the same as using the
--databases
option and naming all the databases on the command line.Note
See the
--add-drop-database
description for information about an incompatibility of that option with--all-databases
.Prior to MySQL 8.0, the
--routines
and--events
options for mysqldump and mysqlpump were not required to include stored routines and events when using the--all-databases
option: The dump included themysql
system database, and therefore also themysql.proc
andmysql.event
tables containing stored routine and event definitions. As of MySQL 8.0, themysql.event
andmysql.proc
tables are not used. Definitions for the corresponding objects are stored in data dictionary tables, but those tables are not dumped. To include stored routines and events in a dump made using--all-databases
, use the--routines
and--events
options explicitly. -
--databases
,-B
| Command-Line Format |
--databases
|Dump several databases. Normally, mysqldump treats the first name argument on the command line as a database name and following names as table names. With this option, it treats all name arguments as database names.
CREATE DATABASE
andUSE
statements are included in the output before each new database.This option may be used to dump the
performance_schema
database, which normally is not dumped even with the--all-databases
option. (Also use the--skip-lock-tables
option.)Note
See the
--add-drop-database
description for information about an incompatibility of that option with--databases
. -
--events
,-E
| Command-Line Format |
--events
|Include Event Scheduler events for the dumped databases in the output. This option requires the
EVENT
privileges for those databases.The output generated by using
--events
containsCREATE EVENT
statements to create the events. -
--ignore-error=*
error[,error]...*
| Command-Line Format |
--ignore-error=error[,error]...
|
| Type | String |Ignore the specified errors. The option value is a list of comma-separated error numbers specifying the errors to ignore during mysqldump execution. If the
--force
option is also given to ignore all errors,--force
takes precedence. -
--ignore-table=*
db_name.tbl_name*
| Command-Line Format |
--ignore-table=db_name.tbl_name
|
| Type | String |Do not dump the given table, which must be specified using both the database and table names. To ignore multiple tables, use this option multiple times. This option also can be used to ignore views.
-
--no-data
,-d
| Command-Line Format |
--no-data
|Do not write any table row information (that is, do not dump table contents). This is useful if you want to dump only the
CREATE TABLE
statement for the table (for example, to create an empty copy of the table by loading the dump file). -
--routines
,-R
| Command-Line Format |
--routines
|Include stored routines (procedures and functions) for the dumped databases in the output. This option requires the global
SELECT
privilege.The output generated by using
--routines
containsCREATE PROCEDURE
andCREATE FUNCTION
statements to create the routines. -
--skip-generated-invisible-primary-key
| Command-Line Format |
--skip-generated-invisible-primary-key
|
| Introduced | 8.0.30 |
| Type | Boolean |
| Default Value |FALSE
|This option is available beginning with MySQL 8.0.30, and causes generated invisible primary keys to be excluded from the output. For more information, see Section 15.1.20.11, “Generated Invisible Primary Keys”.
-
--tables
| Command-Line Format |
--tables
|Override the
--databases
or-B
option. mysqldump regards all name arguments following the option as table names. -
--triggers
| Command-Line Format |
--triggers
|
| Disabled by |skip-triggers
|Include triggers for each dumped table in the output. This option is enabled by default; disable it with
--skip-triggers
.To be able to dump a table's triggers, you must have the
TRIGGER
privilege for the table.Multiple triggers are permitted. mysqldump dumps triggers in activation order so that when the dump file is reloaded, triggers are created in the same activation order. However, if a mysqldump dump file contains multiple triggers for a table that have the same trigger event and action time, an error occurs for attempts to load the dump file into an older server that does not support multiple triggers. (For a workaround, see Downgrade Notes; you can convert triggers to be compatible with older servers.)
-
--where='*
where_condition*'
,-w '*
where_condition*'
| Command-Line Format |
--where='where_condition'
|Dump only rows selected by the given
WHERE
condition. Quotes around the condition are mandatory if it contains spaces or other characters that are special to your command interpreter.Examples:
--where="user='jimf'" -w"userid>1" -w"userid<1" ```sql
Performance Options
The following options are the most relevant for the performance particularly of the restore operations. For large data sets, restore operation (processing the INSERT
statements in the dump file) is the most time-consuming part. When it is urgent to restore data quickly, plan and test the performance of this stage in advance. For restore times measured in hours, you might prefer an alternative backup and restore solution, such as MySQL Enterprise Backup for InnoDB
-only and mixed-use databases.
Performance is also affected by the transactional options, primarily for the dump operation.
-
--column-statistics
| Command-Line Format |
--column-statistics
|
| Type | Boolean |
| Default Value |OFF
|Add
ANALYZE TABLE
statements to the output to generate histogram statistics for dumped tables when the dump file is reloaded. This option is disabled by default because histogram generation for large tables can take a long time. -
--disable-keys
,-K
| Command-Line Format |
--disable-keys
|For each table, surround the
INSERT
statements with/*!40000 ALTER TABLE *
tbl_name* DISABLE KEYS */;
and/*!40000 ALTER TABLE *
tbl_name* ENABLE KEYS */;
statements. This makes loading the dump file faster because the indexes are created after all rows are inserted. This option is effective only for nonunique indexes ofMyISAM
tables. -
--extended-insert
,-e
| Command-Line Format |
--extended-insert
|
| Disabled by |skip-extended-insert
|Write
INSERT
statements using multiple-row syntax that includes severalVALUES
lists. This results in a smaller dump file and speeds up inserts when the file is reloaded. -
--insert-ignore
| Command-Line Format |
--insert-ignore
|Write
INSERT IGNORE
statements rather thanINSERT
statements. -
--max-allowed-packet=*
value*
| Command-Line Format |
--max-allowed-packet=value
|
| Type | Numeric |
| Default Value |25165824
|The maximum size of the buffer for client/server communication. The default is 24MB, the maximum is 1GB.
Note
The value of this option is specific to mysqldump and should not be confused with the MySQL server's
max_allowed_packet
system variable; the server value cannot be exceeded by a single packet from mysqldump, regardless of any setting for the mysqldump option, even if the latter is larger. -
--mysqld-long-query-time=*
value*
| Command-Line Format |
--mysqld-long-query-time=value
|
| Introduced | 8.0.30 |
| Type | Numeric |
| Default Value |Server global setting
|Set the session value of the
long_query_time
system variable. Use this option, which is available from MySQL 8.0.30, if you want to increase the time allowed for queries from mysqldump before they are logged to the slow query log file. mysqldump performs a full table scan, which means its queries can often exceed a globallong_query_time
setting that is useful for regular queries. The default global setting is 10 seconds.You can use
--mysqld-long-query-time
to specify a session value from 0 (meaning that every query from mysqldump is logged to the slow query log) to 31536000, which is 365 days in seconds. For mysqldump’s option, you can only specify whole seconds. When you do not specify this option, the server’s global setting applies to mysqldump’s queries. -
--net-buffer-length=*
value*
| Command-Line Format |
--net-buffer-length=value
|
| Type | Numeric |
| Default Value |16384
|The initial size of the buffer for client/server communication. When creating multiple-row
INSERT
statements (as with the--extended-insert
or--opt
option), mysqldump creates rows up to--net-buffer-length
bytes long. If you increase this variable, ensure that the MySQL servernet_buffer_length
system variable has a value at least this large. -
--network-timeout
,-M
| Command-Line Format |
--network-timeout[={0|1}]
|
| Type | Boolean |
| Default Value |TRUE
|Enable large tables to be dumped by setting
--max-allowed-packet
to its maximum value and network read and write timeouts to a large value. This option is enabled by default. To disable it, use--skip-network-timeout
. -
--opt
| Command-Line Format |
--opt
|
| Disabled by |skip-opt
|This option, enabled by default, is shorthand for the combination of
--add-drop-table
--add-locks
--create-options
--disable-keys
--extended-insert
--lock-tables
--quick
--set-charset
. It gives a fast dump operation and produces a dump file that can be reloaded into a MySQL server quickly.Because the
--opt
option is enabled by default, you only specify its converse, the--skip-opt
to turn off several default settings. See the discussion ofmysqldump
option groups for information about selectively enabling or disabling a subset of the options affected by--opt
. -
--quick
,-q
| Command-Line Format |
--quick
|
| Disabled by |skip-quick
|This option is useful for dumping large tables. It forces mysqldump to retrieve rows for a table from the server a row at a time rather than retrieving the entire row set and buffering it in memory before writing it out.
-
--skip-opt
| Command-Line Format |
--skip-opt
|See the description for the
--opt
option.
Transactional Options
The following options trade off the performance of the dump operation, against the reliability and consistency of the exported data.
-
--add-locks
| Command-Line Format |
--add-locks
|Surround each table dump with
LOCK TABLES
andUNLOCK TABLES
statements. This results in faster inserts when the dump file is reloaded. See Section 10.2.5.1, “Optimizing INSERT Statements”. -
--flush-logs
,-F
| Command-Line Format |
--flush-logs
|Flush the MySQL server log files before starting the dump. This option requires the
RELOAD
privilege. If you use this option in combination with the--all-databases
option, the logs are flushed for each database dumped. The exception is when using--lock-all-tables
,--source-data
or--master-data
, or--single-transaction
. In these cases, the logs are flushed only once, corresponding to the moment that all tables are locked byFLUSH TABLES WITH READ LOCK
. If you want your dump and the log flush to happen at exactly the same moment, you should use--flush-logs
together with--lock-all-tables
,--source-data
or--master-data
, or--single-transaction
. -
--flush-privileges
| Command-Line Format |
--flush-privileges
|Add a
FLUSH PRIVILEGES
statement to the dump output after dumping themysql
database. This option should be used any time the dump contains themysql
database and any other database that depends on the data in themysql
database for proper restoration.Because the dump file contains a
FLUSH PRIVILEGES
statement, reloading the file requires privileges sufficient to execute that statement.Note
For upgrades to MySQL 5.7 or higher from older versions, do not use
--flush-privileges
. For upgrade instructions in this case, see Section 3.5, “Changes in MySQL 8.0”. -
--lock-all-tables
,-x
| Command-Line Format |
--lock-all-tables
|Lock all tables across all databases. This is achieved by acquiring a global read lock for the duration of the whole dump. This option automatically turns off
--single-transaction
and--lock-tables
. -
--lock-tables
,-l
| Command-Line Format |
--lock-tables
|For each dumped database, lock all tables to be dumped before dumping them. The tables are locked with
READ LOCAL
to permit concurrent inserts in the case ofMyISAM
tables. For transactional tables such asInnoDB
,--single-transaction
is a much better option than--lock-tables
because it does not need to lock the tables at all.Because
--lock-tables
locks tables for each database separately, this option does not guarantee that the tables in the dump file are logically consistent between databases. Tables in different databases may be dumped in completely different states.Some options, such as
--opt
, automatically enable--lock-tables
. If you want to override this, use--skip-lock-tables
at the end of the option list. -
--no-autocommit
| Command-Line Format |
--no-autocommit
|Enclose the
INSERT
statements for each dumped table withinSET autocommit = 0
andCOMMIT
statements. -
--order-by-primary
| Command-Line Format |
--order-by-primary
|Dump each table's rows sorted by its primary key, or by its first unique index, if such an index exists. This is useful when dumping a
MyISAM
table to be loaded into anInnoDB
table, but makes the dump operation take considerably longer. -
--shared-memory-base-name=*
name*
| Command-Line Format |
--shared-memory-base-name=name
|
| Platform Specific | Windows |On Windows, the shared-memory name to use for connections made using shared memory to a local server. The default value is
MYSQL
. The shared-memory name is case-sensitive.This option applies only if the server was started with the
shared_memory
system variable enabled to support shared-memory connections. -
--single-transaction
| Command-Line Format |
--single-transaction
|This option sets the transaction isolation mode to
REPEATABLE READ
and sends aSTART TRANSACTION
SQL statement to the server before dumping data. It is useful only with transactional tables such asInnoDB
, because then it dumps the consistent state of the database at the time whenSTART TRANSACTION
was issued without blocking any applications.The
RELOAD
orFLUSH_TABLES
privilege is required with--single-transaction
if bothgtid_mode=ON
andgtid_purged=ON|AUTO
. This requirement was added in MySQL 8.0.32.When using this option, you should keep in mind that only
InnoDB
tables are dumped in a consistent state. For example, anyMyISAM
orMEMORY
tables dumped while using this option may still change state.While a
--single-transaction
dump is in process, to ensure a valid dump file (correct table contents and binary log coordinates), no other connection should use the following statements:ALTER TABLE
,CREATE TABLE
,DROP TABLE
,RENAME TABLE
,TRUNCATE TABLE
. A consistent read is not isolated from those statements, so use of them on a table to be dumped can cause theSELECT
that is performed by mysqldump to retrieve the table contents to obtain incorrect contents or fail.The
--single-transaction
option and the--lock-tables
option are mutually exclusive becauseLOCK TABLES
causes any pending transactions to be committed implicitly.Before 8.0.32: Using
--single-transaction
together with the--set-gtid-purged
option was not recommended; doing so could lead to inconsistencies in the output of mysqldump.To dump large tables, combine the
--single-transaction
option with the--quick
option.
Option Groups
-
The
--opt
option turns on several settings that work together to perform a fast dump operation. All of these settings are on by default, because--opt
is on by default. Thus you rarely if ever specify--opt
. Instead, you can turn these settings off as a group by specifying--skip-opt
, then optionally re-enable certain settings by specifying the associated options later on the command line. -
The
--compact
option turns off several settings that control whether optional statements and comments appear in the output. Again, you can follow this option with other options that re-enable certain settings, or turn all the settings on by using the--skip-compact
form.
When you selectively enable or disable the effect of a group option, order is important because options are processed first to last. For example, --disable-keys
--lock-tables
--skip-opt
would not have the intended effect; it is the same as --skip-opt
by itself.
Examples
To make a backup of an entire database:
mysqldump *db_name* > *backup-file.sql*
```sql
To load the dump file back into the server:
mysql db_name < backup-file.sql
Another way to reload the dump file:
mysql -e "source /path-to-backup/backup-file.sql" db_name
**mysqldump** is also very useful for populating databases by copying data from one MySQL server to another:
mysqldump --opt db_name | mysql --host=remote_host -C db_name
You can dump several databases with one command:
mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql
To dump all databases, use the `--all-databases` option:
mysqldump --all-databases > all_databases.sql
For `InnoDB` tables, **mysqldump** provides a way of making an online backup:
mysqldump --all-databases --master-data --single-transaction > all_databases.sql
Or, in MySQL 8.0.26 and later:
mysqldump --all-databases --source-data --single-transaction > all_databases.sql
This backup acquires a global read lock on all tables (using `FLUSH TABLES WITH READ LOCK`) at the beginning of the dump. As soon as this lock has been acquired, the binary log coordinates are read and the lock is released. If long updating statements are running when the `FLUSH` statement is issued, the MySQL server may get stalled until those statements finish. After that, the dump becomes lock free and does not disturb reads and writes on the tables. If the update statements that the MySQL server receives are short (in terms of execution time), the initial lock period should not be noticeable, even with many updates.
For point-in-time recovery (also known as “roll-forward,” when you need to restore an old backup and replay the changes that happened since that backup), it is often useful to rotate the binary log (see Section 7.4.4, “The Binary Log”) or at least know the binary log coordinates to which the dump corresponds:
mysqldump --all-databases --master-data=2 > all_databases.sql
Or, in MySQL 8.0.26 and later:
mysqldump --all-databases --source-data=2 > all_databases.sql
Or:
mysqldump --all-databases --flush-logs --master-data=2 > all_databases.sql
Or, in MySQL 8.0.26 and later:
mysqldump --all-databases --flush-logs --source-data=2 > all_databases.sql
`--source-data`或`--master-data`选项可以与`--single-transaction`选项同时使用,这为使用`InnoDB`存储引擎存储表的情况下,在进行点时间恢复之前适用的在线备份提供了便利的方式。
有关备份的更多信息,请参阅 Section 9.2, “Database Backup Methods”和 Section 9.3, “Example Backup and Recovery Strategy”。
+ 要选择`--opt`的效果,除了一些功能外,对于每个功能使用`--skip`选项。要禁用扩展插入和内存缓冲,请使用`--opt` `--skip-extended-insert` `--skip-quick`。(实际上,`--skip-extended-insert` `--skip-quick`就足够了,因为`--opt`默认开启。)
+ 要对除了禁用索引和表锁定之外的所有功能进行反转`--opt`,请使用`--skip-opt` `--disable-keys` `--lock-tables`。
#### 限制
**mysqldump** 默认不会转储`performance_schema`或`sys`模式。要转储其中任何一个,请在命令行上明确指定它们的名称。您还可以使用`--databases`选项指定它们。对于`performance_schema`,还要使用`--skip-lock-tables`选项。
**mysqldump** 不会转储`INFORMATION_SCHEMA`模式。
**mysqldump** 不会转储`InnoDB`的`CREATE TABLESPACE`语句。
**mysqldump** 不会转储 NDB Cluster `ndbinfo`信息数据库。
**mysqldump** 包括重新创建`mysql`数据库中的`general_log`和`slow_query_log`表的语句。日志表内容不会被转储。
如果由于权限不足而遇到备份视图的问题,请参阅 Section 27.9, “Restrictions on Views”以找到解决方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南