MySQL8-中文参考-五-

MySQL8 中文参考(五)

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

6.5 客户端程序

原文:dev.mysql.com/doc/refman/8.0/en/programs-client.html

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 命令行客户端

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

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 命令加载时的 charsetdelimiter

  • --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&#124;ON}]
    已弃用 8.0.18
    类型 布尔值
    默认值 OFF

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

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

  • --compression-algorithms=*value*

    命令行格式 --compression-algorithms=value
    引入版本 8.0.18
    类型 集合
    默认值 uncompressed
    有效数值 zlib``zstd``uncompressed

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

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

    此选项在 MySQL 8.0.18 中添加。

  • --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=_othermysql还会读取[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}]

    命令行格式 `--local-infile[={0 1}]`
    类型 布尔值
    默认值 FALSE

    默认情况下,LOAD DATALOCAL功能由编译到 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 db1mysql处理输入如下:

    • DELETE 语句会被执行,因为默认数据库是 db1,尽管该语句指定了不同数据库中的表。

    • DROP TABLECREATE TABLE 语句不会被执行,因为默认数据库不是 db1,尽管这些语句指定了 db1 中的表。

    • INSERTCREATE TABLE 语句会被执行,因为默认数据库是 db1,尽管 CREATE TABLE 语句指定了不同数据库中的表。

  • --pager[=*command*]

    命令行格式 --pager[=command]
    skip-pager 禁用 --password[=password]
    类型 字符串

    使用给定的命令来分页查询输出。如果省略命令,则默认分页器是您的 PAGER 环境变量的值。有效的分页器包括 lessmorecat [> 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 选项。

  • --password1[=*pass_val*]

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

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

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

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

  • --password2[=*pass_val*]

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

  • --password3[=*pass_val*]

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

  • --pipe, -W

    命令行格式 --pipe
    类型 字符串

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

  • --plugin-authentication-kerberos-client-mode=*value*

    命令行格式 --plugin-authentication-kerberos-client-mode
    引入版本 8.0.32
    类型 字符串
    默认值 SSPI
    有效值 GSSAPI``SSPI

    在 Windows 上,authentication_kerberos_client认证插件支持此插件选项。它提供了两个客户端用户可以在运行时设置的可能值:SSPIGSSAPI

    客户端端插件选项的默认值使用了 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 子句的 UPDATEDELETE 语句将产生错误。此外,对于产生(或估计产生)非常大结果集的 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_passwordcaching_sha2_password 认证插件进行身份验证的客户端。对于不使用这些插件进行身份验证的帐户,此选项将被忽略。如果不使用基于 RSA 的密码交换,例如客户端使用安全连接连接到服务器时,此选项也将被忽略。

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

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

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

  • --shared-memory-base-name=*name*

    命令行格式 --shared-memory-base-name=name
    特定平台 Windows

    在 Windows 上,用于使用共享内存进行到本地服务器的连接的共享内存名称。默认值为MYSQL。共享内存名称区分大小写。

    只有在服务器启动时启用了支持共享内存连接的shared_memory系统变量时,此选项才适用。

  • --show-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&#124;pipe_name}
    类型 字符串

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

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

  • --ssl*

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

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

    命令行格式 --ssl-fips-mode={OFF&#124;ON&#124;STRICT}
    已弃用 8.0.34
    类型 枚举
    默认值 OFF
    有效值 OFF``ON``STRICT

    控制是否在客户端端启用 FIPS 模式。--ssl-fips-mode 选项与其他 --ssl-*xxx* 选项不同,它不用于建立加密连接,而是用于影响允许哪些加密操作。请参阅 第 8.8 节,“FIPS 支持”。

    允许使用这些 --ssl-fips-mode 值:

    • OFF: 禁用 FIPS 模式。

    • ON: 启用 FIPS 模式。

    • STRICT: 启用“严格” FIPS 模式。

    注意

    如果 OpenSSL FIPS 对象模块不可用,则 --ssl-fips-mode 的唯一允许值是 OFF。在这种情况下,将 --ssl-fips-mode 设置为 ONSTRICT 会导致客户端在启动时产生警告并在非 FIPS 模式下运行。

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

  • --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>
    

    当使用 --xmlmysql 一起使用时,输出与 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 中添加。

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

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,除了非交互模式下的charsetdelimiter命令外,所有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 word INDEX in statements. mysql interprets this as INDE followed by the delimiter X.

    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 and VISUAL 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 the PAGER 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 with nopager. 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, or stdout 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, the tee option can be used instead to save query output, although it is not as convenient as pager 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 of mysql>.

  • 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, the status command contains a row showing SSL 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. The tee file can be disabled with the notee command. Executing tee 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>
    
    

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

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环境变量。(如果两者都指定,则选项值优先。)该值应该是一个或多个以冒号分隔的模式列表,这些模式将附加到默认模式列表。

在命令行上指定的模式可能需要用引号引起或转义,以防止您的命令解释器将其视为特殊字符。例如,为了除了忽略涉及密码的语句外,还抑制UPDATEDELETE语句的记录,请像这样调用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”。

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

6.5.1.6 mysql 客户端技巧

本节提供有关更有效使用 mysqlmysql 操作行为的技术信息。

  • 输入行编辑

  • 禁用交互式历史记录

  • Windows 上的 Unicode 支持

  • 垂直显示查询结果

  • 使用安全更新模式(--safe-updates)

  • 禁用 mysql 自动重新连接

  • mysql 客户端解析器与服务器解析器

输入行编辑

mysql 支持输入行编辑,使您能够就地修改当前输入行或回忆先前输入的行。例如,左箭头右箭头 键在当前输入行内水平移动,上箭头下箭头 键在先前输入的行集合中上下移动。退格键 删除光标前的字符,输入新字符会在光标位置输入。要输入行,按 Enter 键。

在 Windows 上,编辑键序列与控制台窗口中支持的命令编辑相同。在 Unix 上,键序列取决于用于构建 mysql 的输入库(例如,libeditreadline 库)。

libeditreadline 库的文档可在线获取。要更改给定输入库允许的键序列集合,请在库启动文件中定义键绑定。这是位于您的主目录中的文件:对于 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的末尾暂时放置一行只写bindmysql 在启动时显示绑定。

禁用交互式历史记录

上箭头键可让您回忆当前和以前会话中的输入行。在共享控制台的情况下,此行为可能不合适。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 字符集:

  1. 打开一个控制台窗口。

  2. 转到控制台窗口属性,选择字体选项卡,并选择 Lucida Console 或其他兼容的 Unicode 字体。这是必要的,因为控制台窗口默认使用不适合 Unicode 的 DOS 点阵字体。

  3. 执行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,效果相同)。安全更新模式对于可能已经发出UPDATEDELETE语句但忘记在WHERE子句中指定要修改的行时很有帮助。通常,这些语句会更新或删除表中的所有行。使用--safe-updates,您只能通过指定标识它们的键值、LIMIT子句或两者来修改行。这有助于防止意外发生。安全更新模式还限制产生(或估计产生)非常大结果集的SELECT语句。

--safe-updates选项在连接到 MySQL 服务器时,会让mysql执行以下语句,以设置sql_safe_updatessql_select_limitmax_join_size系统变量的会话值:

SET sql_safe_updates=1, sql_select_limit=1000, max_join_size=1000000;

SET语句会影响语句处理如下:

  • 启用sql_safe_updates会导致UPDATEDELETE语句如果在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子句中指定了关键列,如果优化器决定不使用关键列上的索引,则UPDATEDELETE语句在安全更新模式下也可能产生错误:

  • 如果内存使用超过range_optimizer_max_mem_size系统变量允许的范围,则无法使用索引上的范围访问。优化器然后退回到表扫描。请参阅限制范围优化的内存使用。

  • 如果键比较需要类型转换,则可能不使用索引(参见第 10.3.1 节,“MySQL 如何使用索引”)。假设一个索引的字符串列c1与数值2222进行比较,使用WHERE c1 = 2222。对于这样的比较,字符串值会转换为数字,然后进行数值比较(参见第 14.3 节,“表达式求值中的类型转换”),从而阻止使用索引。如果启用了安全更新模式,将会产生错误。

截至 MySQL 8.0.13,安全更新模式还包括以下行为:

  • UPDATEDELETE语句的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

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

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命令之后,您可以提供一个空格分隔的日志类型列表,其中包括以下一个或多个日志类型:binaryengineerrorgeneralrelayslow。这些对应于可以为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会提示输入密码值,这样您就可以避免在命令行中指定密码。只有在passwordmysqladmin命令行上的最后一个命令时才应省略密码值。否则,下一个参数将被视为密码。

    注意

    如果服务器是使用--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-*refreshreload命令数。

  • 打开的表

    当前打开的表的数量。

如果在使用 Unix 套接字文件连接到本地服务器时执行mysqladmin shutdownmysqladmin 会等到服务器的进程 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&#124;ON}]
    废弃 8.0.18
    类型 布尔值
    默认值 OFF

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

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

  • --compression-algorithms=*value*

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

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

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

    此选项在 MySQL 8.0.18 中添加。

  • --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=_othermysqladmin还会读取[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选项。

  • --password1[=*pass_val*]

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

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

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

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

  • --password2[=*pass_val*]

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

  • --password3[=*pass_val*]

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

  • --pipe, -W

    命令行格式 --pipe
    类型 字符串

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

  • --plugin-dir=*dir_name*

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

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

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

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

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

  • --shared-memory-base-name=*name*

    命令行格式 --shared-memory-base-name=name
    特定平台 Windows

    在 Windows 上,用于使用共享内存连接到本地服务器的共享内存名称。默认值为MYSQL。共享内存名称区分大小写。

    仅当服务器启用了支持共享内存连接的shared_memory系统变量时,此选项才适用。

  • --show-warnings

    命令行格式 --show-warnings

    显示由发送到服务器的语句执行引起的警告。

  • --shutdown-timeout=*value*

    命令行格式 --shutdown-timeout=seconds
    类型 数字
    默认值 3600

    等待服务器关闭的最大秒数。默认值为 3600(1 小时)。

  • --silent, -s

    命令行格式 --silent

    如果无法建立与服务器的连接,则静默退出。

  • --sleep=*delay*, -i *delay*

    命令行格式 --sleep=delay

    重复执行命令,在delay秒之间休眠。--count选项确定迭代次数。如果未提供--countmysqladmin将无限期执行命令,直到被中断。

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

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

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

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

  • --ssl*

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

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

    命令行格式 --ssl-fips-mode={OFF&#124;ON&#124;STRICT}
    已弃用 8.0.34
    类型 枚举
    默认值 OFF
    有效值 OFF``ON``STRICT

    控制是否在客户端上启用 FIPS 模式。--ssl-fips-mode 选项与其他 --ssl-*xxx* 选项不同,它不用于建立加密连接,而是影响允许哪些加密操作。请参见第 8.8 节,“FIPS 支持”。

    允许使用的--ssl-fips-mode 值为:

    • OFF: 禁用 FIPS 模式。

    • ON: 启用 FIPS 模式。

    • STRICT: 启用“严格” FIPS 模式。

    注意

    如果 OpenSSL FIPS 对象模块不可用,则--ssl-fips-mode 的唯一允许值为 OFF。在这种情况下,将--ssl-fips-mode 设置为 ONSTRICT 会导致客户端在启动时产生警告并在非 FIPS 模式下运行。

    截至 MySQL 8.0.34,此选项已弃用。预计在将来的 MySQL 版本中将其移除。

  • --tls-ciphersuites=*ciphersuite_list*

    命令行格式 --tls-ciphersuites=ciphersuite_list
    引入版本 8.0.16
    类型 字符串

    用于使用 TLSv1.3 的加密连接的可用密码套件。该值是一个或多个以冒号分隔的密码套件名称列表。可以为此选项命名的密码套件取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。

    此选项已于 MySQL 8.0.16 中添加。

  • --tls-version=*protocol_list*

    命令行格式 --tls-version=protocol_list
    类型 字符串
    默认值 (≥ 8.0.16) TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 (OpenSSL 1.1.1 或更高版本)TLSv1,TLSv1.1,TLSv1.2 (否则)
    默认值 (≤ 8.0.15) TLSv1,TLSv1.1,TLSv1.2

    可用于加密连接的 TLS 协议。该值是一个或多个逗号分隔的协议名称列表。可以为此选项命名的协议取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。

  • --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

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

mysqlcheck客户端执行表维护:检查、修复、优化或分析表。

每个表在处理过程中被锁定,因此在处理过程中对其他会话不可用,尽管对于检查操作,表仅使用READ锁定(请参阅第 15.3.6 节“LOCK TABLES 和 UNLOCK TABLES 语句”,了解有关READWRITE锁定的更多信息)。表维护操作可能耗时,特别是对于大表。如果使用--databases--all-databases选项来处理一个或多个数据库中的所有表,那么调用mysqlcheck可能需要很长时间。(如果 MySQL 升级过程确定需要进行表检查,因为它以相同方式处理表,这也适用。)

mysqlcheck 必须在mysqld服务器运行时使用,这意味着您无需停止服务器即可执行表维护。

mysqlcheck 使用 SQL 语句CHECK TABLEREPAIR TABLEANALYZE TABLEOPTIMIZE 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)可以通过重命名二进制文件来更改。如果您希望默认情况下修复表格的工具,只需复制一个名为mysqlrepairmysqlcheck副本,或者创建一个指向名为mysqlrepairmysqlcheck的符号链接。如果调用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_SCHEMAperformance_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&#124;ON}]
    弃用 8.0.18
    类型 布尔值
    默认值 OFF

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

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

  • --compression-algorithms=*value*

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

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

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

    此选项在 MySQL 8.0.18 中添加。

  • --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=_othermysqlcheck还会读取[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选项。

  • --password1[=*pass_val*]

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

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

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

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

  • --password2[=*pass_val*]

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

  • --password3[=*pass_val*]

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

  • --pipe, -W

    命令行格式 --pipe
    类型 字符串

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

  • --plugin-dir=*dir_name*

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

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

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

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

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

  • --shared-memory-base-name=*name*

    命令行格式 --shared-memory-base-name=name
    特定平台 Windows

    在 Windows 上,用于通过共享内存连接到本地服务器的共享内存名称。默认值为 MYSQL。共享内存名称区分大小写。

    此选项仅在服务器启用了 shared_memory 系统变量以支持共享内存连接时适用。

  • --silent, -s

    命令行格式 --silent

    静默模式。仅打印错误消息。

  • --skip-database=*db_name*

    命令行格式 --skip-database=db_name

    mysqlcheck 执行的操作中不包括命名数据库(区分大小写)。

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

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

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

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

  • --ssl*

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

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

    命令行格式 --ssl-fips-mode={OFF&#124;ON&#124;STRICT}
    已弃用 8.0.34
    类型 枚举
    默认值 OFF
    有效数值 OFF``ON``STRICT

    控制是否在客户端启用 FIPS 模式。--ssl-fips-mode 选项与其他 --ssl-*xxx* 选项不同,它不用于建立加密连接,而是影响允许哪些加密操作。参见 第 8.8 节,“FIPS 支持”。

    允许使用以下 --ssl-fips-mode 值:

    • OFF: 禁用 FIPS 模式。

    • ON: 启用 FIPS 模式。

    • STRICT: 启用“严格” FIPS 模式。

    注意

    如果 OpenSSL FIPS Object 模块不可用,则 --ssl-fips-mode 的唯一允许值是 OFF。在这种情况下,将 --ssl-fips-mode 设置为 ONSTRICT 会导致客户端在启动时产生警告并在非 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 TABLEOPTIMIZE TABLEREPAIR 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 — 一个数据库备份程序

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

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=ONgtid_purged=ON|AUTO,则还需要(自 MySQL 8.0.32 起)具有RELOADFLUSH_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表,或者如果您有InnoDBMyISAM表的混合,请考虑使用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&#124;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选项。

  • --password1[=*pass_val*]

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

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

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

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

  • --password2[=*pass_val*]

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

  • --password3[=*pass_val*]

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

  • --pipe, -W

    命令行格式 --pipe
    类型 字符串

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

  • --plugin-authentication-kerberos-client-mode=*value*

    命令行格式 --plugin-authentication-kerberos-client-mode
    引入版本 8.0.32
    类型 字符串
    默认值 SSPI
    有效值 GSSAPI

    在 Windows 上,authentication_kerberos_client认证插件支持此插件选项。客户端用户可以在运行时设置两个可能的值:SSPIGSSAPI

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

    如果给定--server-public-key-path=*file_name*,并指定一个有效的公钥文件,则优先使用该文件,而不是--get-server-public-key

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

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

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

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

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

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

  • --ssl*

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

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

    命令行格式 --ssl-fips-mode={OFF&#124;ON&#124;STRICT}
    弃用 8.0.34
    类型 枚举
    默认值 OFF
    有效值 OFF``ON``STRICT

    控制是否在客户端端启用 FIPS 模式。--ssl-fips-mode选项与其他--ssl-*xxx*选项不同,它不用于建立加密连接,而是用于影响允许的加密操作。请参见第 8.8 节,“FIPS 支持”。

    允许使用的--ssl-fips-mode值为:

    • OFF:禁用 FIPS 模式。

    • ON:启用 FIPS 模式。

    • STRICT:启用“严格” FIPS 模式。

    注意

    如果 OpenSSL FIPS 对象模块不可用,则--ssl-fips-mode的唯一允许值为OFF。在这种情况下,将--ssl-fips-mode设置为ONSTRICT会导致客户端在启动时产生警告并在非 FIPS 模式下运行。

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

  • --tls-ciphersuites=*ciphersuite_list*

    命令行格式 --tls-ciphersuites=ciphersuite_list
    引入版本 8.0.16
    类型 字符串

    用于使用 TLSv1.3 的加密连接的允许密码套件。该值是一个或多个以冒号分隔的密码套件名称列表。可以为此选项命名的密码套件取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。

    此选项已添加到 MySQL 8.0.16 中。

  • --tls-version=*protocol_list*

    命令行格式 --tls-version=protocol_list
    类型 字符串
    默认值(≥ 8.0.16) TLSv1,TLSv1.1,TLSv1.2,TLSv1.3(OpenSSL 1.1.1 或更高版本)TLSv1,TLSv1.1,TLSv1.2(否则)
    默认值(≤ 8.0.15) TLSv1,TLSv1.1,TLSv1.2

    允许的加密连接的 TLS 协议。该值是一个或多个逗号分隔的协议名称列表。可以为此选项命名的协议取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。

  • --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=_othermysqldump还会读取[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 GROUPCREATE 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在遇到因引用已删除的表而无效的视图时继续执行。没有--forcemysqldump会退出并显示错误消息。有了--forcemysqldump会打印错误消息,但也会将包含视图定义的 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*]

    命令行格式 --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_FileExec_Master_Log_Pos的值,并将它们分别用于SOURCE_LOG_FILESOURCE_LOG_POS。这些是副本开始复制的复制源服务器坐标。

    注意

    从已执行的中继日志事务序列中的不一致性可能导致使用错误的位置。有关更多信息,请参见第 19.5.1.34 节,“复制和事务不一致性”。

    --dump-replica--dump-slave 导致使用源的坐标而不是备份服务器的坐标,就像--source-data--master-data选项所做的那样。此外,指定此选项会覆盖使用的--source-data--master-data 选项,并有效地被忽略。

    警告

    如果将要应用备份的服务器使用了 gtid_mode=ONSOURCE_AUTO_POSITION=1MASTER_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*]

    命令行格式 --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_HOSTSOURCE_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*]

    命令���格式 --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*]

    命令行格式 --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 from CREATE TABLE statements. It does so by enabling the show_create_table_skip_secondary_engine system variable for the duration of the dump operation. Alternatively, you can enable the show_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 the show_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 the CREATE 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 the FILE 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 adds SET 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 named column_name, the NULL 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 the mysql system database, and therefore also the mysql.proc and mysql.event tables containing stored routine and event definitions. As of MySQL 8.0, the mysql.event and mysql.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 and USE 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 contains CREATE 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 contains CREATE PROCEDURE and CREATE 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 of MyISAM tables.

  • --extended-insert, -e

    | Command-Line Format | --extended-insert |
    | Disabled by | skip-extended-insert |

    Write INSERT statements using multiple-row syntax that includes several VALUES 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 than INSERT 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 global long_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 server net_buffer_length system variable has a value at least this large.

  • --network-timeout, -M

    | Command-Line Format | --network-timeout[={0&#124;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 of mysqldump 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 and UNLOCK 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 by FLUSH 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 the mysql database. This option should be used any time the dump contains the mysql database and any other database that depends on the data in the mysql 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 of MyISAM tables. For transactional tables such as InnoDB, --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 within SET autocommit = 0 and COMMIT 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 an InnoDB 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 a START TRANSACTION SQL statement to the server before dumping data. It is useful only with transactional tables such as InnoDB, because then it dumps the consistent state of the database at the time when START TRANSACTION was issued without blocking any applications.

    The RELOAD or FLUSH_TABLES privilege is required with --single-transaction if both gtid_mode=ON and gtid_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, any MyISAM or MEMORY 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 the SELECT 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 because LOCK 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”以找到解决方法。
posted @ 2024-06-23 16:29  绝不原创的飞龙  阅读(2)  评论(0编辑  收藏  举报