第6章 MySQL程序
第6章 MySQL程序
目录
- 6.1 MySQL程序概述
- 6.2 使用MySQL程序
- 6.3 服务器及服务器启动程序
- 6.4 与安装相关的程序
- 6.5 客户端程序
- 6.6 管理和实用程序
- 6.7 程序开发实用工具
- 6.8 其他程序
- 6.9 环境变量
- 6.10 MySQL中的Unix信号处理
本章简要概述了甲骨文公司提供的MySQL命令行程序。它还讨论了运行这些程序时指定选项的通用语法。大多数程序都有特定于其自身操作的选项,但所有程序的选项语法都类似。最后,本章对各个程序进行了更详细的描述,包括它们识别哪些选项。
https://dev.mysql.com/doc/refman/8.0/en/environment-variables.html)
6.1 MySQL程序概述
MySQL安装中有许多不同的程序。本节对它们进行简要概述。后续各节会对每个程序进行更详细的描述,但NDB Cluster程序除外。每个程序的描述都会说明其调用语法和所支持的选项。第25.5节“NDB Cluster程序”介绍了NDB Cluster特有的程序。
大多数MySQL发行版都包含所有这些程序,但特定于平台的程序除外。(例如,服务器启动脚本在Windows上不使用。)例外情况是RPM发行版更为专门化。有一个用于服务器的RPM,另一个用于客户端程序,依此类推。如果您似乎缺少一个或多个程序,请参阅第2章“安装MySQL”,了解有关发行版类型及其所含内容的信息。可能您所使用的发行版并未包含所有程序,因此您需要安装额外的软件包。
每个MySQL程序都接受许多不同的选项。大多数程序都提供一个--help
选项,您可以使用该选项来获取程序不同选项的说明。例如,尝试mysql --help。
你可以通过在命令行或选项文件中指定选项,来覆盖MySQL程序的默认选项值。有关调用程序和指定程序选项的常规信息,请参见第6.2节“使用MySQL程序”。
MySQL服务器,即mysqld,是MySQL安装中承担大部分工作的主程序。该服务器还附带了几个相关脚本,可帮助您启动和停止服务器:
-
SQL守护进程(即MySQL服务器)。要使用客户端程序,mysqld 必须正在运行,因为客户端通过连接到服务器来访问数据库。请参阅 6.3.1节,“mysqld — MySQL服务器”。
-
一个服务器启动脚本。mysqld_safe尝试启动mysqld。请参阅6.3.2节,“mysqld_safe - MySQL服务器启动脚本”。
-
一个服务器启动脚本。此脚本用于使用System V风格运行目录的系统,这些目录包含为特定运行级别启动系统服务的脚本。它调用mysqld_safe来启动MySQL服务器。请参阅6.3.3节,“mysql.server - MySQL服务器启动脚本”。
-
一个服务器启动脚本,可用于启动或停止系统上安装的多个服务器。请参阅6.3.4节,“mysqld_multi — 管理多个MySQL服务器”。
在MySQL安装或升级过程中,有几个程序会执行设置操作:
-
此程序用于 MySQL 构建/安装过程。它从错误源文件编译错误消息文件。请参阅 6.4.1 节,“comp_err — 编译 MySQL 错误消息文件”。
-
本程序可帮助您提高MySQL安装的安全性。请参阅 6.4.2节,“mysql_secure_installation — 提高MySQL安装安全性”。
-
注意
[!CAUTION]
自MySQL 8.0.34起,mysql_ssl_rsa_setup已被弃用。
此程序会在缺少支持安全连接所需的SSL证书、密钥文件和RSA密钥对文件时创建这些文件。由mysql_ssl_rsa_setup创建的文件可用于使用SSL或RSA的安全连接。请参阅6.4.3节,“mysql_ssl_rsa_setup — 创建SSL/RSA文件”。
-
该程序使用主机系统zoneinfo数据库(描述时区的文件集)的内容加载
mysql
数据库中的时区表。请参阅6.4.4节,“mysql_tzinfo_to_sql — 加载时区表”。 -
在MySQL 8.0.16之前,此程序用于MySQL升级操作之后。它会使用MySQL新版本中进行的任何更改来更新授权表,并检查表是否存在不兼容问题,必要时进行修复。请参阅6.4.5节,“mysql_upgrade — 检查和升级MySQL表”。
从 MySQL 8.0.16 开始,MySQL 服务器会执行之前由 mysql_upgrade 处理的升级任务(详细信息,请参阅 3.4 节,“MySQL 升级过程会升级哪些内容”)。
连接到MySQL服务器的MySQL客户端程序:
-
用于以交互方式输入SQL语句或以批处理模式从文件执行SQL语句的命令行工具。请参阅6.5.1节,“mysql — MySQL命令行客户端”。
-
一个执行管理操作的客户端,例如创建或删除数据库、重新加载授权表、将表刷新到磁盘以及重新打开日志文件。mysqladmin 还可用于从服务器检索版本、进程和状态信息。请参阅6.5.2节,“mysqladmin — MySQL 服务器管理程序”。
-
一个用于检查表、修复表、分析表以及优化表的表维护客户端。请参阅 6.5.3节,“mysqlcheck — 表维护程序”。
-
一个能将MySQL数据库以SQL、文本或XML格式转储到文件中的客户端。请参阅6.5.4节,“mysqldump——数据库备份程序”。
-
一个使用
LOAD DATA
将文本文件导入各自表中的客户端。请参阅 6.5.5 节,“mysqlimport — 数据导入程序”。 -
一个将MySQL数据库以SQL形式转储到文件中的客户端。请参阅6.5.6节,“mysqlpump — 数据库备份程序”。
-
mysqlsh
MySQL Shell 是适用于 MySQL Server 的高级客户端和代码编辑器。请参阅 MySQL Shell 8.0。除了提供类似于 mysql 的 SQL 功能之外,MySQL Shell 还为 JavaScript 和 Python 提供脚本编写功能,并包含用于与 MySQL 配合使用的 API。X DevAPI 使您能够处理关系型数据和文档数据,请参阅 第 22 章,将 MySQL 用作文档存储。AdminAPI 使您能够使用 InnoDB Cluster,请参阅 MySQL AdminAPI。
-
一个显示数据库、表、列和索引相关信息的客户端。请参阅6.5.7节,“mysqlshow —— 显示数据库、表和列的信息”。
-
这是一个客户端,旨在模拟MySQL服务器的客户端负载并报告每个阶段的耗时情况。其工作方式类似于多个客户端同时访问服务器。请参阅6.5.8节,“mysqlslap — 负载模拟客户端”。
MySQL管理和实用程序:
-
一种离线的
InnoDB
离线文件校验和实用程序。请参阅6.6.2节,“innochecksum — 离线InnoDB文件校验和实用程序”。 -
一种用于显示
MyISAM
表中全文索引信息的实用工具。请参阅6.6.3节,“myisam_ftdump — 显示全文索引信息”。 -
一个用于描述、检查、优化和修复
MyISAM
表的实用工具。请参阅6.6.4节,“myisamchk - MyISAM表维护实用工具”。 -
一个用于处理
MyISAM
日志文件内容的实用程序。请参阅6.6.5节,“myisamlog — 显示MyISAM日志文件内容”。 -
一种实用程序,用于压缩
MyISAM
表以生成更小的只读表。请参阅6.6.6节,“myisampack — 生成压缩的只读MyISAM表”。 -
该实用程序使您能够将身份验证凭据存储在一个名为
.mylogin.cnf
的安全加密登录路径文件中。请参阅 6.6.7节,“mysql_config_editor — MySQL配置实用程序”。 -
用于在一个密钥环组件与另一个密钥环组件之间迁移密钥的实用程序。请参阅6.6.8节,“mysql_migrate_keyring——密钥环密钥迁移实用程序”。
-
用于从二进制日志读取语句的实用程序。二进制日志文件中包含的已执行语句日志可用于帮助从崩溃中恢复。请参阅 6.6.9节,“mysqlbinlog — 处理二进制日志文件的实用程序”。
-
一个用于读取和汇总慢查询日志内容的实用工具。请参阅 6.6.10节,“mysqldumpslow — 汇总慢查询日志文件”。
MySQL程序开发实用工具:
-
一个生成编译MySQL程序时所需选项值的Shell脚本。请参阅 6.7.1节,“mysql_config — 显示编译客户端的选项”。
-
这是一个实用工具,用于显示选项文件的选项组中存在哪些选项。请参阅6.7.2节,“my_print_defaults — 显示选项文件中的选项”。
杂项实用工具:
-
这是一个实用程序,用于解压缩使用LZ4压缩创建的 mysqlpump 输出。请参阅 第6.8.1节,“lz4_decompress — 解压缩mysqlpump使用LZ4压缩的输出”。
-
该实用程序用于显示系统或MySQL错误代码的含义。请参阅 6.8.2节,“perror — 显示MySQL错误消息信息”。
-
一个用于解压缩使用ZLIB压缩创建的 mysqlpump 输出的实用工具。请参阅第6.8.3节,“zlib_decompress — 解压缩mysqlpump ZLIB压缩输出”。
甲骨文公司还提供了MySQL Workbench图形用户界面工具,该工具用于管理MySQL服务器和数据库、创建、执行和评估查询,以及从其他关系数据库管理系统迁移模式和数据,以便与MySQL配合使用。
使用MySQL客户端/服务器库与服务器通信的MySQL客户端程序会使用以下环境变量。
环境变量 | 含义 |
---|---|
MYSQL_UNIX_PORT |
默认的 Unix 套接字文件;用于连接到localhost |
MYSQL_TCP_PORT |
默认端口号;用于TCP/IP连接 |
MYSQL_DEBUG |
调试时的调试跟踪选项 |
TMPDIR |
创建临时表和文件的目录 |
有关 MySQL 程序使用的环境变量完整列表,请参阅6.9 节,“环境变量”。
6.2 使用MySQL程序
- 6.2.1 调用MySQL程序
- 6.2.2 指定程序选项
- 6.2.3 连接到服务器的命令选项
- 6.2.4 使用命令选项连接到MySQL服务器
- 6.2.5 使用类 URI 字符串或键值对连接到服务器
- 6.2.6 使用DNS SRV记录连接到服务器
- 6.2.7 连接传输协议
- 6.2.8 连接压缩控制
- 6.2.9 设置环境变量
6.2.1 调用MySQL程序
要从命令行(即从您的 shell 或命令提示符)调用 MySQL 程序,请输入程序名称,后跟指示程序执行所需操作的任何选项或其他参数。以下命令展示了一些示例程序调用。$>gt;
表示您的命令解释器的提示符;它不是您输入内容的一部分。您看到的特定提示符取决于您的命令解释器。典型的提示符有:对于 sh、ksh 或 bash 是 $
,对于 csh 或 tcsh 是 %
,对于 Windows command.com 或 cmd.exe 命令解释器是 C:\>
。
$> mysql --user=root test
$> mysqladmin extended-status variables
$> mysqlshow --help
$> mysqldump -u root personnel
以单破折号(-
)或双破折号(--
)开头的参数用于指定程序选项。选项通常指示程序应与服务器建立的连接类型或影响其操作模式。选项语法在 6.2.2 节“指定程序选项” 中描述。
无选项参数(无前导短划线的参数)为程序提供额外信息。例如,mysql 程序将第一个无选项参数解释为数据库名称,因此命令 mysql<br /> --user=root test
表示您要使用 test
数据库。
后续描述各个程序的章节会指出程序支持哪些选项,并说明其他非选项参数的含义。
有些选项为多个程序所共有。其中最常用的选项是--host
(或-h
)、--user
(或-u
)以及--password
(或-p
),这些选项用于指定连接参数。它们表示运行MySQL服务器的主机,以及你的MySQL账户的用户名和密码。所有MySQL客户端程序都识别这些选项;使用这些选项可以指定要连接的服务器以及在该服务器上使用的账户。其他连接选项有:--port
(或-P
),用于指定TCP/IP端口号;--socket
(或-S
),用于在Unix上指定Unix套接字文件(或在Windows上指定命名管道名)。有关指定连接选项的更多信息,请参见6.2.4节,“使用命令选项连接MySQL服务器”。
你可能会发现有必要使用MySQL程序安装所在的bin
目录的路径名来调用这些程序。如果每当你尝试从bin
目录以外的任何目录运行MySQL程序时都会收到“找不到程序”的错误,那么很可能就需要这样做。为了更方便地使用MySQL,你可以将bin
目录的路径名添加到PATH
环境变量设置中。这样你就可以只通过输入程序名称来运行程序,而无需输入完整的路径名。例如,如果mysql安装在/usr/local/mysql/bin
,你可以通过输入mysql来运行该程序,而无需输入/usr/local/mysql/bin/mysql。
有关设置 PATH
变量的说明,请查阅命令解释器的文档。设置环境变量的语法因解释器而异。(6.2.9 节“设置环境变量” 给出了一些信息。)修改 PATH
设置后,在 Windows 上打开新的控制台窗口,或者在 Unix 上重新登录,以使设置生效。
6.2.2 指定程序选项
- 6.2.2.1 在命令行中使用选项
- 6.2.2.2 使用选项文件
- 6.2.2.3 影响选项文件处理的命令行选项
- 6.2.2.4 程序选项修饰符
- 6.2.2.5 使用选项设置程序变量
- 6.2.2.6 选项默认值、需要值的选项以及等号
指定MySQL程序选项的方法有几种:
- 在程序名之后的命令行中列出选项。这对于应用于程序特定调用的选项来说很常见。
- 列出程序启动时读取的选项文件中的选项。对于希望程序每次运行时都使用的选项,这是常见做法。
- 列出环境变量中的选项(请参阅6.2.9节“设置环境变量”)。这种方法对于希望每次程序运行时都应用的选项很有用。实际上,为此目的更常用的是选项文件,但7.8.3节“在Unix上运行多个MySQL实例”讨论了一种环境变量非常有用的情形。它描述了一种便捷的技巧,使用这些变量为服务器和客户端程序指定TCP/IP端口号和Unix套接字文件。
选项按顺序处理,因此如果一个选项被多次指定,最后一次出现的选项优先。以下命令使 mysql 连接到在 localhost
上运行的服务器:
mysql -h example.com -h localhost
有一个例外:对于 mysqld,出于安全考虑,会使用 --user
选项的 第一个 实例,以防止在选项文件中指定的用户被命令行上的设置覆盖。
如果给出了相互冲突或相关的选项,则后面的选项优先于前面的选项。以下命令以“无列名”模式运行mysql:
mysql --column-names --skip-column-names
MySQL程序通过以下顺序来确定首先应用哪些选项:首先检查环境变量,然后处理选项文件,最后检查命令行。由于后出现的选项优先于先出现的选项,这种处理顺序意味着环境变量的优先级最低,而命令行选项的优先级最高。
对于服务器,有一种例外情况:数据目录中的mysqld-auto.cnf选项文件最后处理,因此它甚至优先于命令行选项。
你可以利用MySQL程序处理选项的方式,在选项文件中为程序指定默认选项值。这样,你无需每次运行程序时都输入这些值,同时在必要时还能使用命令行选项覆盖默认值。
6.2.2.1 在命令行中使用选项
在命令行中指定的程序选项遵循以下规则:
-
选项紧跟在命令名之后。
-
选项参数以一个或两个破折号开头,具体取决于它是选项名称的缩写形式还是完整形式。许多选项都有缩写和完整两种形式。例如,
-?
和--help
分别是指示MySQL程序显示其帮助信息的选项的缩写和完整形式。 -
选项名称区分大小写。
-v
和-V
都是合法的,但含义不同。(它们分别是--verbose
和--version
选项对应的简写形式。) -
有些选项在选项名称后需要一个值。例如,
-h localhost
或--host=localhost
向客户端程序指示 MySQL 服务器主机。选项值会告知程序运行 MySQL 服务器的主机名称。 -
对于需要取值的长选项,使用
=
符号分隔选项名和值。对于需要取值的短选项,选项值可以紧跟在选项字母之后,也可以有一个空格:-hlocalhost
和-h<br /> localhost
是等效的。此规则的一个例外是用于指定 MySQL 密码的选项。该选项可以长格式指定为--password=pass_val
或--password
。在后一种情况下(未给出密码值),程序会交互式提示您输入密码。密码选项也可以短格式指定为-ppass_val
或-p
。但是,对于短格式,如果给出密码值,则它必须紧跟在选项字母之后,中间不能有空格:如果选项字母后面有空格,程序将无法判断后面的参数是密码值还是其他类型的参数。因此,以下两条命令具有完全不同的含义:mysql -ptest mysql -p test
第一条命令指示mysql使用密码值
test
,但未指定默认数据库。第二条命令指示mysql提示输入密码值,并使用test
作为默认数据库。 -
在选项名称中,破折号(
-
)和下划线(_
)在大多数情况下可以互换使用,但前导破折号不能用下划线代替。例如,--skip-grant-tables
和--skip_grant_tables
是等效的。在本手册中,除了下划线具有特殊意义的情况外,我们在选项名称中使用连字符。例如,
[
--log-bin](https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#option_mysqld_log-bin)
和[
--log_bin](https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_log_bin)
就是这种情况,它们是不同的选项。我们也建议您这样做。 -
MySQL服务器有一些只能在启动时指定的命令选项,以及一组系统变量,其中一些变量可以在启动时、运行时设置,或者在这两个时候都能设置。系统变量名使用下划线而不是连字符,并且在运行时引用(例如,使用
SET
或SELECT
语句)时,必须使用下划线书写:SET GLOBAL general_log = ON; SELECT @@GLOBAL.general_log;
在服务器启动时,系统变量的语法与命令选项的语法相同,因此在变量名中,连字符(-)和下划线(_)可以互换使用。例如,
--general_log=ON
与--general-log=ON
是等效的。(在选项文件中设置系统变量时也是如此。) -
对于接受数值的选项,可以使用后缀
K
、M或G
来表示乘数1024、1024²或1024³。从MySQL 8.0.14开始,后缀也可以是T
、P
和E
,分别表示乘数1024⁴、1024⁵或1024⁶。后缀字母可以是大写或小写。例如,以下命令告诉mysqladmin对服务器执行1024次ping操作,每次ping操作间隔10秒:
mysqladmin --count=1K --sleep=10 ping
-
在将文件名指定为选项值时,避免使用
~
这个 shell 元字符。它的解释方式可能与您预期的不同。
在命令行中给出包含空格的选项值时,必须加上引号。例如,--execute
(或 -e
)选项可与 mysql 一起使用,将一条或多条以分号分隔的SQL语句传递给服务器。使用此选项时,mysql 会执行选项值中的语句并退出。语句必须用引号括起来。例如:
$> mysql -u root -p -e "SELECT VERSION();SELECT NOW()"
Enter password: ******
+------------+
| VERSION() |
+------------+
| 8.0.19 |
+------------+
+---------------------+
| NOW() |
+---------------------+
| 2019-09-03 10:36:48 |
+---------------------+
$>
注意
长格式(--execute
)后接一个等号(=
)。
要在语句中使用带引号的值,你必须转义内部引号,或者在语句中使用与用于引用语句本身不同类型的引号。命令处理器的功能决定了你是否可以使用单引号或双引号以及转义引号字符的语法。例如,如果你的命令处理器支持使用单引号或双引号进行引用,你可以在语句周围使用双引号,在语句内的任何带引号的值上使用单引号。
6.2.2.2 使用选项文件
大多数MySQL程序可以从选项文件(有时称为配置文件)中读取启动选项。选项文件提供了一种便捷的方式来指定常用选项,这样在每次运行程序时就无需在命令行中输入这些选项。
要确定一个程序是否读取选项文件,使用--help
选项调用它。(对于mysqld,使用--verbose
和--help
。)如果程序读取选项文件,帮助消息会指出它查找哪些文件以及识别哪些选项组。
[!CAUTION]
注意
使用
--no-defaults
选项启动的MySQL程序,除了.mylogin.cnf
之外,不会读取任何选项文件。
使用禁用了persisted_globals_load
系统变量启动的服务器不会读取mysqld-auto.cnf
。
许多选项文件是纯文本文件,可以使用任何文本编辑器创建。但以下情况除外:
-
.mylogin.cnf
文件包含登录路径选项。这是由mysql_config_editor实用程序创建的加密文件。请参阅6.6.7节,“mysql_config_editor - MySQL配置实用程序”。“登录路径”是一个选项组,只允许某些选项:host
、user
、password
、port
和socket
。客户端程序使用--login-path
选项指定从.mylogin.cnf
读取哪个登录路径。要指定备用登录路径文件名,请设置
MYSQL_TEST_LOGIN_FILE
环境变量。此变量由mysql-test-run.pl测试实用程序使用,但mysql_config_editor以及诸如mysql、mysqladmin等MySQL客户端也识别它。 -
数据目录中的
mysqld-auto.cnf
文件。此 JSON 格式文件包含持久化的系统变量设置。它由服务器在执行SET PERSIST
或SET PERSIST_ONLY
语句时创建。请参阅 7.1.9.3 节,“持久化系统变量”。mysqld-auto.cnf
的管理应由服务器负责,请勿手动执行。
选项文件处理顺序
MySQL会按照以下讨论中描述的顺序查找选项文件,并读取任何存在的文件。如果您想要使用的选项文件不存在,请使用刚才讨论的适当方法创建它。
[!CAUTION]
注意
有关NDB Cluster程序使用的选项文件的信息,请参阅第25.4节,“NDB Cluster的配置”。
在Windows上,MySQL程序按以下表格中所示的顺序读取启动选项,这些文件按指定顺序列出(先列出的文件先读取,后读取的文件优先级更高)。
表6.1 Windows系统上读取的选项文件
文件名 | 目的 |
---|---|
%WINDIR%\my.ini ,%WINDIR%\my.cnf |
全局选项 |
C:\my.ini ,C:\my.cnf |
全局选项 |
BASEDIR\my.ini ,BASEDIR\my.cnf |
全局选项 |
defaults-extra-file |
使用--defaults-extra-file 指定的文件(如果有) |
%APPDATA%\MySQL\.mylogin.cnf |
登录路径选项(仅适用于客户端) |
* DATADIR*\mysqld-auto.cnf |
使用SET PERSIST 或SET PERSIST_ONLY (仅限服务器)持久化的系统变量 |
在上表中,%WINDIR%
表示 Windows 目录的位置。该位置通常为C:\WINDOWS
。使用以下命令,根据WINDIR
环境变量的值确定其确切位置:
C:\> echo %WINDIR%
%APPDATA%
表示 Windows 应用程序数据目录的值。使用以下命令根据 APPDATA
环境变量的值确定其确切位置:
C:\> echo %APPDATA%
BASEDIR
表示 MySQL 的基础安装目录。当使用 MySQL Installer 安装 MySQL 8.0 时,通常是 C:\PROGRAMDIR\MySQL\MySQL<br /> Server 8.0
,其中 PROGRAMDIR
表示程序目录(对于英文版本的 Windows,通常是 Program Files
)。请参阅 2.3.3 节,“适用于 Windows 的 MySQL Installer”。
[!IMPORTANT]
重要的
虽然MySQL安装程序将大多数文件放在
PROGRAMDIR
下,但默认情况下,它会将my.ini
安装在C:\ProgramData\MySQL\MySQL Server<br /> 8.0\
目录下。
DATADIR
表示 MySQL 数据目录。用于查找mysqld-auto.cnf
,其默认值是编译 MySQL 时内置的数据目录位置,但可以通过在处理 mysqld-auto.cnf
之前作为选项文件或命令行选项指定的 --datadir
进行更改。
在Unix和类Unix系统上,MySQL程序按以下表格中所示的顺序从文件中读取启动选项(先列出的文件先读取,后读取的文件优先)。
[!CAUTION]
注意
在Unix平台上,MySQL会忽略所有人都可写的配置文件。这是出于安全考虑而有意为之。
表6.2 在Unix和类Unix系统上读取的选项文件
文件名 | 用途 |
---|---|
/etc/my.cnf |
全局选项 |
/etc/mysql/my.cnf |
全局选项 |
* SYSCONFDIR*/my.cnf |
全局选项 |
$MYSQL_HOME/my.cnf |
服务器特定选项(仅服务器) |
defaults-extra-file |
使用--defaults-extra-file 指定的文件(如果有的话) |
~/.my.cnf |
用户特定选项 |
~/.mylogin.cnf |
用户特定的登录路径选项(仅客户端) |
* DATADIR*/mysqld-auto.cnf |
使用SET PERSIST 或SET PERSIST_ONLY (仅限服务器)持久化的系统变量 |
在上表中,~
表示当前用户的主目录($HOME
的值)。
SYSCONFDIR
表示在构建 MySQL 时使用 SYSCONFDIR
选项指定给 CMake 的目录。默认情况下,这是编译时安装目录下的 etc
目录。
MYSQL_HOME
是一个环境变量,其中包含特定于服务器的 my.cnf
文件所在目录的路径。如果 MYSQL_HOME
未设置,并且您使用 mysqld_safe 程序启动服务器,mysqld_safe 会将其设置为 BASEDIR
,即 MySQL 的基本安装目录。
DATADIR
表示 MySQL 数据目录。用于查找mysqld-auto.cnf
,其默认值是编译 MySQL 时内置的数据目录位置,但可以通过在处理 mysqld-auto.cnf
之前作为选项文件或命令行选项指定的 --datadir
进行更改。
如果找到给定选项的多个实例,则最后一个实例优先,但有一个例外:对于mysqld,出于安全考虑,使用 --user
选项的 第一个 实例,以防止在选项文件中指定的用户被命令行覆盖。
选项文件语法
以下关于选项文件语法的描述适用于手动编辑的文件。这不包括.mylogin.cnf
(该文件是使用mysql_config_editor创建并加密的)和mysqld-auto.cnf
(该文件由服务器以JSON格式创建)。
在运行MySQL程序时,任何可以在命令行中给出的长选项,同样也可以在选项文件中给出。要获取某个程序可用选项的列表,可使用 --help
选项运行该程序。(对于 mysqld,请使用 --verbose
和 --help
。)
在选项文件中指定选项的语法与命令行语法类似(请参阅6.2.2.1节“在命令行中使用选项”)。但是,在选项文件中,选项名称前省略前导的两个连字符,并且每行只指定一个选项。例如,命令行中的--quick
和--host=localhost
在选项文件中应分别写成quick
和host=localhost
,各占一行。要在选项文件中指定形如--loose-opt_name
的选项,应写成loose-opt_name
。
选项文件中的空行将被忽略。非空行可以采用以下任何一种形式:
-
#comment
,;comment
注释行以
#
或;
开头。#
注释也可以在一行的中间开始。 -
[
group]
group
是指你想要为其设置选项的程序或组的名称。在一个组行之后,任何设置选项的行都将应用于指定的组,直到选项文件结束或给出另一个组行。选项组名称不区分大小写。 -
opt_name
这等效于命令行中的
--opt_name
。 -
``opt_name
=*
value*
这相当于在命令行中使用
--opt_name=value
。在选项文件中,=
字符周围可以有空格,而在命令行中则不行。值可以选择性地用单引号或双引号括起来,如果值中包含#
注释字符,这会很有用。
选项名称和值的前导空格和尾随空格会自动删除。
你可以在选项值中使用转义序列 \b
、\t
、 \n
、\r
、 \\
和 \s
来表示退格、制表符、换行符、回车符、反斜杠和空格字符。在选项文件中,这些转义规则适用:
- 反斜杠后跟一个有效的转义序列字符将转换为该序列表示的字符。例如,
\s
会转换为一个空格。 - 没有跟在有效转义序列字符后的反斜杠保持不变。例如,
\S
原样保留。
上述规则意味着,字面值反斜杠可以表示为 \\
,如果其后没有紧跟有效的转义序列字符,也可以表示为 \
。
选项文件中转义序列的规则与SQL语句中字符串字面值的转义序列规则略有不同。在后一种情况下,如果“x
”不是有效的转义序列字符,\x
将变为“x
”,而不是\x
。请参阅第 11.1.1 节,“字符串字面值”。
选项文件值的转义规则对于Windows路径名尤为相关,Windows路径名使用 \
作为路径名分隔符。如果Windows路径名中的分隔符后面跟着转义序列字符,则必须写成 \\
。如果后面没有转义序列字符,则可以写成 \\
或 \
。另外,在Windows路径名中也可以使用 /
,它会被当作 \
处理。假设要在选项文件中指定 C:\Program Files\MySQL\MySQL Server<br /> 8.0
作为基本目录,有几种方法可以做到。例如:
basedir="C:\Program Files\MySQL\MySQL Server 8.0"
basedir="C:\\Program Files\\MySQL\\MySQL Server 8.0"
basedir="C:/Program Files/MySQL/MySQL Server 8.0"
basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s8.0
如果一个选项组的名称与程序名相同,该组中的选项将专门应用于该程序。例如,[mysqld]
和[mysql]
组分别应用于mysqld服务器和mysql客户端程序。
[client]
选项组会被MySQL发行版中提供的所有客户端程序读取(但不会被mysqld读取)。要了解使用C API的第三方客户端程序如何使用选项文件,请参阅mysql_options()处的C API文档。
[client]
组使您能够指定应用于所有客户端的选项。例如,[client]
是用于指定连接到服务器的密码的合适组。(但要确保选项文件仅供您自己访问,这样其他人就无法发现您的密码。)除非您使用的所有客户端程序都能识别该选项,否则一定不要将其放在[client]
组中。如果您尝试运行不理解该选项的程序,它们会在显示错误消息后退出。
先列出更通用的选项组,后列出更具体的选项组。例如,[client]
组更为通用,因为所有客户端程序都会读取它,而 [mysqldump]
组仅由 mysqldump 读取。后面指定的选项会覆盖前面指定的选项,因此按 [client]
、[mysqldump]
的顺序排列选项组,可使 mysqldump 特定的选项覆盖 [client]
选项。
以下是一个典型的全局选项文件:
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=128M
[mysqldump]
quick
这是一个典型的用户选项文件:
[client]
# The following password is sent to all standard MySQL clients
password="my password"
[mysql]
no-auto-rehash
connect_timeout=2
要创建仅由特定MySQL发行系列的mysqld服务器读取的选项组,请使用名称为[mysqld-5.7]
、[mysqld-8.0]
等的组。以下组表示sql_mode
设置应仅由版本号为8.0.x的MySQL服务器使用:
[mysqld-8.0]
sql_mode=TRADITIONAL
选项文件包含
可以在选项文件中使用 !include
指令来包含其他选项文件,并使用 !includedir
在特定目录中搜索选项文件。例如,要包含 /home/mydir/myopt.cnf
文件,请使用以下指令:
!include /home/mydir/myopt.cnf
要搜索 /home/mydir
目录并读取在那里找到的选项文件,请使用此指令:
!includedir /home/mydir
MySQL不保证按何种顺序读取目录中的选项文件。
[!CAUTION]
注意
在Unix操作系统上,任何要使用
!includedir
指令查找并包含的文件,其文件名必须以.cnf
结尾。在Windows上,该指令会查找扩展名为.ini
或.cnf
的文件。
像编写其他任何选项文件一样编写包含的选项文件的内容。也就是说,它应该包含几组选项,每组选项之前都有一个[group]
行,该行指明这些选项所适用的程序。
在处理包含的文件时,仅使用当前程序正在查找的组中的那些选项。其他组将被忽略。假设 my.cnf
文件包含以下行:
!include /home/mydir/myopt.cnf
假设 /home/mydir/myopt.cnf
内容如下:
[mysqladmin]
force
[mysqld]
key_buffer_size=16M
如果my.cnf
由mysqld处理,则仅使用/home/mydir/myopt.cnf
中的[mysqld]
组。如果该文件由mysqladmin处理,则仅使用[mysqladmin]
组。如果该文件由任何其他程序处理,则不会使用/home/mydir/myopt.cnf
中的任何选项。
!includedir
指令的处理方式类似,只是会读取指定目录中的所有选项文件。
如果一个选项文件包含 !include
或 !includedir
指令,那么无论这些指令在文件中的什么位置,只要处理该选项文件,由这些指令指定的文件就会被处理。
为使包含指令生效,文件路径不应放在引号内,且不应包含转义序列。例如,在 my.ini
中提供的以下语句会读取选项文件 myopts.ini
:
!include C:/ProgramData/MySQL/MySQL Server/myopts.ini
!include C:\ProgramData\MySQL\MySQL Server\myopts.ini
!include C:\\ProgramData\\MySQL\\MySQL Server\\myopts.ini
在Windows系统上,如果!include<br /> /path/to/extra.ini
是文件中的最后一行,请确保在该行末尾添加一个换行符;否则,该行将被忽略。
6.2.2.3 影响选项文件处理的命令行选项
大多数支持选项文件的MySQL程序都会处理以下选项。由于这些选项会影响选项文件的处理,因此必须在命令行中给出,而不能在选项文件中给出。为了正常工作,这些选项中的每一个都必须在其他选项之前给出,但以下情况除外:
--print-defaults
可在--defaults-file
、--defaults-extra-file
或--login-path
之后立即使用。- 在Windows上,如果使用
--defaults-file
和--install
选项启动服务器,则--install
必须放在首位。请参阅2.3.4.8节,“作为Windows服务启动MySQL”。
在将文件名指定为选项值时,避免使用 ~
这个 shell 元字符,因为其解释方式可能与您预期的不同。
表6.3 选项文件选项摘要
选项名称 | 描述 |
---|---|
--defaults-extra-file | 除了常规选项文件之外,还读取指定名称的选项文件 |
--defaults-file | 仅读取指定名称的选项文件 |
--defaults-group-suffix | 选项组后缀值 |
--login-path | 从.mylogin.cnf读取登录路径选项 |
--no-defaults | 不读取选项文件 |
-
--defaults-extra-file=*
file_name*
命令行格式 --defaults-extra-file=filename
类型 文件名 默认值 [none]
在全局选项文件之后读取此选项文件,但(在Unix系统上)要在用户选项文件之前读取,并且(在所有平台上)要在登录路径文件之前读取。(有关使用选项文件的顺序的信息,请参见第6.2.2.2节“使用选项文件”。)如果该文件不存在或以其他方式无法访问,则会发生错误。如果
file_name
不是绝对路径名,则将相对于当前目录进行解释。有关此选项可指定位置的限制,请参阅本节的介绍。
-
命令行格式 --defaults-file=filename
类型 文件名 默认值 [none]
仅读取给定的选项文件。如果文件不存在或以其他方式无法访问,则会出现错误。
file_name
如果作为相对路径名而不是完整路径名给出,则相对于当前目录进行解释。例外情况:即使使用
--defaults-file
,mysqld 也会读取mysqld-auto.cnf
,并且客户端程序会读取.mylogin.cnf
。有关此选项可指定位置的限制,请参阅本节的介绍。
-
命令行格式 --defaults-group-suffix=string
类型 字符串 默认值 [none]
不仅读取常规的选项组,还读取具有常规名称且后缀为
str
的组。例如,mysql 客户端通常会读取[client]
和[mysql]
组。如果此选项设置为--defaults-group-suffix=_other
,mysql 还会读取[client_other]
和[mysql_other]
组。 -
命令行格式 --login-path=name
类型 字符串 默认值 [none]
从
.mylogin.cnf
登录路径文件中指定的登录路径读取选项。“登录路径”是一个选项组,其中包含指定要连接到哪个MySQL服务器以及以哪个账户进行身份验证的选项。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参阅6.6.7节,“mysql_config_editor - MySQL配置实用程序”。客户端程序除了读取默认读取的选项组之外,还会读取与指定登录路径对应的选项组。考虑以下命令:
mysql --login-path=mypath
默认情况下,mysql 客户端会读取
[client]
和[mysql]
选项组。因此,对于所示的命令,mysql 会从其他选项文件中读取[client]
和[mysql]
,并从登录路径文件中读取[client]
、[mysql]
以及[mypath]
。即使使用了 --no-defaults 选项,客户端程序也会读取登录路径文件。
要指定备用登录路径文件名,请设置
MYSQL_TEST_LOGIN_FILE
环境变量。有关此选项可指定位置的限制,请参阅本节的引言。
-
命令行格式 --no-defaults
类型 布尔值 默认值 false
不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,可以使用
--no-defaults
来阻止读取这些选项。例外情况是,客户端程序会读取
.mylogin.cnf
登录路径文件(如果该文件存在),即使使用了--no-defaults
选项。这使得即使存在--no-defaults
选项,也能以比在命令行上更安全的方式指定密码。要创建.mylogin.cnf
,请使用mysql_config_editor实用程序。请参阅6.6.7节,“mysql_config_editor — MySQL配置实用程序”。 -
命令行格式 --print-defaults
类型 布尔值 默认值 false
打印程序名称以及它从选项文件中获取的所有选项。密码值会被屏蔽。
有关此选项可指定位置的限制,请参阅本节的引言。
6.2.2.4 程序选项修饰符
有些选项是“布尔型”的,用于控制可开启或关闭的行为。例如,mysql 客户端支持一个--column-names
选项,该选项决定是否在查询结果开头显示一列列名。默认情况下,此选项是启用的。但是,在某些情况下你可能希望禁用它,比如将 mysql 的输出发送到另一个只期望看到数据而不希望看到初始标题行的程序时。
要禁用列名,可以使用以下任何一种形式指定该选项:
--disable-column-names
--skip-column-names
--column-names=0
“--disable”和“--skip”前缀以及“=0”后缀都具有相同的效果:它们会关闭该选项。
该选项的“启用”形式可以通过以下任何一种方式指定:
--column-names
--enable-column-names
--column-names=1
对于布尔选项,同样也识别值 ON
、TRUE
、OFF
和 FALSE
(不区分大小写)。
如果一个选项前缀为--loose
,则程序在无法识别该选项时不会以错误状态退出,而是仅发出警告:
$> mysql --loose-no-such-option
mysql: WARNING: unknown option '--loose-no-such-option'
当你在同一台机器上从多个MySQL安装运行程序并在选项文件中列出选项时,--loose
前缀可能会很有用。对于并非所有程序版本都能识别的选项,可以使用--loose
前缀(或在选项文件中使用loose
)来给出。能够识别该选项的程序版本会正常处理它,而无法识别该选项的版本会发出警告并忽略它。
--maximum
前缀仅适用于mysqld,并允许对客户端程序可设置的会话系统变量的大小进行限制。要做到这一点,在变量名前使用 --maximum
前缀。例如,--maximum-max_heap_table_size=32M
可防止任何客户端将堆表大小限制设置得大于 32M。
--maximum
前缀旨在与具有会话值的系统变量一起使用。如果应用于仅具有全局值的系统变量,则会发生错误。例如,使用--maximum-back_log=200
时,服务器会产生此错误:
Maximum value of 'back_log' cannot be set
6.2.2.5 使用选项设置程序变量
许多MySQL程序都有内部变量,可以在运行时使用SET
语句进行设置。请参见第15.7.6.1节,“变量赋值的SET语法”,以及第7.1.9节,“使用系统变量”。
这些程序变量中的大多数也可以在服务器启动时使用与指定程序选项相同的语法进行设置。例如,mysql 有一个max_allowed_packet
变量,用于控制其通信缓冲区的最大大小。要将mysql 的max_allowed_packet
变量设置为 16MB,可以使用以下任一命令:
mysql --max_allowed_packet=16777216
mysql --max_allowed_packet=16M
第一个命令以字节为单位指定值。第二个命令以兆字节为单位指定值。对于采用数值的变量,该值可以带有后缀 K
、M
或 G
,以表示乘数为 1024、1024² 或 1024³。(例如,用于设置 max_allowed_packet
时,这些后缀表示千字节、兆字节或千兆字节单位。)从 MySQL 8.0.14 开始,后缀还可以是 T
、P
和 E
,以表示乘数为 1024⁴、1024⁵ 或 1024⁶。后缀字母可以是大写或小写。
在选项文件中,变量设置无需加前导短横线:
[mysql]
max_allowed_packet=16777216
或者:
[mysql]
max_allowed_packet=16M
如果你愿意,选项名称中的下划线可以指定为连字符。以下选项组是等效的。两者都将服务器的键缓冲区大小设置为512MB:
[mysqld]
key_buffer_size=512M
[mysqld]
key-buffer-size=512M
在程序调用时设置变量,可以使用指定值乘数的后缀,但在运行时使用 [
SET](https://dev.mysql.com/doc/refman/8.0/en/set-variable.html)
设置值时不能使用。另一方面,使用 [
SET](https://dev.mysql.com/doc/refman/8.0/en/set-variable.html)
时,可以使用表达式为变量赋值,而在服务器启动时设置变量则无法这样做。例如,以下第一行在程序调用时是合法的,但第二行不合法:
$> mysql --max_allowed_packet=16M
$> mysql --max_allowed_packet=16*1024*1024
相反,以下第二行代码在运行时是合法的,但第一行不是:
mysql> SET GLOBAL max_allowed_packet=16M;
mysql> SET GLOBAL max_allowed_packet=16*1024*1024;
6.2.2.6 选项默认值、需要值的选项以及等号
按照惯例,赋值的长选项形式要使用等号(=
)书写,如下所示:
mysql --host=tonfisk --user=jon
对于需要一个值的选项(即没有默认值的选项),等号不是必需的,因此以下也是有效的:
mysql --host tonfisk --user jon
在这两种情况下,mysql 客户端都尝试使用用户名为 “jon” 的账户连接到在名为 “tonfisk” 的主机上运行的 MySQL 服务器。
由于这种行为,当为需要值的选项提供空值时,偶尔会出现问题。考虑以下示例,其中用户以用户jon
的身份连接到在主机tonfisk
上运行的MySQL服务器:
$> mysql --host 85.224.35.45 --user jon
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 8.0.42 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| jon@% |
+----------------+
1 row in set (0.00 sec)
省略这些选项中某一个的必需值会产生错误,如下所示:
$> mysql --host 85.224.35.45 --user
mysql: option '--user' requires an argument
在这种情况下,mysql 无法在 --user
选项后找到一个值,因为在命令行中该选项之后没有跟任何内容。但是,如果你省略了并非最后一个要使用的选项的值,就会得到一个你可能意想不到的不同错误:
$> mysql --host --user jon
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)
因为 mysql 假定命令行中跟在 --host
之后的任何字符串都是主机名,所以 --host
--user
会被解释为 --host=--user
,并且客户端会尝试连接在名为“--user”的主机上运行的 MySQL 服务器。
具有默认值的选项在赋值时始终需要一个等号;不这样做会导致错误。例如,MySQL服务器的--log-error
选项具有默认值host_name.err
,其中 host_name
是运行MySQL的主机名。假设你在主机名为“tonfisk”的计算机上运行MySQL,并考虑以下对mysqld_safe 的调用:
$> mysqld_safe &
[1] 11699
$> 080112 12:53:40 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
$>
关闭服务器后,按以下步骤重新启动它:
$> mysqld_safe --log-error &
[1] 11699
$> 080112 12:53:40 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
$>
结果是一样的,因为--log-error
在命令行中后面没有跟其他任何内容,并且它会提供自己的默认值。(&
字符告诉操作系统在后台运行MySQL;MySQL本身会忽略它。)现在假设你希望将错误记录到一个名为my-errors.err
的文件中。你可能会尝试使用--log-error my-errors
启动服务器,但这并不会产生预期的效果,如下所示:
$> mysqld_safe --log-error my-errors &
[1] 31357
$> 080111 22:53:31 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080111 22:53:32 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
080111 22:53:34 mysqld_safe mysqld from pid file /usr/local/mysql/var/tonfisk.pid ended
[1]+ Done ./mysqld_safe --log-error my-errors
服务器尝试开始使用/usr/local/mysql/var/tonfisk.err
作为错误日志,但随后关闭。查看此文件的最后几行可得知原因:
$> tail /usr/local/mysql/var/tonfisk.err
2013-09-24T15:36:22.278034Z 0 [ERROR] Too many arguments (first extra is 'my-errors').
2013-09-24T15:36:22.278059Z 0 [Note] Use --verbose --help to get a list of available options!
2013-09-24T15:36:22.278076Z 0 [ERROR] Aborting
2013-09-24T15:36:22.279704Z 0 [Note] InnoDB: Starting shutdown...
2013-09-24T15:36:23.777471Z 0 [Note] InnoDB: Shutdown completed; log sequence number 2319086
2013-09-24T15:36:23.780134Z 0 [Note] mysqld: Shutdown complete
因为--log-error
选项提供了一个默认值,所以必须使用等号为其指定不同的值,如下所示:
$> mysqld_safe --log-error=my-errors &
[1] 31437
$> 080111 22:54:15 mysqld_safe Logging to '/usr/local/mysql/var/my-errors.err'.
080111 22:54:15 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
$>
现在服务器已成功启动,正在将错误日志记录到文件/usr/local/mysql/var/my-errors.err
中。
在选项文件中指定选项值时,也可能出现类似问题。例如,假设有一个 my.cnf
文件,其内容如下:
[mysql]
host
user
当 mysql 客户端读取此文件时,这些条目会被解析为 --host
--user
或 --host=--user
,结果如下所示:
$> mysql
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)
然而,在选项文件中,不会假定存在等号。假设 my.cnf
文件如下所示:
[mysql]
user jon
在这种情况下,尝试启动mysql会导致另一种错误:
$> mysql
mysql: unknown option '--user jon'
如果在选项文件中写成 host<br /> tonfisk
而不是 host=tonfisk
,也会出现类似的错误。相反,你必须使用等号:
[mysql]
user=jon
现在登录尝试成功:
$> mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 8.0.42 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> SELECT USER();
+---------------+
| USER() |
+---------------+
| jon@localhost |
+---------------+
1 row in set (0.00 sec)
这与命令行的行为不同,在命令行中不需要等号:
$> mysql --user jon --host tonfisk
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 8.0.42 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> SELECT USER();
+---------------+
| USER() |
+---------------+
| jon@tonfisk |
+---------------+
1 row in set (0.00 sec)
在选项文件中指定一个需要值的选项但未提供值,会导致服务器因错误而终止。
6.2.3 连接到服务器的命令选项
本节介绍大多数 MySQL 客户端程序支持的选项,这些选项用于控制客户端程序如何建立与服务器的连接、连接是否加密以及连接是否压缩。这些选项可以在命令行或选项文件中给出。
建立连接的命令选项
本节介绍了用于控制客户端程序如何建立与服务器连接的选项。有关如何使用这些选项的更多信息和示例,请参阅6.2.4节,“使用命令选项连接到MySQL服务器”。
表6.4 连接建立选项汇总
选项名称 | 描述 | 引入版本 |
---|---|---|
--default-auth | 要使用的身份验证插件 | |
--host | MySQL服务器所在的主机 | |
--password | 连接服务器时使用的密码 | |
--password1 | 连接服务器时要使用的首个多因素身份验证密码 | |
--password2 | 连接服务器时使用的第二个多因素身份验证密码 | |
--password3 | 连接服务器时使用的第三个多因素身份验证密码 | |
--pipe | 使用命名管道连接到服务器(仅适用于 Windows) | |
plugin-dir | 插件安装目录 | |
--port | 连接所用的TCP/IP端口号 | |
--protocol | 要使用的传输协议 | |
--shared-memory-base-name | 共享内存连接的共享内存名称(仅适用于Windows) | |
--socket | 要使用的Unix套接字文件或Windows命名管道 | |
--user | 连接到服务器时使用的MySQL用户名 |
-
命令行格式 --default-auth=plugin
类型 字符串 关于使用哪个客户端身份验证插件的提示。请参阅 8.2.17节,“可插拔身份验证”。
-
--host=host_name
,-h host_name
命令行格式 --host=host_name
类型 字符串 默认值 localhost
运行MySQL服务器的主机。该值可以是主机名、IPv4地址或IPv6地址。默认值为
localhost
。 -
--password[=pass_val\]
,-p[pass_val]
命令行格式 --password[=password]
类型 字符串 默认值 [none]
用于连接服务器的MySQL账户的密码。密码值是可选的。如果未提供,客户端程序将提示输入密码。如果提供了密码,则在“--password=”或“-p”与后面跟随的密码之间不得有空格。如果未指定密码选项,默认情况下不发送密码。
在命令行中指定密码应被视为不安全的做法。为避免在命令行中提供密码,请使用选项文件。请参阅 8.1.2.1节,“密码安全的最终用户指南”。
要明确指定没有密码,并且客户端程序不应提示输入密码,请使用
--skip-password
选项。 -
命令行格式 --password1[=password]
引入版本 类型 字符串 用于连接服务器的MySQL账户的多因素身份验证因素1的密码。密码值是可选的。如果未提供,客户端程序将提示输入。如果提供了密码,在“--password1=”与其后的密码之间必须没有空格。如果未指定密码选项,默认不发送密码。
在命令行中指定密码应被视为不安全的做法。为避免在命令行中输入密码,请使用选项文件。请参阅8.1.2.1节,“密码安全的最终用户指南”。
要显式指定没有密码,并且客户端程序不应提示输入密码,请使用
--skip-password1
选项。--password1
与--password
同义,--skip-password1
与--skip-password
也是如此。 -
命令行格式 --password2[=password]
引入版本 类型 字符串 用于连接服务器的MySQL账户的多因素身份验证因子2的密码。此选项的语义与
--password1
的语义类似;详情请参阅该选项的说明。 -
命令行格式 --password3[=password]
引入版本 类型 字符串 用于连接服务器的MySQL账户的多因素身份验证因素3的密码。此选项的语义与
--password1
的语义类似;详情请参阅该选项的说明。 -
--pipe
,-W
(在Windows系统上)通过命名管道连接到服务器。此选项仅在服务器启动时启用了named_pipe系统变量以支持命名管道连接时才适用。此外,进行连接的用户必须是named_pipe_full_access_group系统变量指定的Windows组的成员。 --pipe,-W 在Windows系统上,使用命名管道连接到服务器。此选项仅在服务器启动时启用了named_pipe系统变量以支持命名管道连接时才适用。另外,进行连接的用户必须是named_pipe_full_access_group系统变量指定的Windows组的成员。命令行格式 --pipe
类型 字符串 在Windows上,使用命名管道连接到服务器。此选项仅在服务器启动时启用了 named_pipe 系统变量以支持命名管道连接时才适用。此外,进行连接的用户必须是 named_pipe_full_access_group 系统变量指定的Windows组的成员。
-
命令行格式 --plugin-dir=dir_name
类型 目录名称 用于查找插件的目录。如果使用
--default-auth
选项指定身份验证插件,但客户端程序找不到该插件,请指定此选项。请参阅 8.2.17 节“可插拔身份验证”。 -
--port=port_num
,-P port_num
命令行格式 --port=port_num
类型 数字的 默认值 3306
对于TCP/IP连接,要使用的端口号。默认端口号为3306。
-
--protocol={TCP|socket|PIPE|memory}
命令行格式 --protocol=type
类型 字符串 默认值 [see text]
有效值 TCP``SOCKET``PIPE``MEMORY
此选项显式指定用于连接到服务器的传输协议。当其他连接参数通常导致使用的协议并非您所需的协议时,此选项很有用。例如,在Unix系统上,默认情况下,与
localhost
的连接是通过Unix套接字文件建立的:mysql --host=localhost
若要强制使用 TCP/IP 传输,请指定一个
--protocol
选项:mysql --host=localhost --protocol=TCP
下表显示了允许的
--protocol
选项值,并指明了每个值适用的平台。这些值不区分大小写。--protocol
值使用的传输协议 适用平台 TCP
通过TCP/IP传输到本地或远程服务器 所有 SOCKET
通过 Unix 套接字文件传输到本地服务器 Unix和类Unix系统 PIPE
命名管道传输到本地服务器 Windows系统 MEMORY
到本地服务器的共享内存传输 Windows: 微软视窗操作系统(通常指Windows操作系统) 另请参阅 6.2.7节,“连接传输协议”
-
--shared-memory-base-name=*
name*
命令行格式 --shared-memory-base-name=name
平台特定 Windows:微软视窗操作系统(通常简称为“Windows”,在计算机领域指由微软公司开发的一款操作系统,广泛应用于个人电脑和服务器等设备)。在上述语境中,“Windows”可理解为该操作系统相关的设置、特性或针对此操作系统的说明。 (因要求为最贴切一个词,可直译为“视窗”,但考虑到语境及通用理解,此为更详细解释) 此处如果仅按单个词最贴切翻译为:视窗 在Windows上,使用共享内存连接到本地服务器时要使用的共享内存名称。默认值为
MYSQL
。共享内存名称区分大小写。此选项仅在服务器启动时启用了
shared_memory
系统变量以支持共享内存连接的情况下才适用。 -
--socket=path
,-S path
| 命令行格式 |
--socket={file_name|pipe_name}
|
| :--------- | -------------------------------- |
| 类型 | 字符串 |在Unix系统上,使用命名管道连接到本地服务器时所使用的Unix套接字文件的名称。默认的Unix套接字文件名是
/tmp/mysql.sock
。在Windows上,用于连接本地服务器的命名管道的名称。默认的Windows管道名称是
MySQL
。管道名称不区分大小写。在 Windows 上,只有在启用
named_pipe
系统变量以支持命名管道连接的情况下启动服务器,此选项才会生效。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的 Windows 组的成员。 -
--user=user_name
,-u user_name
命令行格式 --user=user_name
类型 字符串 用于连接服务器的MySQL账户的用户名。默认用户名在Windows上是
ODBC
,在Unix上是您的Unix登录名。
加密连接的命令选项 在Unix系统上
本节介绍客户端程序的选项,这些选项用于指定是否使用到服务器的加密连接、证书和密钥文件的名称,以及与加密连接支持相关的其他参数。有关建议用法示例以及如何检查连接是否已加密,请参阅8.3.1节,“配置MySQL以使用加密连接”。
注意
这些选项仅对使用需加密的传输协议的连接有效;也就是说,仅对TCP/IP和Unix套接字文件连接有效。请参阅6.2.7节 “连接传输协议” 。
有关如何从 MySQLC API 使用加密连接的信息,请参阅 对加密连接的支持。
表6.5 连接加密选项汇总
选项名称 | 描述 | 引入版本 | 已弃用 |
---|---|---|---|
--get-server-public-key | 从服务器请求RSA公钥 | ||
--server-public-key-path | 包含RSA公钥的文件的路径名 | ||
--ssl-ca | 包含受信任SSL证书颁发机构列表的文件 | ||
--ssl-capath | 包含受信任的SSL证书颁发机构证书文件的目录 | ||
--ssl-cert | 包含X.509证书的文件 | ||
--ssl-cipher | 连接加密允许使用的密码 | ||
--ssl-crl | 包含证书吊销列表的文件 | ||
--ssl-crlpath | 包含证书吊销列表文件的目录 | ||
--ssl-fips-mode | 是否在客户端启用FIPS模式 | ||
--ssl-key | 包含X.509密钥的文件 | ||
--ssl-mode | 与服务器连接所需的安全状态 | ||
--ssl-session-data | 包含SSL会话数据的文件 | ||
--ssl-session-data-continue-on-failed-reuse | 如果会话复用失败,是否建立连接 | ||
--tls-ciphersuites | 加密连接允许使用的TLSv1.3密码套件 | ||
--tls-version | 加密连接允许使用的TLS协议 |
-
命令行格式 --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可插拔身份验证”。 -
--server-public-key-path=*
file_name*
命令行格式 --server-public-key-path=file_name
类型 文件名 包含服务器基于RSA密钥对的密码交换所需公钥的客户端副本的PEM格式文件的路径名。此选项适用于使用
sha256_password
或caching_sha2_password
身份验证插件进行身份验证的客户端。对于不使用这些插件之一进行身份验证的账户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。如果指定了
--server-public-key-path=file_name
且该选项指定了一个有效的公钥文件,则它优先于--get-server-public-key
。此选项仅在MySQL使用OpenSSL构建时可用。
有关
sha256_password
和caching_sha2_password
插件的信息,请参阅 8.4.1.3节“SHA-256 可插拔身份验证” 以及 8.4.1.2节“缓存 SHA-2 可插拔身份验证”。 -
命令行格式 --ssl-ca=file_name
类型 文件名 证书颁发机构 (CA) 证书文件的路径名,采用PEM格式。该文件包含受信任的SSL证书颁发机构列表。
要告知客户端在与服务器建立加密连接时不对服务器证书进行身份验证,既不要指定
--ssl-ca
,也不要指定--ssl-capath
。服务器仍会根据为客户端账户设置的任何适用要求来验证客户端,并且仍会使用服务器端指定的任何ssl_ca
或ssl_capath
系统变量值。要为服务器指定CA文件,请设置
ssl_ca
系统变量。 -
命令行格式 --ssl-capath=dir_name
类型 目录名称 包含采用PEM格式的受信任SSL证书颁发机构(CA)证书文件的目录的路径名称。
要告知客户端在与服务器建立加密连接时不要验证服务器证书,既不要指定
--ssl-ca
,也不要指定--ssl-capath
。服务器仍会根据为客户端账户设置的任何适用要求验证客户端,并且仍会使用服务器端指定的任何ssl_ca
或ssl_capath
系统变量值。要为服务器指定CA目录,请设置
ssl_capath
系统变量。 -
命令行格式 --ssl-cert=file_name
类型 文件名 客户端SSL公钥证书文件(采用PEM格式)的路径名。
要指定服务器SSL公钥证书文件,请设置
ssl_cert
系统变量。注意
8.0.30版本增加了链式SSL证书支持;以前只读取第一个证书。
-
命令行格式 --ssl-cipher=name
类型 字符串 使用TLS协议(最高到TLSv1.2)的连接允许使用的加密密码列表。如果列表中没有支持的密码,使用这些TLS协议的加密连接将无法工作。
为了实现最大程度的可移植性,
cipher_list
应该是由一个或多个密码名称组成的列表,各名称之间用冒号分隔。例如:--ssl-cipher=AES128-SHA --ssl-cipher=DHE-RSA-AES128-GCM-SHA256:AES128-SHA
OpenSSL支持在https://www.openssl.org/docs/manmaster/man1/ciphers.html的OpenSSL文档中描述的指定密码的语法。
有关MySQL支持哪些加密密码的信息,请参阅8.3.2节,“加密连接TLS协议和密码”。
要为服务器指定加密密码,请设置
ssl_cipher
系统变量。 -
命令行格式 --ssl-crl=file_name
类型 文件名 包含PEM格式证书吊销列表的文件的路径名。
如果既未指定
--ssl-crl
也未指定--ssl-crlpath
,则不会执行CRL检查,即使CA路径包含证书吊销列表也是如此。要为服务器指定吊销列表文件,请设置
ssl_crl
系统变量。 -
命令行格式 --ssl-crlpath=dir_name
类型 目录名称 包含PEM格式证书吊销列表文件的目录路径名。
如果既未指定
--ssl-crl
也未指定--ssl-crlpath
,则不会执行CRL检查,即使CA路径中包含证书吊销列表也是如此。要为服务器指定吊销列表目录,请设置
ssl_crlpath
系统变量。 -
| 命令行格式 |
--ssl-fips-mode={OFF|ON|STRICT}
|
| :--------- | --------------------------------- |
| 已弃用 | |
| 类型 | 枚举 |
| 默认值 |OFF
|
| 有效值 |OFF``ON``STRICT
|控制是否在客户端启用FIPS模式。
--ssl-fips-mode
选项与其他--ssl-xxx
选项的不同之处在于,它并非用于建立加密连接,而是用于影响允许哪些加密操作。请参阅8.8节“FIPS支持”。这些
--ssl-fips-mode
值是允许的:- “OFF”:禁用FIPS模式。
- 开启:启用FIPS模式。
- STRICT:启用“严格”FIPS模式。
注意
如果OpenSSL FIPS对象模块不可用,则
--ssl-fips-mode
唯一允许的值是OFF
。在这种情况下,将--ssl-fips-mode
设置为ON
或STRICT
会导致客户端在启动时发出警告,并以非FIPS模式运行。要为服务器指定 FIPS 模式,请设置
ssl_fips_mode
系统变量。 -
命令行格式 --ssl-key=file_name
类型 文件名 PEM格式的客户端SSL私钥文件的路径名。为了更高的安全性,请使用RSA密钥长度至少为2048位的证书。
如果密钥文件受密码短语保护,客户端程序会提示用户输入密码短语。必须以交互方式输入密码,不能将其存储在文件中。如果密码短语不正确,程序将继续运行,就好像无法读取密钥一样。
要指定服务器SSL私钥文件,请设置
ssl_key
系统变量。 -
命令行格式 --ssl-mode=mode
类型 枚举 默认值 PREFERRED
有效值 DISABLED``PREFERRED``REQUIRED``VERIFY_CA``VERIFY_IDENTITY
此选项指定与服务器连接所需的安全状态。以下模式值是允许的,按严格程度递增顺序排列:
-
DISABLED
:建立未加密连接。 -
首选:如果服务器支持加密连接,则建立加密连接;如果无法建立加密连接,则回退到未加密连接。如果未指定 --ssl-mode,这是默认设置。
使用
PREFERRED
模式时,通过Unix套接字文件建立的连接不会加密。要对Unix套接字文件连接强制实施加密,请使用REQUIRED
模式或更严格的模式。(不过,套接字文件传输默认是安全的,因此对套接字文件连接进行加密并不会进一步提高安全性,反而会增加CPU负载。) -
REQUIRED
:如果服务器支持加密连接,则建立加密连接。如果无法建立加密连接,则连接尝试失败。 -
VERIFY_CA
:与REQUIRED
类似,但还会根据配置的CA证书验证服务器证书颁发机构(CA)证书。如果未找到有效的匹配CA证书,则连接尝试失败。 -
VERIFY_IDENTITY
:与VERIFY_CA
类似,但还会通过将客户端用于连接服务器的主机名与服务器发送给客户端的证书中的身份信息进行比对,来执行主机名身份验证:- 从MySQL 8.0.12起,如果客户端使用OpenSSL 1.0.2或更高版本,客户端会检查其用于连接的主机名是否与服务器证书中的主题备用名称值或公用名称值匹配。主机名身份验证对使用通配符指定公用名称的证书也有效。
- 否则,客户端会检查其用于连接的主机名是否与服务器证书中的通用名称值匹配。
如果存在不匹配情况,则连接会失败。对于加密连接,此选项有助于防止中间人攻击。
注意
使用
VERIFY_IDENTITY
进行主机名身份验证,不适用于由服务器自动创建或使用mysql_ssl_rsa_setup手动创建的自签名证书(请参阅8.3.3.1节,“使用MySQL创建SSL和RSA证书及密钥”)。此类自签名证书未将服务器名称作为通用名称值包含在内。
重要的
默认设置
--ssl-mode=PREFERRED
,如果其他默认设置保持不变,将生成加密连接。但是,为了帮助防止复杂的中间人攻击,客户端验证服务器身份非常重要。与默认设置相比,--ssl-mode=VERIFY_CA
和--ssl-mode=VERIFY_IDENTITY
设置是防止此类攻击的更好选择。要实施这些设置之一,您必须首先确保服务器的CA证书对环境中使用它的所有客户端都是可靠可用的,否则将导致可用性问题。因此,它们不是默认设置。“--ssl-mode”选项与CA证书选项的交互方式如下:
- 如果未另行显式设置 --ssl-mode,则使用 --ssl-ca 或 --ssl-capath 意味着 --ssl-mode=VERIFY_CA。
- 对于
--ssl-mode
取值为VERIFY_CA
或VERIFY_IDENTITY
的情况,还需要指定--ssl-ca
或--ssl-capath
,以提供与服务器使用的CA证书相匹配的证书。 - 明确设置的
--ssl-mode
选项值若不是VERIFY_CA
或VERIFY_IDENTITY
,同时又明确设置了--ssl-ca
或--ssl-capath
选项,就会产生一条警告,提示尽管指定了 CA 证书选项,但不会对服务器证书执行验证。
要让MySQL账户使用加密连接,可使用
CREATE USER
语句创建账户时添加REQUIRE SSL
子句,或者对现有账户使用ALTER USER
语句添加REQUIRE SSL
子句。这会导致使用该账户的客户端连接尝试被拒绝,除非MySQL支持加密连接且能建立加密连接。REQUIRE
子句允许使用其他与加密相关的选项,这些选项可用于实施比REQUIRE<br /> SSL
更严格的安全要求。有关使用各种REQUIRE
选项配置的账户进行连接的客户端可以或必须指定哪些命令选项的更多详细信息,请参阅 CREATE USER SSL/TLS 选项。 -
-
--ssl-session-data=*
file_name*
命令行格式 --ssl-session-data=file_name
引入版本 类型 文件名 用于会话复用的PEM格式客户端SSL会话数据文件的路径名。
当你使用 --ssl-session-data 选项调用 MySQL 客户端程序时,客户端会尝试从文件(如果提供了文件)反序列化会话数据,然后使用该数据建立新连接。如果你提供了一个文件,但未复用会话,那么连接将失败,除非你在调用客户端程序时还在命令行上指定了 --ssl-session-data-continue-on-failed-reuse 选项。
mysql
命令ssl_session_data_print
用于生成会话数据文件(请参见 6.5.1.2 节“mysql 客户端命令”)。 -
--ssl-session-data-continue-on-failed-reuse:如果SSL会话数据文件提供但会话未被重用时继续连接(失败重用时继续使用SSL会话数据)
命令行格式 --ssl-session-data-continue-on-failed-reuse
引入版本 类型 布尔值 默认值 OFF
控制是否启动一个新连接,以替换尝试重用通过
--ssl-session-data
命令行选项指定的会话数据但失败的连接尝试。默认情况下,--ssl-session-data-continue-on-failed-reuse
命令行选项处于关闭状态,这会导致客户端程序在提供会话数据但未重用时返回连接失败。为确保在会话重用失败时能无声地打开一个新的、不相关的连接,请使用
--ssl-session-data
和--ssl-session-data-continue-on-failed-reuse
这两个命令行选项调用MySQL客户端程序。 -
--tls-ciphersuites=*
ciphersuite_list*
命令行格式 --tls-ciphersuites=ciphersuite_list
引入版本 类型 字符串 默认值 empty string
此选项指定客户端允许哪些密码套件用于使用TLSv1.3的加密连接。该值是一个由零个或多个以冒号分隔的密码套件名称组成的列表。例如:
mysql --tls-ciphersuites="suite1:suite2:suite3"
此选项可指定的密码套件取决于用于编译MySQL的SSL库。如果未设置此选项,客户端将允许使用默认的密码套件集。如果该选项设置为空字符串,则不启用任何密码套件,并且无法建立加密连接。有关更多信息,请参阅8.3.2节,“加密连接TLS协议和密码”。
此选项是在MySQL 8.0.16中添加的。
要指定服务器允许使用哪些密码套件,请设置系统变量
tls_ciphersuites
。 -
命令行格式 --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 --tls-version="TLSv1.2,TLSv1.3"
此选项可指定的协议取决于用于编译MySQL的SSL库以及MySQL服务器版本。
重要的
- 从MySQL 8.0.28开始,MySQL Server不再支持TLSv1和TLSv1.1连接协议。从MySQL 8.0.26起,这些协议已被弃用,不过如果使用已弃用的TLS协议版本,MySQL Server客户端不会向用户返回警告。从MySQL 8.0.28起,包括MySQL Shell在内的支持
--tls-version
选项的客户端,无法使用设置为TLSv1或TLSv1.1的协议建立TLS/SSL连接。如果客户端尝试使用这些协议进行连接,对于TCP连接,连接将失败,并向客户端返回错误。对于套接字连接,如果--ssl-mode
设置为REQUIRED
,连接将失败,否则将建立连接,但TLS/SSL处于禁用状态。有关更多信息,请参阅不再支持TLSv1和TLSv1.1协议。 - 从MySQL 8.0.16开始,MySQL Server支持TLSv1.3协议,前提是MySQL Server是使用OpenSSL 1.1.1或更高版本编译的。服务器在启动时会检查OpenSSL的版本,如果低于1.1.1,则会从与TLS版本相关的服务器系统变量(如
tls_version
系统变量)的默认值中移除TLSv1.3。
应选择许可协议,以免在列表中留下“漏洞”。例如,以下这些值不存在漏洞:
--tls-version="TLSv1,TLSv1.1,TLSv1.2,TLSv1.3" --tls-version="TLSv1.1,TLSv1.2,TLSv1.3" --tls-version="TLSv1.2,TLSv1.3" --tls-version="TLSv1.3" From MySQL 8.0.28, only the last two values are suitable.
这些值确实存在漏洞,不应使用:
--tls-version="TLSv1,TLSv1.2" --tls-version="TLSv1.1,TLSv1.3"
有关详细信息,请参阅8.3.2节“加密连接TLS协议和密码”。
要指定服务器允许的TLS协议,请设置系统变量
tls_version
。 - 从MySQL 8.0.28开始,MySQL Server不再支持TLSv1和TLSv1.1连接协议。从MySQL 8.0.26起,这些协议已被弃用,不过如果使用已弃用的TLS协议版本,MySQL Server客户端不会向用户返回警告。从MySQL 8.0.28起,包括MySQL Shell在内的支持
连接压缩的命令选项
本节介绍了一些选项,这些选项使客户端程序能够控制与服务器连接时压缩功能的使用。有关如何使用这些选项的更多信息和示例,请参阅6.2.8节“连接压缩控制”。
表6.6 连接压缩选项汇总
选项名称 | 描述 | 引入版本 | 已弃用 |
---|---|---|---|
--compress | 压缩客户端与服务器之间发送的所有信息 | ||
--compression-algorithms | 连接到服务器允许使用的压缩算法 | ||
--zstd-compression-level | 使用zstd压缩的服务器连接的压缩级别 |
-
--compress
,-C
如果可能,压缩客户端与服务器之间发送的所有信息。 自 MySQL 8.0.18 起,此选项已弃用。预计在未来版本的 MySQL 中会将其移除。请参阅配置旧版连接压缩。 (注:原文本中“--compress,-C”直接翻译意义不大,结合语境对其后内容进行了翻译,若需仅翻译原文本则为:--compress,-C )| 命令行格式 |
--compress[={OFF|ON}]
|
| :--------- | ----------------------- |
| 已弃用 | |
| 类型 | 布尔值 |
| 默认值 |OFF
|如果可能,压缩客户端与服务器之间发送的所有信息。
从MySQL 8.0.18起,此选项已弃用。预计它将在MySQL的未来版本中移除。请参阅配置旧版连接压缩。
-
--compression-algorithms=*
value*
命令行格式 --compression-algorithms=value
引入版本 类型 设置 默认值 uncompressed
有效值 zlib``zstd``uncompressed
连接到服务器时允许使用的压缩算法。可用算法与系统变量
protocol_compression_algorithms
的算法相同。默认值为uncompressed
。此选项是在MySQL 8.0.18中添加的。
-
--zstd-compression-level=*
level*
命令行格式 --zstd-compression-level=#
引入版本 类型 整数 用于与服务器建立连接时使用
zstd
压缩算法的压缩级别。允许的级别范围是1到22,值越大表示压缩程度越高。默认的zstd
压缩级别为3。此压缩级别设置对不使用zstd
压缩的连接没有影响。此选项是在MySQL 8.0.18中添加的。
6.2.4 使用命令选项连接到MySQL服务器
本节介绍如何使用命令行选项,为诸如mysql或mysqldump等客户端指定连接到 MySQL 服务器的方式。有关使用类似 URI 的连接字符串或键值对为诸如 MySQL Shell 等客户端建立连接的信息,请参阅6.2.5 节,“使用类似 URI 的字符串或键值对连接到服务器”。如果无法连接,有关更多信息,请参阅8.2.22 节,“解决连接到 MySQL 时遇到的问题”。
对于客户端程序要连接到MySQL服务器,它必须使用适当的连接参数,例如运行服务器的主机名以及MySQL账户的用户名和密码。每个连接参数都有一个默认值,但你可以根据需要使用在命令行或选项文件中指定的程序选项来覆盖默认值。
这里的示例使用 mysql 客户端程序,但这些原则同样适用于其他客户端,如 mysqldump、mysqladmin 或 mysqlshow。
此命令在不指定任何显式连接参数的情况下调用 mysql:
mysql
由于没有参数选项,因此采用默认值:
- 默认主机名是
localhost
。在Unix系统上,这有特殊含义,稍后会讲到。 - 默认用户名在Windows上是
ODBC
,在Unix上是您的Unix登录名。 - 由于既未给出
--password
也未给出-p
,因此不会发送密码。 - 对于mysql,第一个非选项参数将被视为默认数据库的名称。由于不存在这样的参数,mysql不会选择默认数据库。
要显式指定主机名、用户名以及密码,请在命令行上提供相应的选项。要选择默认数据库,请添加数据库名参数。示例:
mysql --host=localhost --user=myname --password=password mydb
mysql -h localhost -u myname -ppassword mydb
对于密码选项,密码值是可选的:
- 如果使用
--password
或-p
选项并指定密码值,--password=
或-p
与后面的密码之间不能有 空格。 - 如果使用
--password
或-p
但未指定密码值,客户端程序将提示您输入密码。输入密码时不会显示密码。这比在命令行中给出密码更安全,因为在命令行中给出密码可能会让系统上的其他用户通过执行诸如 ps 之类的命令看到密码行。请参阅 8.1.2.1 节“密码安全的最终用户指南”。 - 要明确指定没有密码,并且客户端程序不应提示输入密码,请使用
--skip-password
选项。
如前所述,在命令行中包含密码值存在安全风险。为避免此风险,请指定--password
或-p
选项,且其后不跟任何密码值:
mysql --host=localhost --user=myname --password mydb
mysql -h localhost -u myname -p mydb
当给出--password
或-p
选项但未提供密码值时,客户端程序会打印一个提示符并等待您输入密码。(在这些示例中,mydb
不会被解释为密码,因为它与前面的密码选项之间有一个空格。)
在某些系统上,MySQL 用于提示输入密码的库例程会自动将密码限制为八个字符。此限制是系统库的特性,而非 MySQL 的特性。在内部,MySQL 对密码长度没有任何限制。要解决受此影响的系统上的限制问题,可以在选项文件中指定密码(请参阅第 6.2.2.2 节“使用选项文件”)。另一种解决方法是将 MySQL 密码更改为八个字符或更少的字符,但这样做的缺点是较短的密码往往安全性较差。
客户端程序按如下方式确定要建立的连接类型:
-
如果未指定主机或主机为
localhost
,则会与本地主机建立连接:-
在Windows系统上,如果服务器在启动时启用了系统变量
shared_memory
以支持共享内存连接,客户端将使用共享内存进行连接。 -
在Unix系统上,MySQL程序对主机名
localhost
的处理方式较为特殊,与您对其他基于网络的程序的预期可能有所不同:客户端使用Unix套接字文件进行连接。可以使用--socket
选项或MYSQL_UNIX_PORT
环境变量来指定套接字名称。
-
-
在 Windows 上,如果
host
为.
(句点),或者未启用 TCP/IP 且未指定--socket
,或者主机为空,则客户端将使用命名管道进行连接,前提是服务器在启动时启用了named_pipe
系统变量以支持命名管道连接。如果不支持命名管道连接,或者进行连接的用户不属于named_pipe_full_access_group
系统变量指定的 Windows 组,则会发生错误。 -
否则,连接将使用TCP/IP。
--protocol
选项可让您使用特定的传输协议,即使其他选项通常会导致使用不同的协议。也就是说,--protocol
明确指定了传输协议,并会覆盖前面的规则,即使是对于localhost
也是如此。
仅使用或检查与所选传输协议相关的连接选项。其他连接选项将被忽略。例如,在Unix系统上使用--host=localhost
时,客户端会尝试使用Unix套接字文件连接到本地服务器,即使指定了--port
或-P
选项来指定TCP/IP端口号。
为确保客户端与本地服务器建立TCP/IP连接,使用 --host
或 -h
来指定主机名值为 127.0.0.1
(而不是 localhost
),或指定本地服务器的IP地址或名称。即使是针对 localhost
,也可以通过使用 --protocol=TCP
选项来显式指定传输协议。示例:
mysql --host=127.0.0.1
mysql --protocol=TCP
如果服务器配置为接受IPv6连接,客户端可以使用--host=::1
通过IPv6连接到本地服务器。请参阅7.1.13节“IPv6支持”。
在Windows上,要强制MySQL客户端使用命名管道连接,请指定 --pipe
或 --protocol=PIPE
选项,或者指定 .
(句点)作为主机名。如果服务器启动时未启用 named_pipe
系统变量以支持命名管道连接,或者进行连接的用户不是 named_pipe_full_access_group
系统变量指定的Windows组的成员,则会发生错误。如果不想使用默认管道名称,可以使用 --socket
选项指定管道名称。
与远程服务器的连接使用TCP/IP。此命令使用默认端口号(3306)连接到在 remote.example.com
上运行的服务器:
mysql --host=remote.example.com
要显式指定端口号,请使用 --port
或 -P
选项:
mysql --host=remote.example.com --port=13306
你也可以为连接到本地服务器指定一个端口号。但是,如前所述,在Unix系统上连接到localhost
默认使用套接字文件,因此,除非按照前面所述强制使用TCP/IP连接,否则任何指定端口号的选项都将被忽略。
对于此命令,程序在Unix上使用套接字文件,并且会忽略--port
选项:
mysql --port=13306 --host=localhost
要使用端口号,请强制建立TCP/IP连接。例如,通过以下任一方式调用程序:
mysql --port=13306 --host=127.0.0.1
mysql --port=13306 --protocol=TCP
有关控制客户端程序如何建立与服务器连接的选项的更多信息,请参阅6.2.3节,“连接到服务器的命令选项”。
每次调用客户端程序时,无需在命令行中输入连接参数,也可以指定这些参数:
-
在选项文件的
[client]
部分指定连接参数。该文件的相关部分可能如下所示:[client] host=host_name user=user_name password=password
有关更多信息,请参阅6.2.2.2节,“使用选项文件”。
-
某些连接参数可以使用环境变量来指定。示例:
- 要指定 mysql 的主机,请使用
MYSQL_HOST
。 - 在Windows系统上,要指定MySQL用户名,请使用
USER
。
有关支持的环境变量列表,请参阅第6.9节“环境变量”。
- 要指定 mysql 的主机,请使用
6.2.5 使用类URI字符串或键值对连接到服务器
本节介绍如何使用类似 URI 的连接字符串或键值对,为诸如 MySQL Shell 之类的客户端指定如何建立与 MySQL 服务器的连接。有关使用命令行选项为诸如 mysql 或 mysqldump 之类的客户端建立连接的信息,请参阅 6.2.4 节,“使用命令选项连接到 MySQL 服务器”。如果无法连接,有关更多信息,请参阅 8.2.22 节,“排查连接到 MySQL 的问题”。
注意
术语“类URI”表示连接字符串语法,该语法与RFC3986定义的URI(统一资源标识符)语法相似但不完全相同。
以下 MySQL 客户端支持使用类 URI 连接字符串或键值对连接到 MySQL 服务器:
- MySQL Shell(可译为“MySQL 外壳程序” )
- 实现X DevAPI的MySQL连接器
本节记录了所有有效的类URI字符串和键值对连接参数,其中许多与通过命令行选项指定的参数类似:
- 使用类似 URI 的字符串指定的参数采用类似
myuser@example.com:3306/main-schema
的语法。有关完整语法,请参阅 使用类似 URI 的连接字符串进行连接。 - 使用键值对指定的参数采用类似
{user:'myuser', host:'example.com', port:3306,<br /> schema:'main-schema'}
这样的语法。有关完整语法,请参阅使用键值对进行连接。
连接参数不区分大小写。每个参数(如果指定)只能出现一次。如果一个参数出现多次,则会出错。
本节涵盖以下主题:
基本连接参数
以下讨论介绍了指定与MySQL的连接时可用的参数。这些参数既可以使用符合类似基本统一资源标识符(URI)语法的字符串来提供(请参阅 使用类似URI的连接字符串进行连接),也可以使用键值对来提供(请参阅 使用键值对进行连接)。
-
scheme
:要使用的传输协议。对于X协议连接,使用mysqlx
;对于经典MySQL协议连接,使用mysql
。如果未指定协议,服务器将尝试猜测协议。支持DNS SRV的连接器可以使用mysqlx+srv
方案(请参阅 使用DNS SRV记录的连接)。 -
用户:用于身份验证过程的MySQL用户账户。
-
password:用于身份验证过程的密码。
警告
在连接规范中指定显式密码不安全,不建议这样做。后续讨论将说明如何实现交互式密码提示。
-
host
:运行服务器实例的主机。该值可以是主机名、IPv4地址或IPv6地址。如果未指定主机,默认值为localhost
。 -
端口**:目标 MySQL 服务器监听连接的 TCP/IP 网络端口。如果未指定端口,X 协议连接的默认端口为 33060,经典 MySQL 协议连接的默认端口为 3306。
-
socket
:Unix套接字文件的路径或Windows命名管道的名称。值为本地文件路径。在类URI字符串中,必须对它们进行编码,可以使用百分比编码,也可以将路径用括号括起来。使用括号就无需对诸如/
目录分隔符这样的字符进行百分比编码。例如,要以root@localhost
的身份通过Unix套接字/tmp/mysql.sock
进行连接,使用百分比编码指定路径为root@localhost?socket=%2Ftmp%2Fmysql.sock
,或者使用括号指定为root@localhost?socket=(/tmp/mysql.sock)
。 -
schema
:连接的默认数据库。如果未指定数据库,则连接没有默认数据库。
在Unix系统上,对localhost
的处理取决于传输协议的类型。使用经典MySQL协议的连接对localhost
的处理方式与其他MySQL客户端相同,这意味着假定localhost
用于基于套接字的连接。对于使用X协议的连接,localhost
的行为有所不同,因为假定它代表回环地址,例如IPv4地址127.0.0.1。
额外的连接参数
你可以为连接指定选项,既可以通过在类似URI的字符串中以属性形式追加?attribute=value
,也可以采用键值对形式。以下是可用的选项:
-
ssl-mode
:连接所需的安全状态。以下模式是允许的:DISABLED
PREFERRED
REQUIRED
VERIFY_CA
VERIFY_IDENTITY
重要的
VERIFY_CA
和VERIFY_IDENTITY
是比默认的PREFERRED
更好的选择,因为它们有助于防止中间人攻击。有关这些模式的信息,请参阅《加密连接的命令选项》中 --ssl-mode 选项说明。
-
ssl-ca:PEM 格式的 X.509 证书颁发机构文件的路径。
-
ssl-capath
:包含PEM格式的X.509证书颁发机构文件的目录路径。 -
ssl-cert
:PEM格式的X.509证书文件的路径。 -
ssl-cipher
:用于采用TLS协议(最高至TLSv1.2)的连接的加密密码。 -
ssl-crl
:包含PEM格式证书吊销列表的文件路径。 -
ssl-crlpath
:包含PEM格式证书吊销列表文件的目录路径。 -
ssl-key
:采用PEM格式的X.509密钥文件路径。 -
tls-version
:经典MySQL协议加密连接允许使用的TLS协议。此选项仅受MySQL Shell支持。tls-version
(单数形式)的值是一个逗号分隔的列表,例如TLSv1.2,TLSv1.3
。有关详细信息,请参阅8.3.2节,“加密连接TLS协议和密码”。此选项依赖于ssl-mode
选项未设置为DISABLED
。 -
tls-versions
:用于加密X协议连接的允许的TLS协议。tls-versions
(复数形式)的值是一个数组,例如[TLSv1.2,TLSv1.3]
。有关详细信息,请参阅第8.3.2节,“加密连接TLS协议和密码”。此选项依赖于ssl-mode
选项未设置为DISABLED
。 -
tls-ciphersuites
:允许使用的TLS密码套件。tls-ciphersuites
的值是IANA密码套件名称列表,可在TLSCiphersuites中查看。有关详细信息,请参阅8.3.2节“加密连接TLS协议和密码”。此选项依赖于ssl-mode
选项未设置为DISABLED
。 -
auth-method
:用于连接的身份验证方法。默认值为AUTO
,这意味着服务器会尝试猜测。以下方法是允许的:AUTO
MYSQL41
SHA256_MEMORY
FROM_CAPABILITIES
FALLBACK
PLAIN
对于X协议连接,任何已配置的
auth-method
都将被此身份验证方法序列覆盖:MYSQL41
、SHA256_MEMORY
、PLAIN
。 -
get-server-public-key
:向服务器请求基于RSA密钥对的密码交换所需的公钥。当通过经典MySQL协议以SSL模式DISABLED
连接到MySQL 8.0服务器时使用。在这种情况下,您必须指定协议。例如:mysql://user@localhost:3306?get-server-public-key=true
此选项适用于使用
caching_sha2_password
身份验证插件进行身份验证的客户端。对于该插件,除非收到请求,否则服务器不会发送公钥。对于不使用该插件进行身份验证的账户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。如果给出了
server-public-key-path=file_name
并指定了一个有效的公钥文件,则它优先于get-server-public-key
。有关
caching_sha2_password
插件的信息,请参阅8.4.1.2节,“缓存式SHA-2可插拔身份验证”。 -
server-public-key-path
:指向一个PEM格式文件的路径名,该文件包含服务器基于RSA密钥对的密码交换所需公钥的客户端副本。在通过经典MySQL协议以SSL模式DISABLED
连接到MySQL 8.0服务器时使用。此选项适用于使用
sha256_password
或caching_sha2_password
身份验证插件进行身份验证的客户端。对于不使用这些插件之一进行身份验证的账户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。如果给定
server-public-key-path=file_name
且其指定了一个有效的公钥文件,则它优先于get-server-public-key
。有关
sha256_password
和caching_sha2_password
插件的信息,请参阅8.4.1.3节,“SHA-256可插拔身份验证”和8.4.1.2节,“缓存SHA-2可插拔身份验证”。 -
ssh
:通过SSH隧道连接到SSH服务器以访问MySQL服务器实例的统一资源标识符 (URI)。URI格式为[user@]host[:port]
。使用uri
选项指定目标MySQL服务器实例的URI。有关从MySQL Shell进行SSH隧道连接的信息,请参阅使用SSH隧道。 -
uri
:要通过 SSH 隧道从ssh
选项指定的服务器访问的 MySQL 服务器实例的 URI。URI 格式为[scheme://][user@]host[:port]
。不要使用基本连接参数(scheme
、user
、host
、port
)来指定用于 SSH 隧道的 MySQL 服务器连接,只需使用uri
选项。 -
ssh - password:连接到SSH服务器的密码。
警告
在连接规范中指定明文密码不安全,不建议这样做。当需要密码时,MySQL Shell 会以交互方式提示输入密码。
-
ssh-config-file
:用于连接SSH服务器的SSH配置文件。如果未指定此选项,可使用MySQL Shell配置选项ssh.configFile
将自定义文件设置为默认文件。如果未设置ssh.configFile
,则默认使用标准SSH配置文件~/.ssh/config
。 -
ssh-identity-file
:用于连接SSH服务器的身份文件。如果未指定此选项,默认值为SSH代理(如果使用)中配置的任何身份文件,或SSH配置文件中的身份文件,或SSH配置文件夹中的标准私钥文件(~/.ssh/id_rsa
)。 -
ssh-identity-pass
:由ssh-identity-file
选项指定的身份文件的通行短语。警告
在连接规范中指定显式密码不安全,不建议这样做。当需要密码时,MySQL Shell 会以交互方式提示输入密码。
-
connect-timeout
:一个整数值,用于配置诸如MySQL Shell之类的客户端在停止尝试连接无响应的MySQL服务器之前等待的秒数。 -
compression
:此选项用于请求启用或禁用连接的压缩功能。在MySQL 8.0.19及之前版本中,它仅适用于经典MySQL协议连接,而从MySQL 8.0.20起,它也适用于X协议连接。- 在MySQL 8.0.19及之前的版本中,该选项的值为
true
(或1)时启用压缩,默认值为false
(或0)时禁用压缩。 - 从 MySQL 8.0.20 开始,该选项的值为:
required
,即请求压缩,如果服务器不支持则失败;preferred
,即请求压缩,如果不支持则回退到非压缩连接;以及disabled
,即请求非压缩连接,如果服务器不允许则失败。preferred
是 X 协议连接的默认值,disabled
是经典 MySQL 协议连接的默认值。有关 X 插件连接压缩控制的信息,请参阅 22.5.5 节,“使用 X 插件进行连接压缩”。
请注意,不同的MySQL客户端对连接压缩的支持实现方式有所不同。有关详细信息,请查阅客户端的文档。
- 在MySQL 8.0.19及之前的版本中,该选项的值为
-
compression-algorithms
(压缩算法)和compression-level
(压缩级别):这些选项在MySQL Shell 8.0.20及更高版本中可用,用于更精细地控制连接压缩。你可以指定它们来选择连接所使用的压缩算法,以及该算法所使用的数字压缩级别。你也可以使用compression-algorithms
代替compression
来请求对连接进行压缩。有关MySQL Shell连接压缩控制的信息,请参阅使用压缩连接。 -
connection-attributes
:控制应用程序在连接时传递给服务器的键值对。有关连接属性的常规信息,请参阅第29.12.9节,“性能架构连接属性表”。客户端通常会定义一组默认属性,这些属性可以禁用或启用。例如:mysqlx://user@host?connection-attributes mysqlx://user@host?connection-attributes=true mysqlx://user@host?connection-attributes=false
默认行为是发送默认属性集。应用程序除了默认属性之外,还可以指定要传递的属性。可以在连接字符串中以
connection-attributes
参数形式指定其他连接属性。connection-attributes
参数值必须为空(与指定true
相同)、为Boolean
值(true
或false
,用于启用或禁用默认属性集),或者为以逗号分隔的零个或多个key=value
说明符的列表(除默认属性集之外还会发送)。在列表中,缺少键的值会被评估为空字符串。更多示例:mysqlx://user@host?connection-attributes=[attr1=val1,attr2,attr3=] mysqlx://user@host?connection-attributes=[]
应用程序定义的属性名称不能以
_
开头,因为此类名称保留用于内部属性。
使用类 URI 连接字符串进行连接
你可以使用类似 URI 的字符串指定到 MySQL Server 的连接。此类字符串可与 MySQL Shell 以及 --uri
命令选项、MySQL Shell \connect
命令,以及实现 X DevAPI 的 MySQL 连接器配合使用。
注意
术语“类URI”表示连接字符串语法,该语法与RFC3986定义的URI(统一资源标识符)语法相似但不完全相同。
类似 URI 的连接字符串具有以下语法:
[scheme://][user[:[password]]@]host[:port][/schema][?attribute1=value1&attribute2=value2...
重要的
在类URI字符串的元素中,必须对保留字符使用百分号编码。例如,如果指定的字符串包含 @
字符,则该字符必须替换为 %40
。如果在IPv6地址中包含区域ID,则用作分隔符的 %
字符必须替换为 %25
。
您可以在类 URI 连接字符串中使用的参数在 基本连接参数 中进行了描述。
MySQL Shell 的 shell.parseUri()
和 shell.unparseUri()
方法可用于解构和组装类似 URI 的连接字符串。给定一个类似 URI 的连接字符串,shell.parseUri()
会返回一个字典,其中包含在该字符串中找到的每个元素。shell.unparseUri()
会将一个包含 URI 组件和连接选项的字典转换为一个有效的类似 URI 的连接字符串,用于连接到 MySQL,该字符串可在 MySQL Shell 中使用,或由实现 X DevAPI 的 MySQL 连接器使用。
如果在类 URI 字符串中未指定密码(推荐这种做法),交互式客户端会提示输入密码。以下示例展示了如何使用用户名 user_name
指定类 URI 字符串。在每种情况下,都会提示输入密码。
-
与在33065端口监听的本地服务器实例的X协议连接。
mysqlx://user_name@localhost:33065
-
到在3333端口监听的本地服务器实例的经典MySQL协议连接。
mysql://user_name@localhost:3333
-
通过主机名、IPv4地址和IPv6地址与远程服务器实例建立的X协议连接。
mysqlx://user_name@server.example.com/ mysqlx://user_name@198.51.100.14:123 mysqlx://user_name@[2001:db8:85a3:8d3:1319:8a2e:370:7348]
-
使用套接字的X协议连接,所提供的路径使用百分号编码或括号表示。
mysqlx://user_name@/path%2Fto%2Fsocket.sock mysqlx://user_name@(/path/to/socket.sock)
-
可以指定一个可选路径,它代表一个数据库。
# use 'world' as the default database mysqlx://user_name@198.51.100.1/world # use 'world_x' as the default database, encoding _ as %5F mysqlx://user_name@198.51.100.2:33060/world%5Fx
-
可以指定一个可选查询,该查询由各个值组成,每个值以
key=value
对的形式给出,或者以单个key
的形式给出。要指定多个值,用,
字符分隔它们。key=value
和key
值的混合是允许的。值可以是列表类型,列表值按出现顺序排列。字符串必须进行百分号编码或用括号括起来。以下是等效的。ssluser@127.0.0.1?ssl-ca=%2Froot%2Fclientcert%2Fca-cert.pem\ &ssl-cert=%2Froot%2Fclientcert%2Fclient-cert.pem\ &ssl-key=%2Froot%2Fclientcert%2Fclient-key ssluser@127.0.0.1?ssl-ca=(/root/clientcert/ca-cert.pem)\ &ssl-cert=(/root/clientcert/client-cert.pem)\ &ssl-key=(/root/clientcert/client-key)
-
要指定用于加密连接的TLS版本和密码套件:
mysql://user_name@198.51.100.2:3306/world%5Fx?\ tls-versions=[TLSv1.2,TLSv1.3]&tls-ciphersuites=[TLS_DHE_PSK_WITH_AES_128_\ GCM_SHA256, TLS_CHACHA20_POLY1305_SHA256]
之前的示例假定连接需要密码。对于交互式客户端,在登录提示时会要求输入指定用户的密码。如果用户账户没有密码(这不安全且不推荐),或者如果正在使用套接字对等方凭证身份验证(例如,对于Unix套接字连接),则必须在连接字符串中明确指定不提供密码且不需要密码提示。要做到这一点,在字符串中的 user_name
之后放置一个 :
,但不要在其后指定密码。例如:
mysqlx://user_name:@localhost
使用键值对进行连接
在MySQL Shell以及一些实现了X DevAPI的MySQL连接器中,你可以使用键值对来指定与MySQL服务器的连接,这些键值对以适合该实现的自然语言结构提供。例如,在JavaScript中,你可以将连接参数作为JSON对象以键值对形式提供,在Python中则可以作为字典提供。无论以何种方式提供键值对,其概念都是相同的:本节中描述的键可以被赋予用于指定连接的值。你可以在MySQL Shell的shell.connect()
方法或InnoDB Cluster的dba.createCluster()
方法中,以及在一些实现了X DevAPI的MySQL连接器中,使用键值对来指定连接。
通常,键值对由{
和}
字符包围,,
字符用作键值对之间的分隔符。:
字符用于键和值之间,并且字符串必须有定界符(例如,使用'
字符)。与类似URI的连接字符串不同,字符串无需进行百分比编码。
使用键值对指定的连接具有以下格式:
{ key: value, key: value, ...}
您可以用作连接键的参数在 基本连接参数 中有描述。
如果在键值对中未指定密码(推荐这种做法),交互式客户端会提示输入密码。以下示例展示了如何使用键值对并结合用户名 'user_name'
来指定连接。在每种情况下,都会提示输入密码。
-
与在33065端口监听的本地服务器实例的X协议连接。
{user:'user_name', host:'localhost', port:33065}
-
到在3333端口监听的本地服务器实例的经典MySQL协议连接。
{user:'user_name', host:'localhost', port:3333}
-
通过主机名、IPv4地址和IPv6地址与远程服务器实例建立的X协议连接。
{user:'user_name', host:'server.example.com'} {user:'user_name', host:198.51.100.14:123} {user:'user_name', host:[2001:db8:85a3:8d3:1319:8a2e:370:7348]}
-
使用套接字的X协议连接。
{user:'user_name', socket:'/path/to/socket/file'}
-
可以指定一个可选模式,它代表一个数据库。
{user:'user_name', host:'localhost', schema:'world'}
前面的示例假定连接需要密码。对于交互式客户端,会在登录提示时要求输入指定用户的密码。如果用户账户没有密码(这种做法不安全,不建议),或者如果正在使用套接字对等方凭证身份验证(例如,对于Unix套接字连接),则必须显式指定不提供密码,并且不需要密码提示。为此,在 password
键后使用 ''
提供一个空字符串。例如:
{user:'user_name', password:'', host:'localhost'}
6.2.6 使用DNS SRV记录连接到服务器
在域名系统 (DNS) 中,SRV 记录(服务位置记录)是一种资源记录,它使客户端能够指定一个名称,该名称指示服务、协议和域名。对该名称进行 DNS 查找会返回一个回复,其中包含域中提供所需服务的多个可用服务器的名称。有关 DNS SRV 的信息,包括记录如何定义列出的服务器的优先顺序,请参阅RFC 2782。
MySQL支持使用DNS SRV记录连接到服务器。接收DNS SRV查找结果的客户端会尝试按照DNS管理员为每个主机分配的优先级和权重,按优先顺序连接到列出的每个主机上的MySQL服务器。只有当客户端无法连接到任何服务器时,才会发生连接失败。
当多个MySQL实例(例如服务器集群)为应用程序提供相同服务时,DNS SRV记录可用于协助故障转移、负载均衡和复制服务。应用程序直接管理用于尝试连接的候选服务器集很麻烦,而DNS SRV记录提供了一种替代方案:
- DNS SRV记录使DNS管理员能够将单个DNS域名映射到多个服务器。当在配置中添加或移除服务器,或者更改服务器主机名时,管理员还可以集中更新DNS SRV记录。
- DNS SRV记录的集中管理,消除了单个客户端在连接请求中识别每个可能主机的需求,也无需通过额外的软件组件来处理连接。应用程序可以使用DNS SRV记录来获取有关候选MySQL服务器的信息,而无需自行管理服务器信息。
- DNS SRV记录可与连接池结合使用,在这种情况下,与当前DNS SRV记录列表中不再存在的主机的连接,在空闲时会从池中移除。
MySQL支持在以下场景中使用DNS SRV记录连接服务器:
- 有几种MySQL连接器实现了DNS SRV支持;特定于连接器的选项允许针对X协议连接和经典MySQL协议连接请求DNS SRV记录查找。有关常规信息,请参阅使用DNS SRV记录进行连接。有关详细信息,请参阅各个MySQL连接器的文档。
- C API 提供了一个
mysql_real_connect_dns_srv()
函数,该函数与mysql_real_connect()
类似,不同之处在于参数列表未指定要连接的 MySQL 服务器的特定主机。相反,它指定了一个 DNS SRV 记录,该记录指定了一组服务器。请参阅mysql_real_connect_dns_srv()。 - mysql 客户端有一个 --dns-srv-name 选项,用于指定一个 DNS SRV 记录,该记录指定了一组服务器。请参阅6.5.1 节,“mysql — MySQL 命令行客户端”。
DNS SRV 名称由服务、协议和域名组成,服务和协议前面各有一个下划线:
_service._protocol.domain
以下DNS SRV记录标识了多个候选服务器,例如客户端可能会使用这些服务器来建立X协议连接:
Name TTL Class Priority Weight Port Target
_mysqlx._tcp.example.com. 86400 IN SRV 0 5 33060 server1.example.com.
_mysqlx._tcp.example.com. 86400 IN SRV 0 10 33060 server2.example.com.
_mysqlx._tcp.example.com. 86400 IN SRV 10 5 33060 server3.example.com.
_mysqlx._tcp.example.com. 86400 IN SRV 20 5 33060 server4.example.com.
在此,mysqlx
表示 X 协议服务,tcp
表示 TCP 协议。客户端可以使用名称 _mysqlx._tcp.example.com
请求此 DNS SRV 记录。在连接请求中指定名称的具体语法取决于客户端的类型。例如,客户端可能支持在类似 URI 的连接字符串中指定名称,或者以键值对的形式指定名称。
用于经典协议连接的DNS SRV记录可能如下所示:
Name TTL Class Priority Weight Port Target
_mysql._tcp.example.com. 86400 IN SRV 0 5 3306 server1.example.com.
_mysql._tcp.example.com. 86400 IN SRV 0 10 3306 server2.example.com.
_mysql._tcp.example.com. 86400 IN SRV 10 5 3306 server3.example.com.
_mysql._tcp.example.com. 86400 IN SRV 20 5 3306 server4.example.com.
在此,名称 mysql
指的是经典的 MySQL 协议服务,端口是 3306(经典 MySQL 协议的默认端口),而不是 33060(X 协议的默认端口)。
当使用DNS SRV记录查找时,客户端通常必须对连接请求应用这些规则(可能存在特定于客户端或连接器的例外情况):
- 请求必须指定完整的DNS SRV记录名称,服务和协议名称需以下划线作为前缀。
- 请求不得指定多个主机名。
- 请求不得指定端口号。
- 仅支持TCP连接。无法使用Unix套接字文件、Windows命名管道和共享内存。
有关在X DevAPI中使用基于DNS SRV的连接的更多信息,请参阅使用DNS SRV记录的连接。
6.2.7 连接传输协议
对于使用MySQL客户端库的程序(例如,mysql 和 mysqldump),MySQL支持基于多种传输协议与服务器建立连接:TCP/IP、Unix套接字文件、命名管道和共享内存。本节介绍如何选择这些协议,以及它们的异同。
传输协议选择
对于给定的连接,如果未明确指定传输协议,则会隐式确定。例如,连接到localhost
时,在Unix和类Unix系统上会产生套接字文件连接,否则会产生到127.0.0.1
的TCP/IP连接。更多信息,请参阅6.2.4节,“使用命令选项连接到MySQL服务器”。
要显式指定协议,请使用 --protocol
命令选项。下表显示了 --protocol
允许使用的值,并指出了每个值适用的平台。这些值不区分大小写。
“--protocol”值 | 使用的传输协议 | 适用平台 |
---|---|---|
TCP |
传输控制协议/网际协议 | 所有 |
SOCKET |
Unix套接字文件 | Unix和类Unix系统 |
PIPE |
命名管道 | Windows操作系统 |
MEMORY |
共享内存 | Windows操作系统 |
本地和远程连接的传输支持
TCP/IP 传输支持连接到本地或远程 MySQL 服务器。
套接字文件、命名管道和共享内存传输仅支持与本地MySQL服务器的连接。(命名管道传输确实允许远程连接,但MySQL中未实现此功能。)
“localhost”的解释
如果未显式指定传输协议,“localhost”按如下方式解释:
- 在Unix和类Unix系统上,连接到
localhost
会建立一个套接字文件连接。 - 否则,连接到
localhost
会导致建立到127.0.0.1
的 TCP/IP 连接。
如果明确指定了传输协议,“localhost”将根据该协议进行解释。例如,使用“--protocol=TCP”时,与“localhost”的连接会在所有平台上建立到“127.0.0.1”的TCP/IP连接。
加密和安全特性
TCP/IP和套接字文件传输采用《加密连接的命令选项》中所述的选项进行TLS/SSL加密。命名管道和共享内存传输不进行TLS/SSL加密。
如果连接是通过默认安全的传输协议建立的,那么该连接默认是安全的。否则,对于需要TLS/SSL加密的协议,可通过加密使连接变得安全:
- TCP/IP连接默认情况下并不安全,但可以通过加密来确保其安全性。
- 套接字文件连接默认是安全的。它们也可以加密,但对套接字文件连接进行加密并不会提高安全性,反而会增加CPU负载。
- 默认情况下,命名管道连接并不安全,也不会通过加密来确保其安全性。不过,可以使用
named_pipe_full_access_group
系统变量来控制哪些MySQL用户被允许使用命名管道连接。 - 共享内存连接默认是安全的。
如果require_secure_transport
系统变量已启用,则服务器仅允许使用某种形式安全传输的连接。根据前面的说明,使用通过TLS/SSL加密的TCP/IP、套接字文件或共享内存的连接是安全连接。未通过TLS/SSL加密的TCP/IP连接和命名管道连接则不安全。
另请参阅 将加密连接配置为强制使用。
连接压缩
所有传输协议都需对客户端与服务器之间的流量使用压缩。如果给定连接同时使用压缩和加密,那么先进行压缩再进行加密。更多信息,请参阅6.2.8节,“连接压缩控制”。
6.2.8 连接压缩控制
连接到服务器时,客户端与服务器之间的通信流量可采用压缩方式,以减少通过连接发送的字节数。默认情况下,连接不进行压缩,但如果服务器和客户端就双方都认可的压缩算法达成一致,则可以进行压缩。
压缩连接源于客户端,但会影响客户端和服务器端的CPU负载,因为两端都要执行压缩和解压缩操作。由于启用压缩会降低性能,因此主要在网络带宽较低、网络传输时间主导压缩和解压缩操作成本以及结果集较大的情况下,启用压缩才会带来好处。
本节介绍了可用的压缩控制配置参数,以及用于监控压缩使用情况的可用信息源。它适用于经典MySQL协议连接。
压缩控制适用于客户端程序以及参与源/副本复制或组复制的服务器与服务器之间的连接。压缩控制不适用于FEDERATED
表的连接。在以下讨论中,除非上下文指明特定的连接类型,否则 “客户端连接” 是指来自任何支持压缩的源与服务器的连接的简称。
注意
从 MySQL 8.0.19 开始,到 MySQL Server 实例的 X 协议连接支持压缩,但 X 协议连接的压缩与此处所述的经典 MySQL 协议连接的压缩相互独立运行,且分别控制。有关 X 协议连接压缩的信息,请参见第 22.5.5 节“使用 X 插件进行连接压缩”。
配置连接压缩
从MySQL 8.0.18开始,可使用以下配置参数来控制连接压缩:
protocol_compression_algorithms
系统变量用于配置服务器允许传入连接使用哪些压缩算法。--compression-algorithms
和--zstd-compression-level
命令行选项用于配置这些客户端程序允许使用的压缩算法以及zstd
压缩级别:mysql、mysqladmin、mysqlbinlog、mysqlcheck、mysqldump、mysqlimport、mysqlpump、mysqlshow、mysqlslap、mysqltest以及mysql_upgrade。MySQL Shell从8.0.20版本起也提供这些命令行选项。mysql_options()
函数的MYSQL_OPT_COMPRESSION_ALGORITHMS
和MYSQL_OPT_ZSTD_COMPRESSION_LEVEL
选项,用于为使用MySQL C API的客户端程序配置允许的压缩算法和zstd
压缩级别。- 对于
CHANGE MASTER TO
语句,MASTER_COMPRESSION_ALGORITHMS
和MASTER_ZSTD_COMPRESSION_LEVEL
选项用于配置参与源/副本复制的复制服务器允许使用的压缩算法以及zstd
压缩级别。从MySQL 8.0.23开始,请改用CHANGE REPLICATION SOURCE TO
语句以及SOURCE_COMPRESSION_ALGORITHMS
和SOURCE_ZSTD_COMPRESSION_LEVEL
选项。 group_replication_recovery_compression_algorithms
和group_replication_recovery_zstd_compression_level
系统变量用于配置当新成员加入组并连接到捐赠者时,GroupReplication恢复连接所允许的压缩算法以及zstd
压缩级别。
用于指定压缩算法的配置参数为字符串类型,可接受一个或多个以逗号分隔的压缩算法名称列表,顺序不限,可从以下选项中选择(不区分大小写):
- zlib:允许使用zlib压缩算法的连接。
- zstd:允许使用zstd压缩算法的连接。
- uncompressed:允许未压缩的连接。
注意
由于uncompressed
是一种算法名称,可能已配置,也可能未配置,因此可以将MySQL配置为不允许未压缩连接。
示例:
-
要配置服务器允许用于传入连接的压缩算法,请设置
protocol_compression_algorithms
系统变量。默认情况下,服务器允许使用所有可用的算法。要在启动时显式配置该设置,请在服务器my.cnf
文件中使用以下几行:[mysqld] protocol_compression_algorithms=zlib,zstd,uncompressed
要在运行时将
protocol_compression_algorithms
系统变量设置为该值并持久化,请使用以下语句:SET PERSIST protocol_compression_algorithms='zlib,zstd,uncompressed';
SET PERSIST
为正在运行的 MySQL 实例设置一个值。它还会保存该值,以便在服务器后续重启时继续生效。要在不影响服务器后续重启时使用的值的情况下,更改正在运行的 MySQL 实例的值,请使用GLOBAL
关键字,而不是PERSIST
。请参阅 15.7.6.1 节,“变量赋值的 SET 语法”。 -
要仅允许使用
zstd
压缩的传入连接,可在服务器启动时按如下方式进行配置:[mysqld] protocol_compression_algorithms=zstd
或者,要在运行时进行更改:
SET PERSIST protocol_compression_algorithms='zstd';
-
要允许 mysql 客户端发起
zlib
或uncompressed
的连接,请按如下方式调用它:mysql --compression-algorithms=zlib,uncompressed
-
要配置副本使用
zlib
或zstd
连接连接到源,且zstd
连接的压缩级别为7,请使用CHANGE REPLICATION SOURCE TO
语句(适用于MySQL 8.0.23及更高版本)或CHANGE MASTER TO
语句(适用于MySQL 8.0.23之前的版本):CHANGE REPLICATION SOURCE TO SOURCE_COMPRESSION_ALGORITHMS = 'zlib,zstd', SOURCE_ZSTD_COMPRESSION_LEVEL = 7;
这假定出于“配置旧版连接压缩”中所述的原因,
replica_compressed_protocol
或slave_compressed_protocol
系统变量已禁用。
为了成功建立连接,连接双方必须就双方都认可的压缩算法达成一致。算法协商过程会先尝试使用zlib
,然后是zstd
,最后是uncompressed
。如果双方找不到共同的算法,则连接尝试失败。
因为双方必须就压缩算法达成一致,并且由于“未压缩”是一种不一定被允许的算法值,所以不一定会回退到未压缩连接。例如,如果服务器配置为允许“zstd”,而客户端配置为允许“zlib,未压缩”,则客户端根本无法连接。在这种情况下,双方没有共同的算法,因此连接尝试会失败。
允许指定zstd
压缩级别的配置参数采用1到22之间的整数值,值越大表示压缩级别越高。默认的zstd
压缩级别为3。压缩级别设置对不使用zstd
压缩的连接没有影响。
可配置的zstd
压缩级别允许在较低网络流量和较高CPU负载,以及较高网络流量和较低CPU负载之间做出选择。较高的压缩级别可减少网络拥塞,但额外的CPU负载可能会降低服务器性能。
配置传统连接压缩
在MySQL 8.0.18之前,可使用以下配置参数来控制连接压缩:
- 客户端程序支持一个
--compress
命令行选项,用于指定在与服务器的连接中使用压缩。 - 对于使用MySQL C API的程序,为
mysql_options()
函数启用MYSQL_OPT_COMPRESS
选项可指定与服务器的连接使用压缩。 - 对于源/副本复制,启用系统变量
replica_compressed_protocol
(从MySQL 8.0.26起)或slave_compressed_protocol
(MySQL 8.0.26之前)可指定副本与源的连接使用压缩。
在每种情况下,当指定使用压缩时,如果双方都允许,连接将使用 zlib
压缩算法,否则回退到不压缩的连接。
从MySQL 8.0.18开始,由于在《配置连接压缩》中介绍了用于更精细控制连接压缩的额外压缩参数,上述压缩参数已成为旧参数。MySQL Shell是个例外,其中的 --compress
命令行选项仍然有效,可用于请求压缩而无需选择压缩算法。有关MySQL Shell连接压缩控制的信息,请参阅《使用压缩连接》。
传统压缩参数与新参数相互作用,其语义变化如下:
- “legacy
--compress
选项的含义取决于是否指定了--compression-algorithms
:”- 当未指定
--compression-algorithms
时,--compress
等同于指定客户端算法集为zlib,uncompressed
。 - 当指定了
--compression-algorithms
时,--compress
等同于指定一个zlib
算法集,完整的客户端算法集是zlib
与--compression-algorithms
指定的算法集的并集。例如,同时指定--compress
和--compression-algorithms=zlib,zstd
时,允许的算法集是zlib
加上zlib,zstd
;即zlib,zstd
。同时指定--compress
和--compression-algorithms=zstd,uncompressed
时,允许的算法集是zlib
加上zstd,uncompressed
;即zlib,zstd,uncompressed
。
- 当未指定
- 同样类型的交互也发生在传统的
MYSQL_OPT_COMPRESS
选项与MYSQL_OPT_COMPRESSION_ALGORITHMS
选项之间,这两个选项用于mysql_options()
CAPI 函数。 - 如果
replica_compressed_protocol
或slave_compressed_protocol
系统变量已启用,则其优先于MASTER_COMPRESSION_ALGORITHMS
,并且如果源和副本都允许使用该算法,那么与源的连接将使用zlib
压缩。如果replica_compressed_protocol
或slave_compressed_protocol
被禁用,则应用MASTER_COMPRESSION_ALGORITHMS
的值。
注意
从 MySQL 8.0.18 开始,旧版压缩控制参数已被弃用;预计在未来的 MySQL 版本中会将其移除。
监控连接压缩
Compression
状态变量为 ON
或 OFF
,用于指示当前连接是否使用压缩。
如果当前连接启用了压缩,mysql 客户端的 \status
命令会显示一行内容,即 Protocol:<br /> Compressed
。如果没有这一行内容,则表示连接未压缩。
从8.0.14版本开始,MySQL Shell的 \status
命令会显示一行 Compression:
,该行显示 Disabled
(禁用) 或 Enabled
(启用),以表明连接是否已压缩。
从MySQL 8.0.18开始,这些额外的信息源可用于监控连接压缩:
- 要监控客户端连接正在使用的压缩情况,请使用
Compression_algorithm
和Compression_level
状态变量。对于当前连接,它们的值分别指示压缩算法和压缩级别。 - 要确定服务器配置允许传入连接使用哪些压缩算法,请检查
protocol_compression_algorithms
系统变量。 - 对于源/副本复制连接,已配置的压缩算法和压缩级别可从多个来源获取:
- 性能架构
replication_connection_configuration
表有COMPRESSION_ALGORITHMS
和ZSTD_COMPRESSION_LEVEL
列。 mysql.slave_master_info
系统表中有Master_compression_algorithms
和Master_zstd_compression_level
列。如果master.info
文件存在,其中也包含这些值的行。
- 性能架构
6.2.9 设置环境变量
环境变量可以在命令提示符处设置,以影响命令处理器的当前调用,也可以永久设置,以影响未来的调用。要永久设置变量,可以在启动文件中设置,也可以使用系统为此提供的界面进行设置。有关具体详细信息,请查阅命令解释器的文档。6.9节“环境变量”列出了影响MySQL程序操作的所有环境变量。
要为环境变量指定一个值,请使用适合您的命令处理器的语法。例如,在 Windows 上,您可以设置 USER
变量来指定您的 MySQL 账户名。要执行此操作,请使用以下语法:
SET USER=your_name
在Unix系统上,语法取决于您使用的 shell。假设您想使用 MYSQL_TCP_PORT
变量指定TCP/IP端口号。典型的语法(例如对于 sh、ksh、bash、zsh 等)如下:
MYSQL_TCP_PORT=3306
export MYSQL_TCP_PORT
第一个命令用于设置变量,而export
命令则将该变量导出到 shell 环境中,以便 MySQL 和其他进程能够访问其值。
对于 csh 和 tcsh,使用 setenv 使 shell 变量在环境中可用:
setenv MYSQL_TCP_PORT 3306
设置环境变量的命令可以在命令提示符中执行,以便立即生效,但这些设置仅在您注销之前有效。要使设置在每次登录时都生效,请使用系统提供的界面,或将相应的一条或多条命令放在启动文件中,这样您的命令解释器每次启动时都会读取该文件。
在Windows上,你可以使用系统控制面板(在“高级”项下)设置环境变量。
在Unix系统上,典型的Shell启动文件对于bash是 .bashrc
或 .bash_profile
,对于tcsh是 .tcshrc
。
假设你的MySQL程序安装在/usr/local/mysql/bin
目录下,并且你希望能够方便地调用这些程序。要实现这一点,需设置PATH
环境变量的值,使其包含该目录。例如,如果你的Shell是bash,则在.bashrc
文件中添加以下行:
PATH=${PATH}:/usr/local/mysql/bin
bash会针对登录和非登录shell使用不同的启动文件,因此你可能需要将设置添加到登录shell的.bashrc以及非登录shell的.bash_profile中,以确保无论何种情况都设置了PATH。
如果你的 shell 是 tcsh,请将以下行添加到 .tcshrc
文件中:
setenv PATH ${PATH}:/usr/local/mysql/bin
如果主目录中不存在相应的启动文件,请使用文本编辑器创建该文件。
修改PATH
设置后,在Windows上打开一个新的控制台窗口,或者在Unix上重新登录,以使设置生效。
6.3 服务器与服务器启动程序
- 6.3.1 mysqld — MySQL服务器
- 6.3.2 mysqld_safe — MySQL服务器启动脚本
- 6.3.3 mysql.server — MySQL服务器启动脚本
- 6.3.4 mysqld_multi — 管理多个 MySQL 服务器
本节介绍MySQL服务器mysqld以及用于启动该服务器的几个程序。
6.3.1 mysqld — MySQL服务器
mysqld,也称为MySQL服务器,是一个单线程多任务程序,在MySQL安装中承担大部分工作。它不会生成额外的进程。MySQL服务器管理对包含数据库和表的MySQL数据目录的访问。数据目录也是日志文件和状态文件等其他信息的默认存储位置。
注意
有些安装包包含一个名为 mysqld-debug 的服务器调试版本。若要获得调试支持、内存分配检查以及跟踪文件支持,请调用此版本而非 mysqld(请参见 7.9.1.2 节,“创建跟踪文件”)。
当MySQL服务器启动时,它会监听来自客户端程序的网络连接,并代表这些客户端管理对数据库的访问。
mysqld
程序有许多可在启动时指定的选项。要获取完整的选项列表,请运行以下命令:
mysqld --verbose --help
MySQL服务器还有一组系统变量,这些变量会在其运行时影响其操作。系统变量可以在服务器启动时设置,并且其中许多变量可以在运行时更改,以实现动态服务器重新配置。MySQL服务器还有一组状态变量,这些变量提供有关其操作的信息。您可以监控这些状态变量以获取运行时性能特征。
有关 MySQL Server 命令选项、系统变量和状态变量的完整说明,请参阅7.1 节,“MySQL Server”。有关安装 MySQL 并设置初始配置的信息,请参阅第 2 章,安装 MySQL。
6.3.2 mysqld_safe — MySQL服务器启动脚本
在Unix系统上,建议使用mysqld_safe来启动mysqld服务器。mysqld_safe增加了一些安全特性,例如在发生错误时重启服务器,并将运行时信息记录到错误日志中。本节稍后会对错误日志记录进行说明。
注意
对于某些Linux平台,通过RPM或Debian软件包安装MySQL时,会包含对systemd的支持,用于管理MySQL服务器的启动和关闭。在这些平台上,不会安装mysqld_safe,因为没有必要。有关更多信息,请参阅2.5.9节,“使用systemd管理MySQL服务器”。
在使用systemd进行服务器管理的平台上不使用mysqld_safe的一个影响是,选项文件中使用[mysqld_safe]
或[safe_mysqld]
部分不受支持,可能会导致意外行为。
mysqld_safe 尝试启动一个名为 mysqld 的可执行文件。要覆盖默认行为并显式指定要运行的服务器名称,请为 mysqld_safe 指定 --mysqld
或 --mysqld-version
选项。你还可以使用 --ledir
来指定 mysqld_safe 应在其中查找服务器的目录。
许多传递给 mysqld_safe 的选项与传递给 mysqld 的选项相同。请参阅7.1.7节,“服务器命令选项”。
如果在命令行中指定了mysqld_safe不认识的选项,这些选项会被传递给mysqld,但如果在选项文件的[mysqld_safe]
组中指定,则会被忽略。请参阅6.2.2.2节,“使用选项文件”。
mysqld_safe 会从选项文件中的[mysqld]
、[server]
和[mysqld_safe]
部分读取所有选项。例如,如果您像这样指定一个 [mysqld]
部分,mysqld_safe 会找到并使用--log-error
选项:
[mysqld]
log-error=error.log
为了向后兼容,mysqld_safe 也会读取 [safe_mysqld]
部分,但为了与时俱进,你应该将此类部分重命名为 [mysqld_safe]
。
mysqld_safe 可接受命令行和选项文件中的选项,如下表所述。有关 MySQL 程序使用的选项文件的信息,请参阅6.2.2.2 节,“使用选项文件”。
表6.7 mysqld_safe选项
-
命令行格式 --help
显示一条帮助信息并退出。
-
命令行格式 --basedir=dir_name
类型 目录名称 MySQL安装目录的路径。
-
命令行格式 --core-file-size=size
类型 字符串 mysqld 应能够创建的核心文件大小。该选项值会传递给 ulimit -c。
注意
innodb_buffer_pool_in_core_file
变量可用于在支持的操作系统上减小核心转储文件的大小。有关更多信息,请参阅17.8.3.7节,“从核心转储文件中排除缓冲池页面”。 -
命令行格式 --datadir=dir_name
类型 目录名称 数据目录的路径。
-
--defaults-extra-file=*
file_name*
命令行格式 --defaults-extra-file=file_name
类型 文件名 除了常规的选项文件外,还需读取此选项文件。如果该文件不存在或以其他方式无法访问,服务器将报错退出。如果
file_name
不是绝对路径名,则会相对于当前目录进行解释。如果使用此选项,它必须是命令行上的第一个选项。有关此选项及其他选项文件选项的更多信息,请参阅 6.2.2.3 节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-file=file_name
类型 文件名 仅使用给定的选项文件。如果该文件不存在或以其他方式无法访问,服务器将报错退出。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录的路径。如果使用此选项,它必须是命令行上的第一个选项。有关此选项和其他选项文件选项的更多信息,请参阅 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
命令行格式 --ledir=dir_name
类型 目录名称 如果 mysqld_safe 找不到服务器,请使用此选项指明服务器所在目录的路径名。
此选项仅在命令行中接受,而不在选项文件中接受。在使用 systemd 的平台上,可以在
MYSQLD_OPTS
的值中指定该值。请参阅 2.5.9 节,“使用 systemd 管理 MySQL 服务器”。 -
命令行格式 --log-error=file_name
类型 文件名 将错误日志写入给定文件。请参阅第7.4.2节 “错误日志”。
-
命令行格式 --mysqld-safe-log-timestamps=type
类型 枚举 默认值 utc
有效值 system``hyphen``legacy
此选项控制由 mysqld_safe 生成的日志输出中时间戳的格式。以下列表描述了允许的值。对于任何其他值,mysqld_safe 将记录一条警告并使用
UTC
格式。-
协调世界时,协调世界时
ISO 8601协调世界时(UTC)格式(与服务器的
--log_timestamps=UTC
相同)。这是默认设置。 -
系统,系统
ISO 8601本地时间格式(与服务器的
--log_timestamps=SYSTEM
相同)。 -
连字符,连字符
YY-MM-DD h:mm:ss格式,如MySQL 5.6的mysqld_safe。
-
LEGACY
,legacy
“YYMMDD hh:mm:ss格式,与MySQL 5.6之前的mysqld_safe中的格式相同。”
-
-
命令行格式 --malloc-lib=[lib-name]
类型 字符串 用于内存分配的库名,它将替代系统的
malloc()
库。选项值必须是以下目录之一:/usr/lib
、/usr/lib64
、/usr/lib/i386-linux-gnu
或/usr/lib/x86_64-linux-gnu
。--malloc-lib
选项的工作原理是修改LD_PRELOAD
环境值,以影响动态链接,从而在mysqld运行时让加载程序找到内存分配库:-
如果未给出该选项,或者给出时没有值(
--malloc-lib=
),则不会修改LD_PRELOAD
,也不会尝试使用tcmalloc
。 -
在MySQL 8.0.21之前,如果将选项指定为
--malloc-lib=tcmalloc
,mysqld_safe 会在/usr/lib
中查找tcmalloc
库。如果找到tmalloc
,则会将其路径名添加到mysqld 的LD_PRELOAD
值的开头。如果未找到tcmalloc
,mysqld_safe 将因错误而终止。从MySQL 8.0.21版本起,
tcmalloc
不是--malloc-lib
选项允许使用的值。 -
如果选项为
--malloc-lib=/path/to/some/library
,则该完整路径会被添加到LD_PRELOAD
值的开头。如果完整路径指向一个不存在或不可读的文件,mysqld_safe将因错误而中止。 -
对于mysqld_safe向
LD_PRELOAD
添加路径名的情况,它会将该路径添加到该变量现有值的开头。
注意
在使用systemd管理服务器的系统上,mysqld_safe 不可用。相反,可通过在
/etc/sysconfig/mysql
中设置LD_PRELOAD
来指定分配库。Linux用户可以通过在
my.cnf
文件中添加以下几行内容,在任何已在/usr/lib
中安装了tcmalloc
软件包的平台上使用libtcmalloc_minimal.so
库:[mysqld_safe] malloc-lib=tcmalloc
要使用特定的
tcmalloc
库,请指定其完整路径名。例如:[mysqld_safe] malloc-lib=/opt/lib/libtcmalloc_minimal.so
-
-
命令行格式 --mysqld=file_name
类型 文件名 你想要启动的服务器程序的名称(位于
ledir
目录中)。如果使用MySQL二进制发行版,但数据目录不在二进制发行版内,则需要此选项。如果mysqld_safe找不到服务器,请使用--ledir
选项来指明服务器所在目录的路径名。此选项仅在命令行中接受,而不在选项文件中接受。在使用systemd的平台上,可以在
MYSQLD_OPTS
的值中指定该值。请参阅 2.5.9节,“使用systemd管理MySQL服务器”。 -
命令行格式 --mysqld-version=suffix
类型 字符串 此选项与
--mysqld
选项类似,但您只需指定服务器程序名称的后缀。假定基本名称为 mysqld。例如,如果使用--mysqld-version=debug
,mysqld_safe 将在ledir
目录中启动 mysqld-debug 程序。如果--mysqld-version
的参数为空,mysqld_safe 将使用ledir
目录中的 mysqld。此选项仅在命令行中接受,而不在选项文件中接受。在使用 systemd 的平台上,可以在
MYSQLD_OPTS
的值中指定该值。请参阅 2.5.9 节,“使用 systemd 管理 MySQL 服务器”。 -
命令行格式 --nice=priority
类型 数值的 使用
nice
程序将服务器的调度优先级设置为给定值。 -
命令行格式 --no-defaults
类型 字符串 不读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,可以使用
--no-defaults
来阻止读取这些选项。如果使用此选项,它必须是命令行上的第一个选项。有关此选项及其他选项文件选项的更多信息,请参阅 6.2.2.3 节“影响选项文件处理的命令行选项”。
-
命令行格式 --open-files-limit=count
类型 字符串 mysqld
应该能够打开的文件数量。该选项值会传递给ulimit -n
。注意
要使其正常运行,你必须以
root
身份启动mysqld_safe。 -
命令行格式 --pid-file=file_name
类型 文件名 mysqld
应将其用作进程ID文件的路径名。 -
命令行格式 --plugin-dir=dir_name
类型 目录名称 插件目录的路径名称。
-
命令行格式 --port=number
类型 数值的 服务器在监听TCP/IP连接时应使用的端口号。除非服务器由
root
操作系统用户启动,否则端口号必须为1024或更高。 -
命令行格式 --skip-kill-mysqld
不要在启动时尝试终止流浪的mysqld进程。此选项仅在Linux上有效。
-
命令行格式 --socket=file_name
类型 文件名 服务器在监听本地连接时应使用的Unix套接字文件。
-
命令行格式 --syslog
已弃用 是 命令行格式 --skip-syslog
已弃用 是 --syslog
会导致将错误消息发送到支持 logger 程序的系统上的syslog
。--skip-syslog
禁止使用syslog
;消息将写入错误日志文件。当使用
syslog
进行错误日志记录时,所有日志消息均使用daemon.err
工具/严重性级别。使用这些选项来控制mysqld日志记录已被弃用。要将错误日志输出写入系统日志,请使用7.4.2.8节“将错误日志记录到系统日志”中的说明。要控制设备,请使用服务器
log_syslog_facility
系统变量。 -
命令行格式 --syslog-tag=tag
已弃用 是 对于记录到
syslog
,来自 mysqld_safe 和 mysqld 的消息分别使用标识符mysqld_safe
和mysqld
进行写入。要为标识符指定后缀,请使用--syslog-tag=tag
,这会将标识符修改为mysqld_safe-tag
和mysqld-tag
。使用此选项控制 mysqld 日志记录已被弃用。请改用服务器
log_syslog_tag
系统变量。请参阅 7.4.2.8节,“将错误记录到系统日志”。 -
命令行格式 --timezone=timezone
类型 字符串 将
TZ
时区环境变量设置为给定的选项值。有关合法的时区规范格式,请查阅您的操作系统文档。 -
--user={*
user_name*|*
user_id*}
| 命令行格式 |
--user={user_name|user_id}
|
| :--------- | ---------------------------- |
| 类型 | 字符串 |
| 类型 | 数值的 |以名为
user_name
的用户或数字用户IDuser_id
来运行mysqld服务器。(在此上下文中,“用户”指的是系统登录账户,而非授权表中列出的MySQL用户。)
如果使用 --defaults-file
或 --defaults-extra-file
选项来指定选项文件并执行 mysqld_safe
,则该选项必须是命令行中给出的第一个选项,否则不会使用该选项文件。例如,此命令不会使用指定的选项文件:
mysql> mysqld_safe --port=port_num --defaults-file=file_name
相反,请使用以下命令:
mysql> mysqld_safe --defaults-file=file_name --port=port_num
mysqld_safe
脚本的编写目的是,通常情况下,它能够启动从MySQL源码或二进制发行版安装的服务器,即使这两种类型的发行版通常会将服务器安装在略有不同的位置。(请参见2.1.5节 “安装布局”。)mysqld_safe
要求满足以下条件之一:
- 服务器和数据库的位置与工作目录(调用mysqld_safe的目录)相关。对于二进制发行版,mysqld_safe会在其工作目录下查找
bin
和data
目录。对于源码发行版,它会查找libexec
和var
目录。如果从MySQL安装目录(例如,二进制发行版的/usr/local/mysql
)执行mysqld_safe,则应满足此条件。 - 如果相对于工作目录找不到服务器和数据库,mysqld_safe 会尝试通过绝对路径名来定位它们。典型的位置是
/usr/local/libexec
和/usr/local/var
。实际位置由构建发行版时配置的值决定。如果将 MySQL 安装在配置时指定的位置,那么位置应该是正确的。
因为 mysqld_safe 尝试相对于其自身工作目录查找服务器和数据库,所以只要你从MySQL安装目录运行 mysqld_safe,就可以在任何位置安装MySQL二进制发行版:
cd mysql_installation_directory
bin/mysqld_safe &
如果mysqld_safe失败,即使是从MySQL安装目录调用的,也要指定--ledir
和--datadir
选项,以指明服务器和数据库在您系统上的位置。
mysqld_safe 尝试使用sleep和date系统实用程序来确定它每秒尝试启动的次数。如果这些实用程序存在,并且每秒尝试启动的次数大于5,mysqld_safe 会在再次启动前等待整整1秒。这是为了在出现反复失败的情况下防止过度使用CPU。(Bug #11761530,Bug #54035)
当你使用 mysqld_safe 启动 mysqld</b2 时,mysqld_safe 会将自身以及 mysqld 的错误(和通知)消息发送到同一目标。
有几个mysqld_safe选项可用于控制这些消息的发送目的地:
--log-error=file_name
:将错误消息写入指定的错误文件。--syslog
:在支持 logger 程序的系统上,将错误消息写入syslog
。--skip-syslog
:不要将错误消息写入syslog
。消息会写入默认的错误日志文件(数据目录中的host_name.err
),如果指定了--log-error
选项,则会写入指定的文件。
如果未给出这些选项中的任何一个,则默认值为--skip-syslog
。
当 mysqld_safe 写入消息时,通知信息会发送到日志记录目标(syslog
或错误日志文件)以及 stdout
。错误信息会发送到日志记录目标以及 stderr
。
注意
从 mysqld_safe 控制 mysqld 日志记录已被弃用。请改用服务器原生的 syslog 支持。有关更多信息,请参阅 7.4.2.8节,“将错误记录到系统日志”。
6.3.3 mysql.server — MySQL服务器启动脚本
Unix和类Unix系统上的MySQL发行版包含一个名为mysql.server的脚本,该脚本使用mysqld_safe启动MySQL服务器。它可用于Linux和Solaris等使用System V风格运行目录来启动和停止系统服务的系统。它也被macOS上MySQL的启动项所使用。
mysql.server 是MySQL源码树中使用的脚本名称。安装后的名称可能有所不同(例如,mysqld 或 mysql)。在以下讨论中,请根据您的系统适当调整 mysql.server 这个名称。
注意
对于某些Linux平台,通过RPM或Debian软件包安装MySQL时,会包含对systemd的支持,用于管理MySQL服务器的启动和关闭。在这些平台上,不会安装mysql.server和mysqld_safe,因为它们并非必需。更多信息,请参见2.5.9节,“使用systemd管理MySQL服务器”。
要使用mysql.server脚本手动启动或停止服务器,请在命令行中使用start
或stop
参数调用它:
mysql.server start
mysql.server stop
mysql.server 会将位置更改为 MySQL 安装目录,然后调用 mysqld_safe。要以特定用户身份运行服务器,请在全局 /etc/my.cnf
选项文件的 [mysqld]
组中添加适当的 user
选项,如本节后面所示。(如果您将 MySQL 的二进制发行版安装在非标准位置,则可能需要编辑 mysql.server。在运行 mysqld_safe 之前,修改它以将位置更改为正确的目录。如果这样做,将来升级 MySQL 时,您修改后的 mysql.server 版本可能会被覆盖;请复制一份已编辑的版本,以便重新安装。)
mysql.server stop 通过向服务器发送信号来停止服务器。你也可以通过执行 mysqladmin shutdown 手动停止服务器。
要在服务器上自动启动和停止MySQL,您必须将启动和停止命令添加到/etc/rc*
文件的相应位置:
-
如果使用 Linux 服务器 RPM 软件包(
MySQL-server-VERSION.rpm
),或者采用原生 Linux 软件包安装方式,则mysql.server 脚本可能会安装在/etc/init.d
目录中,名称为mysqld
或mysql
。有关 Linux RPM 软件包的更多信息,请参见 2.5.4 节,“使用 Oracle 提供的 RPM 软件包在 Linux 上安装 MySQL”。 -
如果您从源发行版安装MySQL,或者使用不会自动安装mysql.server的二进制发行版格式,那么您可以手动安装该脚本。该脚本可在MySQL安装目录下的
support-files
目录中或MySQL源文件树中找到。将该脚本复制到/etc/init.d
目录中,并命名为mysql,然后使其可执行:cp mysql.server /etc/init.d/mysql chmod +x /etc/init.d/mysql
安装该脚本后,要使其在系统启动时运行所需的激活命令取决于您的操作系统。在Linux上,您可以使用 chkconfig:
chkconfig --add mysql
在某些Linux系统上,要完全启用mysql脚本,以下命令似乎也是必要的:
chkconfig --level 345 mysql on
-
在FreeBSD系统上,启动脚本通常应放置在
/usr/local/etc/rc.d/
目录中。将mysql.server
脚本安装到/usr/local/etc/rc.d/mysql.server.sh
,以实现自动启动。rc(8)
手册页指出,只有当此目录中的脚本的基本名称与*.sh
shell文件名模式匹配时,才会执行这些脚本。此目录中存在的任何其他文件或目录将被静默忽略。 -
作为前面设置的一种替代方法,一些操作系统也使用
/etc/rc.local
或/etc/init.d/boot.local
在启动时启动其他服务。要使用此方法启动 MySQL,请将类似以下的命令追加到相应的启动文件中:/bin/sh -c 'cd /usr/local/mysql; ./bin/mysqld_safe --user=mysql &'
-
对于其他系统,请查阅操作系统文档,了解如何安装启动脚本。
mysql.server 会从选项文件的 [mysql.server]
和 [mysqld]
部分读取选项。为保持向后兼容性,它也会读取 [mysql_server]
部分,但为与时俱进,应将此类部分重命名为 [mysql.server]
。
你可以在全局的 /etc/my.cnf
文件中为 mysql.server 添加选项。一个典型的 my.cnf
文件可能如下所示:
[mysqld]
datadir=/usr/local/mysql/var
socket=/var/tmp/mysql.sock
port=3306
user=mysql
[mysql.server]
basedir=/usr/local/mysql
mysql.server 脚本支持下表中所示的选项。如果指定这些选项,必须将它们放在选项文件中,而不是放在命令行中。mysql.server 仅支持将start
和 stop
作为命令行参数。
表6.8 mysql.server选项文件选项
选项名称 | 描述 | 类型 |
---|---|---|
基底 |
MySQL安装目录的路径 | 目录名称 |
数据目录 |
MySQL数据目录路径 | 目录名称 |
pid文件 |
服务器应写入其进程ID的文件 | 文件名 |
服务启动超时 |
等待服务器启动的时长 | 整数 |
-
MySQL安装目录的路径。
-
MySQL数据目录的路径。
-
服务器应在其中写入其进程ID的文件的路径名。除非提供绝对路径名以指定其他目录,否则服务器会在数据目录中创建该文件。
如果未给出此选项,mysql.server 将使用默认值
host_name.pid
。传递给 mysqld_safe 的PID文件值将覆盖在[mysqld_safe]
选项文件组中指定的任何值。由于 mysql.server 读取[mysqld]
选项文件组,但不读取[mysqld_safe]
组,因此通过在[mysqld_safe]
和[mysqld]
组中设置相同的pid-file
,可以确保从 mysql.server 调用 mysqld_safe 时,与手动调用时获得相同的值。 -
等待服务器启动确认的时间(以秒为单位)。如果服务器在此时间内未启动,mysql.server 将以错误退出。默认值为900。值为0表示完全不等待启动。负值表示永远等待(无超时)。
6.3.4 mysqld_multi — 管理多个 MySQL 服务器
mysqld_multi 旨在管理多个mysqld 进程,这些进程监听不同的 Unix 套接字文件和 TCP/IP 端口上的连接。它可以启动或停止服务器,或者报告它们的当前状态。
注意
对于某些Linux平台,通过RPM或Debian软件包安装MySQL时,会包含对systemd的支持,用于管理MySQL服务器的启动和关闭。在这些平台上,不会安装mysqld_multi,因为没有必要。有关使用systemd管理多个MySQL实例的信息,请参阅2.5.9节,“使用systemd管理MySQL服务器”。
mysqld_multi
会在 my.cnf
(或由 --defaults-file
选项指定的文件)中查找名为 [mysqldN]
的组。N
可以是任意正整数。在以下讨论中,这个数字被称为选项组编号,或 GNR
。组编号用于区分各个选项组,并作为参数传递给 mysqld_multi
,以指定要启动、停止或获取状态报告的服务器。这些组中列出的选项与用于启动 mysqld
的 [mysqld]
组中的选项相同。(例如,请参阅 2.9.5 节 “自动启动和停止 MySQL”。)但是,在使用多个服务器时,每个服务器必须为诸如 Unix 套接字文件和 TCP/IP 端口号等选项使用自己的值。有关在多服务器环境中每个服务器必须唯一的选项的更多信息,请参阅 7.8 节 “在一台机器上运行多个 MySQL 实例”。
要调用 mysqld_multi,请使用以下语法:
mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...]
start
、stop
、reload
(停止并重新启动)和report
指示要执行的操作。根据选项名称后面的GNR
列表,你可以对单个服务器或多个服务器执行指定操作。如果没有列表,mysqld_multi将对选项文件中的所有服务器执行该操作。
每个GNR
值代表一个选项组编号或组编号范围。该值应为选项文件中组名称末尾的数字。例如,名为[mysqld17]
的组的GNR
为17
。要指定一个数字范围,用破折号分隔第一个和最后一个数字。GNR
值10-13
代表组[mysqld10]
到[mysqld13]
。可以在命令行中指定多个组或组范围,用逗号分隔。GNR
列表中不能有空白字符(空格或制表符);空白字符后的任何内容将被忽略。
此命令使用选项组[mysqld17]
启动单个服务器:
mysqld_multi start 17
此命令使用选项组[mysqld8]
和[mysqld10]
通过[mysqld13]
停止多个服务器:
mysqld_multi stop 8,10-13
关于如何设置选项文件的示例,请使用此命令:
mysqld_multi --example
mysqld_multi 按如下方式搜索选项文件:
-
使用
--no-defaults
,则不读取任何选项文件。命令行格式 --no-defaults
类型 布尔值 默认值 false
-
使用
--defaults-file=file_name
时,仅读取指定的文件。命令行格式 --defaults-file=filename
类型 文件名 默认值 [none]
-
否则,将读取标准位置列表中的选项文件,包括通过
--defaults-extra-file=file_name
选项指定的任何文件(如果指定了该选项)。(如果多次指定该选项,则使用最后一个值。)命令行格式 --defaults-extra-file=filename
类型 文件名 默认值 [none]
有关这些选项以及其他选项文件选项的更多信息,请参阅6.2.2.3节,“影响选项文件处理的命令行选项”。
读取的选项文件会搜索[mysqld_multi]
和[mysqldN]
选项组。[mysqld_multi]
组可用于mysqld_multi自身的选项。[mysqldN]
组可用于传递给特定mysqld实例的选项。
[mysqld]
或 [mysqld_safe]
组可用于 mysqld 或 mysqld_safe 的所有实例读取的通用选项。你可以指定一个 --defaults-file=file_name
选项,以便为该实例使用不同的配置文件,在这种情况下,该实例将使用该文件中的 [mysqld]
或 [mysqld_safe]
组。
mysqld_multi 支持以下选项。
-
命令行格式 --help
类型 布尔值 默认值 false
显示帮助信息并退出。
-
命令行格式 --example
类型 布尔值 默认值 false
显示一个示例选项文件。
-
命令行格式 --log=path
类型 文件名 默认值 /var/log/mysqld_multi.log
指定日志文件的名称。如果该文件已存在,则将日志输出追加到其中。
-
命令行格式 --mysqladmin=file
类型 文件名 默认值 [none]
用于停止服务器的mysqladmin二进制文件。
-
命令行格式 --mysqld=file
类型 文件名 默认值 [none]
要使用的mysqld二进制文件。请注意,你也可以将 mysqld_safe 指定为该选项的值。如果你使用 mysqld_safe 启动服务器,可以在相应的
[mysqldN]
选项组中包含mysqld
或ledir
选项。这些选项指明 mysqld_safe 应启动的服务器名称以及服务器所在目录的路径名。(请参阅 6.3.2节,“mysqld_safe - MySQL服务器启动脚本” 中对这些选项的说明。)示例:[mysqld38] mysqld = mysqld-debug ledir = /opt/local/mysql/libexec
-
命令行格式 --no-log
类型 布尔值 默认值 false
将日志信息打印到
stdout
而不是日志文件。默认情况下,输出会发送到日志文件。 -
命令行格式 --password=string
类型 字符串 默认值 [none]
调用mysqladmin时要使用的MySQL账户密码。请注意,与其他MySQL程序不同,此选项的密码值是必填项。
-
命令行格式 --silent
类型 布尔值 默认值 false
静默模式;禁用警告。
-
命令行格式 --tcp-ip
类型 布尔值 默认值 false
通过TCP/IP端口而非Unix套接字文件连接到每个MySQL服务器。(如果套接字文件缺失,服务器可能仍在运行,但只能通过TCP/IP端口访问。)默认情况下,使用Unix套接字文件进行连接。此选项会影响
stop
和report
操作。 -
命令行格式 --user=name
类型 字符串 默认值 root
调用mysqladmin 时要使用的MySQL账户用户名。
-
命令行格式 --verbose
类型 布尔值 默认值 false
更加详细。
-
命令行格式 --version
类型 布尔值 默认值 false
显示版本信息并退出。
关于mysqld_multi的一些说明:
-
最重要的是:在使用 mysqld_multi 之前,请确保你理解传递给 mysqld 服务器的选项的含义,以及 为何 要使用单独的 mysqld 进程。注意对同一数据目录使用多个 mysqld 服务器存在的风险。请使用单独的数据目录,除非你 清楚 自己在做什么。在多线程系统中,对同一数据目录启动多个服务器 并不会 带来额外的性能提升。请参阅 7.8节,“在一台机器上运行多个MySQL实例”。
重要的
确保每个服务器的数据目录对于启动特定mysqld进程的Unix账户是完全可访问的。不要为此使用Unix
root
账户,除非你 清楚 自己在做什么。请参阅 8.1.5节,“如何以普通用户身份运行MySQL”。 -
确保用于停止mysqld服务器(使用mysqladmin程序)的MySQL账户在每台服务器上具有相同的用户名和密码。另外,确保该账户具有
SHUTDOWN
权限。如果您要管理的服务器的管理账户具有不同的用户名或密码,您可能需要在每台服务器上创建一个具有相同用户名和密码的账户。例如,您可以通过为每台服务器执行以下命令来设置一个通用的multi_admin
账户:$> mysql -u root -S /tmp/mysql.sock -p Enter password: mysql> CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY 'multipass'; mysql> GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';
请参阅 8.2 节“访问控制和账户管理”。你必须针对每个 mysqld 服务器执行此操作。连接到每个服务器时,适当更改连接参数。请注意,账户名中的主机名部分必须允许你以
multi_admin
的身份从你要运行 mysqld_multi 的主机进行连接。 -
每个mysqld的Unix套接字文件和TCP/IP端口号必须不同。(或者,如果主机有多个网络地址,你可以设置
bind_address
系统变量,使不同的服务器监听不同的接口。) -
如果使用mysqld_safe 来启动mysqld(例如,
--mysqld=mysqld_safe
),--pid-file
选项非常重要。每个 mysqld 都应该有自己的进程ID文件。使用mysqld_safe 而非mysqld 的优势在于,mysqld_safe 会监控其mysqld 进程,若该进程因使用kill<br /> -9
发送的信号或其他原因(如段错误)而终止,它会重启该进程。 -
你可能想为
--user
使用--user选项,但要做到这一点,你需要以Unix超级用户(root
)身份运行mysqld_multi脚本。在选项文件中设置该选项并无大碍;如果你不是超级用户,而mysqld进程是在你自己的Unix账户下启动的,你只会收到一条警告。
以下示例展示了如何设置一个供 mysqld_multi 使用的选项文件。mysqld 程序启动或停止的顺序取决于它们在选项文件中出现的顺序。组编号不必形成连续的序列。在示例中,故意省略了第一个和第五个 [mysqldN]
组,以说明选项文件中可以存在 “间隔”。这为您提供了更大的灵活性。
# This is an example of a my.cnf file for mysqld_multi.
# Usually this file is located in home dir ~/.my.cnf or /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
password = my_password
[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/data2/hostname.pid2
datadir = /usr/local/mysql/data2
language = /usr/local/mysql/share/mysql/english
user = unix_user1
[mysqld3]
mysqld = /path/to/mysqld_safe
ledir = /path/to/mysqld-binary/
mysqladmin = /path/to/mysqladmin
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/data3/hostname.pid3
datadir = /usr/local/mysql/data3
language = /usr/local/mysql/share/mysql/swedish
user = unix_user2
[mysqld4]
socket = /tmp/mysql.sock4
port = 3309
pid-file = /usr/local/mysql/data4/hostname.pid4
datadir = /usr/local/mysql/data4
language = /usr/local/mysql/share/mysql/estonia
user = unix_user3
[mysqld6]
socket = /tmp/mysql.sock6
port = 3311
pid-file = /usr/local/mysql/data6/hostname.pid6
datadir = /usr/local/mysql/data6
language = /usr/local/mysql/share/mysql/japanese
user = unix_user4
请参阅 6.2.2.2 节“使用选项文件”。
6.4 与安装相关的程序
- 6.4.1 comp_err — 编译MySQL错误消息文件
- 6.4.2 mysql_secure_installation — 提高MySQL安装安全性
- 6.4.3 mysql_ssl_rsa_setup — 创建SSL/RSA文件
- 6.4.4 mysql_tzinfo_to_sql — 加载时区表
- 6.4.5 mysql_upgrade — 检查并升级MySQL表
本节中的程序用于安装或升级MySQL。
6.4.1 comp_err - 编译MySQL错误消息文件
comp_err 创建 errmsg.sys
文件,mysqld 使用该文件来确定针对不同错误代码要显示的错误消息。comp_err 通常在构建 MySQL 时自动运行。它根据 MySQL 源发行版中文本格式的错误信息编译 errmsg.sys
文件:
-
从MySQL 8.0.19开始,错误信息来自于
messages_to_error_log.txt
目录下的messages_to_clients.txt
和share
文件。有关定义错误消息的更多信息,请参阅这些文件中的注释以及
errmsg_readme.txt
文件。 -
在MySQL 8.0.19之前,错误信息来自
errmsg-utf8.txt
目录下的errmsg-utf8.txt文件。
comp_err 还会生成mysqld_error.h
、mysqld_ername.h
和 mysqld_errmsg.h
头文件。
像这样调用 comp_err:
comp_err [options]
comp_err 支持以下选项。
-
--help
,-?
命令行格式 --help
类型 布尔值 默认值 false
显示帮助信息并退出。
-
--charset=dir_name
,-C dir_name
命令行格式 --charset
类型 字符串 默认值 ../share/charsets
字符集目录。默认值为
../sql/share/charsets
。 -
--debug=debug_options
,-# debug_options
命令行格式 --debug=options
类型 字符串 默认值 d:t:O,/tmp/comp_err.trace
编写调试日志。典型的
debug_options
字符串为d:t:O,file_name
。默认值为d:t:O,/tmp/comp_err.trace
。 -
--debug-info
,-T
:程序退出时打印一些调试信息。命令行格式 --debug-info
类型 布尔值 默认值 false
程序退出时打印一些调试信息。
-
--errmsg-file=file_name
,-H file_name
命令行格式 --errmsg-file=name
类型 文件名 默认值 mysqld_errmsg.h
错误消息文件的名称。默认值为
mysqld_errmsg.h
。此选项在 MySQL 8.0.18 中添加。 -
--header-file=file_name
,-H file_name
命令行格式 --header-file=name
类型 文件名 默认值 mysqld_error.h
错误头文件的名称。默认值为
mysqld_error.h
。 -
--in-file=file_name
,-F file_name
命令行格式 --in-file=path
类型 文件名 默认值 [none]
输入文件的名称。默认值为
../share/errmsg-utf8.txt
。此选项在MySQL 8.0.19中已被移除,取而代之的是
--in-file-errlog
和--in-file-toclient
选项。 -
--in-file-errlog=file_name
,-e file_name
命令行格式 --in-file-errlog
类型 文件名 默认值 ../share/messages_to_error_log.txt
定义要写入错误日志的错误消息的输入文件名称。默认值为
../share/messages_to_error_log.txt
。此选项是在MySQL 8.0.19中添加的。
-
--in-file-toclient=file_name
,-c file_name
命令行格式 --in-file-toclient=path
类型 文件名 默认值 ../share/messages_to_clients.txt
定义要写入客户端的错误消息的输入文件名称。默认值为
../share/messages_to_clients.txt
。此选项是在MySQL 8.0.19中添加的。
-
--name-file=file_name
,-N file_name
命令行格式 --name-file=name
类型 文件名 默认值 mysqld_ername.h
错误名称文件的名称。默认值为
mysqld_ername.h
。 -
--out-dir=dir_name
,-D dir_name
命令行格式 --out-dir=path
类型 字符串 默认值 ../share/
输出基础目录的名称。默认值为
../sql/share/
。 -
--out-file=file_name
,-O file_name
命令行格式 --out-file=name
类型 文件名 默认值 errmsg.sys
输出文件的名称。默认值为
errmsg.sys
。 -
--version
,-V
--版本,-V命令行格式 --version
类型 布尔值 默认值 false
显示版本信息并退出。
6.4.2 mysql_secure_installation — 提升MySQL安装安全性
该程序可通过以下方式提升MySQL安装的安全性:
- 你可以为
root
账户设置密码。 - 你可以删除可从本地主机外部访问的
root
账户。 - 你可以删除匿名用户账户。
- 你可以删除
test
数据库(默认情况下,所有用户,甚至匿名用户都可以访问该数据库),以及允许任何人访问名称以test_
开头的数据库的权限。
mysql_secure_installation 有助于实施与2.9.4节“保护初始 MySQL 账户”中所述类似的安全建议。
正常用法是连接到本地MySQL服务器;不带参数调用mysql_secure_installation:
mysql_secure_installation
执行时,mysql_secure_installation 会提示您确定要执行哪些操作。
validate_password
组件可用于检查密码强度。如果未安装该插件,mysql_secure_installation 会提示用户是否安装。如果该插件已启用,则之后输入的任何密码都会使用该插件进行检查。
大多数常见的MySQL客户端选项,如--host
和--port
,既可以在命令行中使用,也可以在选项文件中使用。例如,要通过IPv6使用端口3307连接到本地服务器,可使用以下命令:
mysql_secure_installation --host=::1 --port=3307
mysql_secure_installation 支持以下选项,这些选项可以在命令行中指定,也可以在选项文件的 [mysql_secure_installation]
和 [client]
组中指定。有关 MySQL 程序使用的选项文件的信息,请参阅 6.2.2.2 节,“使用选项文件”。
表6.9 mysql_secure_installation选项
-
--help
,-?
显示帮助信息并退出。命令行格式 --help
显示帮助信息并退出。
-
--defaults-extra-file=*
file_name*
命令行格式 --defaults-extra-file=file_name
类型 文件名 在全局选项文件之后读取此选项文件,但(在Unix系统上)在用户选项文件之前读取。如果该文件不存在或以其他方式无法访问,则会发生错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录的路径。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-file=file_name
类型 文件名 仅使用给定的选项文件。如果该文件不存在或以其他方式无法访问,则会发生错误。如果
file_name
不是绝对路径名,则会相对于当前目录进行解释。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-group-suffix=str
类型 字符串 不仅读取常规的选项组,还读取具有常规名称且后缀为
str
的组。例如,mysql_secure_installation 通常会读取[client]
和[mysql_secure_installation]
组。如果将此选项指定为--defaults-group-suffix=_other
,mysql_secure_installation 还会读取[client_other]
和[mysql_secure_installation_other]
组。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
--host=host_name
,-h host_name
连接到指定主机上的 MySQL 服务器。 --host=host_name,-h host_name命令行格式 --host
连接到指定主机上的 MySQL 服务器。
-
命令行格式 --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
类型 字符串 默认值 [none]
此选项已被接受但将被忽略。无论是否使用此选项,mysql_secure_installation 始终会提示用户输入密码。
-
--port=port_num
,-P port_num
命令行格式 --port=port_num
类型 数字的 默认值 3306
对于TCP/IP连接,要使用的端口号。
-
命令行格式 --print-defaults
打印程序名称以及它从选项文件中获取的所有选项。
有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --protocol=type
类型 字符串 默认值 [see text]
有效值 TCP``SOCKET``PIPE``MEMORY
用于连接服务器的传输协议。当其他连接参数通常导致使用的协议并非您想要的协议时,此参数会很有用。有关允许值的详细信息,请参阅6.2.7节“连接传输协议”。
-
--socket=path
,-S path
| 命令行格式 |
--socket={file_name|pipe_name}
|
| :--------- | -------------------------------- |
| 类型 | 字符串 |对于与
localhost
的连接,需使用的Unix套接字文件,或者在Windows上,需使用的命名管道名称。在Windows系统上,只有在服务器启动时启用了
named_pipe
系统变量以支持命名管道连接的情况下,此选项才适用。此外,该连接必须是named_pipe_full_access_group
系统变量指定的Windows组的成员。 -
--ssl*
以
--ssl
开头的选项用于指定是否使用加密连接到服务器,并指明在何处查找SSL密钥和证书。请参阅 加密连接的命令选项。 -
| 命令行格式 |
--ssl-fips-mode={OFF|ON|STRICT}
|
| :--------- | --------------------------------- |
| 已弃用 | |
| 类型 | 枚举 |
| 默认值 |OFF
|
| 有效值 |OFF``ON``STRICT
|控制是否在客户端启用FIPS模式。
--ssl-fips-mode
选项与其他--ssl-xxx
选项的不同之处在于,它不是用于建立加密连接,而是用于影响允许哪些加密操作。请参阅 8.8节 “FIPS支持”。这些“--ssl-fips-mode”值是允许的:
- OFF:禁用FIPS模式。
ON
:启用 FIPS 模式。STRICT
:启用“严格”FIPS模式。
注意
如果OpenSSL FIPS对象模块不可用,则
--ssl-fips-mode
唯一允许的值为OFF
。在这种情况下,将--ssl-fips-mode
设置为ON
或STRICT
会导致客户端在启动时发出警告并以非FIPS模式运行。从MySQL 8.0.34开始,此选项已被弃用。预计它将在未来的MySQL版本中移除。
-
--tls-ciphersuites=*
ciphersuite_list*
命令行格式 --tls-ciphersuites=ciphersuite_list
引入时间 类型 字符串 使用TLSv1.3的加密连接所允许的密码套件。该值是一个或多个以冒号分隔的密码套件名称的列表。此选项可指定的密码套件取决于编译MySQL时使用的SSL库。详情请参见第8.3.2节“加密连接TLS协议和密码”。
此选项在MySQL 8.0.16中添加。
-
命令行格式 --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-default
类型 布尔值 以非交互方式执行。此选项可用于无人参与的安装操作。
-
--user=user_name
,-u user_name
命令行格式 --user=user_name
类型 字符串 用于连接服务器的MySQL账户的用户名。
6.4.3 mysql_ssl_rsa_setup — 创建SSL/RSA文件
注意
自MySQL 8.0.34起,mysql_ssl_rsa_setup已被弃用。相反,可以考虑在启动时使用MySQL服务器自动生成缺失的SSL和RSA文件(请参阅自动生成SSL和RSA文件)。
此程序用于创建支持使用SSL的安全连接以及在未加密连接上使用RSA进行安全密码交换所需的SSL证书、密钥文件和RSA密钥对文件(前提是这些文件缺失)。如果现有SSL文件已过期,mysql_ssl_rsa_setup 也可用于创建新的SSL文件。
注意
mysql_ssl_rsa_setup 使用openssl 命令,因此其使用取决于您的计算机上是否安装了OpenSSL。
对于使用OpenSSL编译的MySQL发行版,另一种生成SSL和RSA文件的方法是让服务器自动生成它们。请参阅8.3.3.1节,“使用MySQL创建SSL和RSA证书及密钥”。
重要的
mysql_ssl_rsa_setup 通过简化生成所需文件的流程,降低了使用SSL的门槛。然而,由 mysql_ssl_rsa_setup 生成的证书是自签名的,安全性欠佳。在积累了使用 mysql_ssl_rsa_setup 创建的文件的经验后,可考虑从注册证书颁发机构获取CA证书。
像这样调用 mysql_ssl_rsa_setup:
mysql_ssl_rsa_setup [options]
典型的选项有--datadir
,用于指定在何处创建文件;以及--verbose
,用于查看mysql_ssl_rsa_setup执行的openssl命令。
mysql_ssl_rsa_setup 尝试使用一组默认文件名创建SSL和RSA文件。其工作原理如下:
-
mysql_ssl_rsa_setup 会在
PATH
环境变量指定的位置检查 openssl 二进制文件。如果未找到 openssl,mysql_ssl_rsa_setup 将不执行任何操作。如果存在 openssl,mysql_ssl_rsa_setup 会在--datadir
选项指定的 MySQL 数据目录中查找默认的 SSL 和 RSA 文件,如果未给出--datadir
选项,则会在编译时指定的数据目录中查找。 -
mysql_ssl_rsa_setup 会检查数据目录中是否存在以下名称的SSL文件:
ca.pem server-cert.pem server-key.pem
-
如果存在这些文件中的任何一个,mysql_ssl_rsa_setup 都不会创建SSL文件。否则,它会调用 openssl 来创建这些文件以及一些其他文件:
ca.pem Self-signed CA certificate ca-key.pem CA private key server-cert.pem Server certificate server-key.pem Server private key client-cert.pem Client certificate client-key.pem Client private key
这些文件支持使用SSL进行安全的客户端连接;请参阅8.3.1节“配置MySQL以使用加密连接”。
-
mysql_ssl_rsa_setup 会检查数据目录中是否存在以下名称的RSA文件:
private_key.pem Private member of private/public key pair public_key.pem Public member of private/public key pair
-
如果这些文件中有任何一个已存在,mysql_ssl_rsa_setup 将不会创建RSA文件。否则,它会调用 openssl 来创建这些文件。这些文件支持通过RSA在未加密连接上,为使用
sha256_password
或caching_sha2_password
插件进行身份验证的账户实现安全的密码交换;请参阅 8.4.1.3节,“SHA-256可插拔身份验证” 以及 8.4.1.2节,“缓存SHA-2可插拔身份验证”。
有关由mysql_ssl_rsa_setup创建的文件的特性的信息,请参阅8.3.3.1节,“使用MySQL创建SSL和RSA证书及密钥”。
在启动时,如果除了 --ssl(可能还有 ssl_cipher)之外没有给出明确的SSL选项,MySQL服务器会自动使用由 mysql_ssl_rsa_setup 创建的SSL文件来启用SSL。如果您更倾向于显式指定这些文件,可在启动时使用 --ssl-ca、--ssl-cert 和 --ssl-key 选项调用客户端,分别指定 ca.pem
、server-cert.pem
和 server-key.pem
文件。
如果未给出明确的RSA选项,服务器还会自动使用由mysql_ssl_rsa_setup创建的RSA文件来启用RSA。
如果服务器启用了SSL,客户端默认使用SSL进行连接。要显式指定证书和密钥文件,请使用 --ssl-ca
、--ssl-cert
和 --ssl-key
选项分别指定 ca.pem
、client-cert.pem
和 client-key.pem
文件。但是,可能首先需要进行一些额外的客户端设置,因为默认情况下 mysql_ssl_rsa_setup 会在数据目录中创建这些文件。数据目录的权限通常只允许运行MySQL服务器的系统账户进行访问,因此客户端程序无法使用位于该目录中的文件。要使这些文件可用,请将它们复制到客户端可读(但 不可写)的目录中:
-
对于本地客户端,可以使用MySQL的安装目录。例如,如果数据目录是安装目录的子目录,并且您当前所在位置就是数据目录,那么可以按如下方式复制文件:
cp ca.pem client-cert.pem client-key.pem ..
-
对于远程客户端,使用安全通道分发文件,以确保文件在传输过程中不被篡改。
如果用于MySQL安装的SSL文件已过期,可以使用 mysql_ssl_rsa_setup 创建新文件:
- 停止服务器。
- 重命名或删除现有的SSL文件。你可能希望先对它们进行备份。(RSA文件不会过期,所以无需删除。mysql_ssl_rsa_setup 能够识别它们的存在,不会覆盖它们。)
- 使用
--datadir
选项运行mysql_ssl_rsa_setup,以指定在何处创建新文件。 - 重启服务器。
mysql_ssl_rsa_setup 支持以下命令行选项,这些选项可以在命令行中指定,也可以在选项文件的 [mysql_ssl_rsa_setup]
和 [mysqld]
组中指定。有关 MySQL 程序使用的选项文件的信息,请参阅 6.2.2.2 节,“使用选项文件”。
表6.10 mysql_ssl_rsa_setup选项
选项名称 | 描述 |
---|---|
--数据目录 | 数据目录路径 |
--帮助 | 显示帮助信息并退出 |
--后缀 | X.509证书通用名称属性的后缀 |
--uid 用于文件权限的有效用户名 | 用于文件权限的有效用户名 |
--罗嗦 | 详细模式 |
--版本 | 显示版本信息并退出 |
-
--help
,?
命令行格式 --help
显示帮助信息并退出。
-
命令行格式 --datadir=dir_name
类型 目录名称 mysql_ssl_rsa_setup
应检查默认SSL和RSA文件的目录路径,并且如果缺少这些文件,它应在该目录中创建文件。默认路径是编译时指定的数据目录。 -
命令行格式 --suffix=str
类型 字符串 X.509证书中公用名属性的后缀。后缀值限制为17个字符。默认值基于MySQL版本号。
-
--uid=name
,-v
命令行格式 --uid=name
应成为任何创建文件所有者的用户名。该值是用户名,而非数字用户 ID。如果没有此选项,由 mysql_ssl_rsa_setup 创建的文件将归执行该程序的用户所有。仅当在支持
chown()
系统调用的系统上以root
身份执行该程序时,此选项才有效。 -
--verbose
,-v
命令行格式 --verbose
详细模式。生成更多关于程序操作的输出信息。例如,程序会显示其运行的openssl命令,并生成输出以表明是否因为某些默认文件已存在而跳过SSL或RSA文件的创建。
-
--version
,-V
命令行格式 --version
显示版本信息并退出。
6.4.4 mysql_tzinfo_to_sql — 加载时区表
mysql_tzinfo_to_sql
程序用于加载 mysql
数据库中的时区表。它用于拥有时区信息数据库(描述时区的一组文件)的系统。这类系统的示例包括 Linux、FreeBSD、Solaris 和 macOS。这些文件可能位于 /usr/share/zoneinfo
目录(Solaris 上为 /usr/share/lib/zoneinfo
)。如果你的系统没有时区信息数据库,可以使用 7.1.15 节“MySQL 服务器时区支持”中所述的可下载软件包。
mysql_tzinfo_to_sql
可以通过多种方式调用:
mysql_tzinfo_to_sql tz_dir
mysql_tzinfo_to_sql tz_file tz_name
mysql_tzinfo_to_sql --leap tz_file
对于第一种调用语法,将时区信息目录路径名称传递给 mysql_tzinfo_to_sql 并将输出发送到 mysql 程序中。例如:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
mysql_tzinfo_to_sql 读取系统的时区文件并从中生成SQL语句。mysql 处理这些语句以加载时区表。
第二种语法会使 mysql_tzinfo_to_sql 加载与时区名称 tz_name
对应的单个时区文件 tz_file
:
mysql_tzinfo_to_sql tz_file tz_name | mysql -u root mysql
如果您的时区需要考虑闰秒,请使用第三种语法调用mysql_tzinfo_to_sql,该语法会初始化闰秒信息。tz_file
是您的时区文件的名称:
mysql_tzinfo_to_sql --leap tz_file | mysql -u root mysql
运行 mysql_tzinfo_to_sql 后,最好重启服务器,以免它继续使用之前缓存的任何时区数据。
6.4.5 mysql_upgrade — 检查并升级MySQL表
注意
从 MySQL 8.0.16 开始,MySQL 服务器会执行以前由 mysql_upgrade 处理的升级任务(详细信息,请参阅 3.4 节,“MySQL 升级过程升级的内容”)。因此,从该版本开始,mysql_upgrade 不再需要,已被弃用;预计它将在 MySQL 的未来版本中移除。由于 mysql_upgrade 不再执行升级任务,它将无条件以状态 0 退出。
每次升级MySQL时,都应执行mysql_upgrade,该工具会查找与升级后的MySQL服务器不兼容的地方:
- 它会升级
mysql
模式中的系统表,以便你能够利用可能新增的权限或功能。 - 它会升级性能架构、
INFORMATION_SCHEMA
以及sys
架构。 - 它检查用户模式。
如果 mysql_upgrade 发现某个表可能存在不兼容问题,它会执行表检查,如果发现问题,则尝试修复表。如果表无法修复,请参阅 3.14节,“重建或修复表或索引” 了解手动表修复策略。
mysql_upgrade 直接与 MySQL 服务器通信,向其发送执行升级所需的 SQL 语句。
注意
在执行升级之前,您应该始终备份当前的MySQL安装。请参阅第9.2节“数据库备份方法”。
在升级MySQL安装并运行 mysql_upgrade 之前,某些升级不兼容性可能需要特殊处理。有关如何确定您的安装是否存在此类不兼容性以及如何处理它们的说明,请参阅第3章“升级MySQL”。
像这样使用 mysql_upgrade:
-
确保服务器正在运行。
-
调用 mysql_upgrade 来升级
mysql
模式中的系统表,并检查和修复其他模式中的表:mysql_upgrade [options]
-
停止服务器并重新启动,以便系统表的任何更改生效。
如果您有多个MySQL服务器实例需要升级,请使用适合连接到每个所需服务器的连接参数调用 mysql_upgrade。例如,对于在本地主机上端口3306到3308上运行的服务器,通过连接到相应端口来升级每个服务器:
mysql_upgrade --protocol=tcp -P 3306 [other_options]
mysql_upgrade --protocol=tcp -P 3307 [other_options]
mysql_upgrade --protocol=tcp -P 3308 [other_options]
对于Unix上的本地主机连接,--protocol=tcp
选项强制使用TCP/IP而非Unix套接字文件进行连接。
默认情况下,mysql_upgrade 以 MySQLroot
用户身份运行。如果在运行mysql_upgrade 时 root
密码已过期,它会显示一条消息,提示您的密码已过期,因此 mysql_upgrade 失败。要解决此问题,请重置 root
密码以使其不过期,然后再次运行 mysql_upgrade。首先,以 root
身份连接到服务器:
$> mysql -u root -p
Enter password: **** <- enter root password here
使用ALTER USER
重置密码:
mysql> ALTER USER USER() IDENTIFIED BY 'root-password';
然后退出 mysql 并再次运行 mysql_upgrade:
$> mysql_upgrade [options]
注意
如果使用设置为禁用某些存储引擎(例如MyISAM
)的disabled_storage_engines
系统变量来运行服务器,mysql_upgrade可能会因类似如下的错误而失败:
mysql_upgrade: [ERROR] 3161: Storage engine MyISAM is disabled
(Table creation is disallowed).
要解决此问题,请在禁用disabled_storage_engines
的情况下重启服务器。然后,你应该能够成功运行mysql_upgrade。之后,将disabled_storage_engines
设置为其原始值,再重启服务器。
除非使用--upgrade-system-tables
选项调用,否则mysql_upgrade会根据需要处理所有用户模式中的所有表。表检查可能需要很长时间才能完成。在处理表时,每个表都会被锁定,因此其他会话无法访问。检查和修复操作可能很耗时,尤其是对于大型表。表检查使用CHECK TABLE
语句的FOR UPGRADE
选项。有关此选项的详细信息,请参阅第15.7.3.2节,“CHECK TABLE语句”。
mysql_upgrade 会使用当前 MySQL 版本号标记所有已检查和修复的表。这确保了下次使用同一版本的服务器运行 mysql_upgrade 时,可以确定是否有必要再次检查或修复给定的表。
mysql_upgrade 会将 MySQL 版本号保存在数据目录中名为 mysql_upgrade_info
的文件中。这用于快速检查此版本的所有表是否都已检查,以便可以跳过表检查。要忽略此文件并无论如何都执行检查,请使用 --force
选项。
注意
mysql_upgrade_info
文件已过时,预计在未来的MySQL版本中将被移除。
mysql_upgrade 会检查mysql.user
系统表中的行,对于任何 plugin
列值为空的行,如果其凭证使用的哈希格式与该插件兼容,则将该列设置为 'mysql_native_password'
。使用 4.1 之前版本密码哈希的行必须手动升级。
mysql_upgrade
不会升级时区表或帮助表的内容。有关升级说明,请参见7.1.15节,“MySQL服务器时区支持”和7.1.17节,“服务器端帮助支持”。
除非使用--skip-sys-schema
选项调用,否则如果sys
模式未安装,mysql_upgrade 会安装它,否则将其升级到当前版本。如果存在sys
模式但没有version
视图,则会发生错误,因为假设缺少该视图表明这是用户创建的模式:
A sys schema exists with no sys.version view. If
you have a user created sys schema, this must be renamed for the
upgrade to succeed.
在这种情况下,若要升级,请先删除或重命名现有的sys
模式。
mysql_upgrade 支持以下选项,可以在命令行中指定,也可以在选项文件的[mysql_upgrade]
和[client]
组中指定。有关 MySQL 程序使用的选项文件的信息,请参见6.2.2.2节,“使用选项文件”。
表6.11 mysql_upgrade选项
-
命令行格式 --help
显示一条简短的帮助信息并退出。
-
命令行格式 --bind-address=ip_address
在具有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口。
-
--character-sets-dir=*
dir_name*
命令行格式 --character-sets-dir=dir_name
类型 目录名称 安装字符集的目录。请参阅12.15节,“字符集配置”。
-
--compress
,-C
| 命令行格式 |
--compress[={OFF|ON}]
|
| :--------- | ----------------------- |
| 已弃用 | |
| 类型 | 布尔值 |
| 默认值 |OFF
|如果可能,压缩客户端与服务器之间发送的所有信息。请参阅6.2.8节“连接压缩控制”。
从 MySQL 8.0.18 版本开始,该选项已弃用。预计它将在未来的 MySQL 版本中移除。请参阅配置旧版连接压缩。
-
--compression-algorithms=*
value*
命令行格式 --compression-algorithms=value
引入时间 类型 设置 默认值 uncompressed
有效取值 zlib``zstd``uncompressed
与服务器建立连接时允许使用的压缩算法。可用算法与系统变量
protocol_compression_algorithms
中的相同。默认值为uncompressed
。如需更多信息,请参阅6.2.8节,“连接压缩控制”。
此选项是在MySQL 8.0.18中添加的。
-
--debug[=debug_options\]
,-#<br /> [debug_options]
命令行格式 --debug[=#]
类型 字符串 默认值 d:t:O,/tmp/mysql_upgrade.trace
编写调试日志。典型的
debug_options
字符串为d:t:o,file_name
。默认值为d:t:O,/tmp/mysql_upgrade.trace
。 -
命令行格式 --debug-check
类型 布尔值 程序退出时打印一些调试信息。
-
--debug-info
,-T
命令行格式 --debug-info
类型 布尔值 默认值 FALSE
程序退出时,打印调试信息以及内存和CPU使用情况统计数据。
-
命令行格式 --default-auth=plugin
类型 字符串 关于使用哪个客户端身份验证插件的提示。请参阅8.2.17节“可插拔身份验证”。
-
--default-character-set=*
charset_name*
命令行格式 --default-character-set=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
类型 文件名 仅使用给定的选项文件。如果该文件不存在或以其他方式无法访问,则会发生错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录的路径。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-group-suffix=str
类型 字符串 不仅读取常规的选项组,还读取具有常规名称且后缀为
str
的组。例如,mysql_upgrade 通常读取[client]
和[mysql_upgrade]
组。如果此选项设置为--defaults-group-suffix=_other
,mysql_upgrade 还会读取[client_other]
和[mysql_upgrade_other]
组。有关此选项和其他选项文件选项的更多信息,请参阅 6.2.2.3 节“影响选项文件处理的命令行选项”。
-
命令行格式 --force
类型 布尔值 忽略
mysql_upgrade_info
文件,即使mysql_upgrade已针对当前版本的MySQL执行过,仍强制执行。 -
命令行格式 --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=name
类型 字符串 连接到给定主机上的 MySQL 服务器。
-
命令行格式 --login-path=name
类型 字符串 从
.mylogin.cnf
登录路径文件中指定的登录路径读取选项。“登录路径”是一个选项组,其中包含指定要连接到哪个MySQL服务器以及使用哪个账户进行身份验证的选项。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参阅6.6.7节,“mysql_config_editor - MySQL配置实用程序”。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --max-allowed-packet=value
类型 整数 默认值 25165824
最小值 4096
最大值 2147483648
客户端/服务器通信缓冲区的最大大小。默认值为24MB。最小值和最大值分别为4KB和2GB。
-
命令行格式 --net-buffer-length=value
类型 整数 默认值 1047552
最小值 4096
最大值 16777216
客户端/服务器通信缓冲区的初始大小。默认值为1MB - 1KB。最小值和最大值分别为4KB和16MB。
-
命令行格式 --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]
--密码[=密码],-p[密码]命令行格式 --password[=name]
类型 字符串 用于连接服务器的MySQL账户的密码。密码值是可选的。如果未提供,mysql_upgrade 会提示输入密码。如果提供了密码,在
--password=
或-p
与随后的密码之间不得有空格。如果未指定密码选项,默认不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中提供密码,请使用选项文件。请参阅8.1.2.1节,“密码安全的最终用户指南”。
要明确指定没有密码,且mysql_upgrade不应提示输入密码,请使用
--skip-password
选项。 -
--pipe
,-W
</b0--使用管道连接,-W命令行格式 --pipe
类型 字符串 在Windows上,使用命名管道连接到服务器。仅当服务器在启用了
named_pipe
系统变量以支持命名管道连接的情况下启动时,此选项才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的Windows组的成员。 -
--plugin-dir=*
dir_name* 插件目录=目录名称
命令行格式 --plugin-dir=dir_name
类型 目录名称 用于查找插件的目录。如果使用
--default-auth
选项指定身份验证插件,但mysql_upgrade找不到该插件,请指定此选项。请参阅8.2.17节,“可插拔身份验证”。 -
--port=port_num
,-P port_num
命令行格式 --port=#
类型 数值 对于TCP/IP连接,要使用的端口号。
-
命令行格式 --print-defaults
打印程序名称以及它从选项文件中获取的所有选项。
-
命令行格式 --protocol=name
类型 字符串 用于连接服务器的传输协议。当其他连接参数通常导致使用的协议并非您想要的协议时,此参数很有用。有关允许值的详细信息,请参阅6.2.7节“连接传输协议”。
-
--server-public-key-path=*
file_name*
命令行格式 --server-public-key-path=file_name
类型 文件名 包含服务器基于RSA密钥对的密码交换所需公钥的客户端副本的PEM格式文件的路径名。此选项适用于使用
sha256_password
或caching_sha2_password
身份验证插件进行身份验证的客户端。对于不使用这些插件之一进行身份验证的账户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。如果指定了
--server-public-key-path=file_name
且该选项指定了一个有效的公钥文件,则它优先于--get-server-public-key
。对于
sha256_password
,只有在使用OpenSSL构建MySQL时,此选项才适用。有关
sha256_password
和caching_sha2_password
插件的信息,请参阅 8.4.1.3 节“SHA-256 可插拔身份验证” 以及 8.4.1.2 节“缓存 SHA-2 可插拔身份验证”。 -
命令行格式 --shared-memory-base-name=name
特定平台 Windows操作系统 在Windows上,通过共享内存连接到本地服务器时使用的共享内存名称。默认值为
MYSQL
。共享内存名称区分大小写。此选项仅在服务器启动时启用了
shared_memory
系统变量以支持共享内存连接的情况下才适用。 -
命令行格式 --skip-sys-schema
类型 布尔值 默认值 FALSE
默认情况下,如果尚未安装sys模式,mysql_upgrade 会安装它,否则将其升级到当前版本。
--skip-sys-schema
选项可禁止此行为。 -
--socket=path
,-S path
(对于连接到 localhost 时,使用的 Unix 套接字文件,或者在 Windows 上,使用的命名管道名称。) --socket=路径,-S 路径| 命令行格式 |
--socket={file_name|pipe_name}
|
| :--------- | -------------------------------- |
| 类型 | 字符串 |对于与
localhost
的连接,要使用的Unix套接字文件,或者在Windows上,要使用的命名管道的名称。在Windows系统上,只有在服务器启动时启用了
named_pipe
系统变量以支持命名管道连接的情况下,此选项才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的Windows组的成员。 -
--ssl*
以
--ssl
开头的选项用于指定是否使用加密连接到服务器,并指明在何处查找SSL密钥和证书。请参阅 加密连接的命令选项。 -
| 命令行格式 |
--ssl-fips-mode={OFF|ON|STRICT}
|
| :--------- | --------------------------------- |
| 已弃用 | |
| 类型 | 枚举 |
| 默认值 |OFF
|
| 有效值 |OFF``ON``STRICT
|控制是否在客户端启用FIPS模式。
--ssl-fips-mode
选项与其他--ssl-xxx
选项的不同之处在于,它并非用于建立加密连接,而是用于影响允许哪些加密操作。请参阅8.8节“FIPS支持”。这些
--ssl-fips-mode
值是允许的:OFF
:禁用FIPS模式。- 开启:启用FIPS模式。
- STRICT:启用“严格”FIPS 模式。
注意
如果OpenSSL FIPS对象模块不可用,
--ssl-fips-mode
唯一允许的值是OFF
。在这种情况下,将--ssl-fips-mode
设置为ON
或STRICT
会导致客户端在启动时发出警告并以非FIPS模式运行。从 MySQL 8.0.34 开始,此选项已弃用。预计它将在未来的 MySQL 版本中移除。
-
--tls-ciphersuites=*
ciphersuite_list*
命令行格式 --tls-ciphersuites=ciphersuite_list
引入 类型 字符串 使用TLSv1.3进行加密连接时允许使用的密码套件。该值是一个或多个以冒号分隔的密码套件名称列表。此选项可指定的密码套件取决于编译MySQL时使用的SSL库。详情请参阅第8.3.2节“加密连接TLS协议和密码”。
此选项是在MySQL 8.0.16中添加的。
-
命令行格式 --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协议和密码”。
-
--upgrade-system-tables
,-s
(--升级系统表,-s)命令行格式 --upgrade-system-tables
类型 布尔值 仅升级
mysql
模式中的系统表,不升级用户模式。 -
--user=user_name
,-u user_name
命令行格式 --user=name
类型 字符串 用于连接服务器的MySQL账户的用户名。默认用户名是
root
。 -
命令行格式 --verbose
类型 布尔值 详细模式。打印更多关于程序执行情况的信息。
-
命令行格式 --version-check
类型 布尔值 检查mysql_upgrade所连接的服务器版本,以验证它与构建mysql_upgrade时所用的版本相同。如果不同,mysql_upgrade将退出。此选项默认启用;若要禁用此检查,请使用
--skip-version-check
。 -
命令行格式 --write-binlog
类型 布尔值 默认值 OFF
默认情况下,mysql_upgrade的二进制日志记录功能是禁用的。如果你希望将其操作写入二进制日志,请使用
--write-binlog
参数调用该程序。当服务器在启用全局事务标识符 (GTID)(
gtid_mode=ON
)的情况下运行时,请勿通过 mysql_upgrade 启用二进制日志记录。 -
命令行格式 --zstd-compression-level=#
引入的 类型 整数 用于与服务器的连接且使用
zstd
压缩算法时要使用的压缩级别。允许的级别范围是从1到22,值越大表示压缩程度越高。默认的zstd
压缩级别为3。压缩级别设置对不使用zstd
压缩的连接没有影响。如需更多信息,请参阅6.2.8节,“连接压缩控制”。
此选项是在MySQL 8.0.18中添加的。
6.5 客户端程序
- 6.5.1 mysql - MySQL命令行客户端
- 6.5.2 mysqladmin — MySQL服务器管理程序
- 6.5.3 mysqlcheck - 表维护程序
- 6.5.4 mysqldump——数据库备份程序
- 6.5.5 mysqlimport — 数据导入程序
- 6.5.6 mysqlpump — 一种数据库备份程序
- 6.5.7 mysqlshow — 显示数据库、表和列信息
- 6.5.8 mysqlslap — 负载模拟客户端
本节介绍连接到MySQL服务器的客户端程序。
6.5.1 mysql——MySQL命令行客户端
- 6.5.1.1 mysql客户端选项
- 6.5.1.2 mysql客户端命令
- 6.5.1.3 mysql客户端日志记录
- 6.5.1.4 mysql客户端服务器端帮助
- 6.5.1.5 从文本文件执行SQL语句
- 6.5.1.6 mysql客户端提示
mysql 是一个简单的SQL shell,具有输入行编辑功能。它支持交互式和非交互式使用。在交互式使用时,查询结果以ASCII表格格式呈现。在非交互式使用时(例如作为过滤器),结果以制表符分隔格式呈现。可以使用命令选项更改输出格式。
如果由于大型结果集的内存不足而出现问题,请使用 --quick
选项。这会强制 mysql 一次从服务器检索一行结果,而不是检索整个结果集并在显示之前将其缓冲在内存中。这是通过在客户端/服务器库中使用 mysql_use_result()
C API 函数返回结果集来实现的,而不是使用 mysql_store_result()
。
注意
或者,MySQL Shell 提供对 X DevAPI 的访问。有关详细信息,请参阅《MySQL Shell 8.0》。
使用 mysql 非常简单。在命令解释器的提示符下按如下方式调用它:
mysql db_name
或者:
mysql --user=user_name --password db_name
在这种情况下,您需要根据mysql显示的提示输入密码:
Enter password: your_password
然后输入一条SQL语句,以;
、\g
或\G
结尾,然后按回车键。
如果当前有语句正在执行,按下 Control+C 可中断该语句;否则,它将取消任何部分输入行。
你可以像这样在脚本文件(批处理文件)中执行SQL语句:
mysql db_name < script.sql > output.tab
在Unix系统上,mysql客户端会将交互式执行的语句记录到一个历史文件中。请参阅6.5.1.3节,“mysql客户端日志记录”。
6.5.1.1 mysql客户端选项
mysql 支持以下选项,这些选项可以在命令行中指定,也可以在选项文件的 [mysql]
和 [client]
组中指定。有关 MySQL 程序使用的选项文件的信息,请参阅 6.2.2.2 节,“使用选项文件”。
表6.12 mysql客户端选项
-
--help
,-?
命令行格式 --help
显示帮助信息并退出。
-
命令行格式 --auto-rehash
禁用者 skip-auto-rehash
启用自动重新哈希。此选项默认开启,可实现数据库、表和列名补全。使用
--disable-auto-rehash
禁用重新哈希。这会使 mysql 启动更快,但如果要使用名称补全功能,则必须发出rehash
命令或其\#
快捷方式。要完成一个名称,输入名称的第一部分并按Tab键。如果名称没有歧义,mysql 会补全它。否则,你可以再次按Tab键,查看以你目前输入内容开头的可能名称。如果没有默认数据库,则不会出现补全。
注意
此功能需要一个使用 readline 库编译的MySQL客户端。通常,Windows上没有 readline 库。
-
命令行格式 --auto-vertical-output
如果结果集对于当前窗口过宽,则以垂直方式显示;否则,使用普通表格格式。(这适用于以
;
或\G
终止的语句。) -
--batch
,-B
(注:这里原内容是代码相关的特定标识等,直接保留原文更合适,按指令要求未做实质翻译处理)命令行格式 --batch
使用制表符作为列分隔符打印结果,每行输出在新的一行。使用此选项时,mysql 不使用历史记录文件。
批处理模式会生成非表格形式的输出格式,并对特殊字符进行转义。可通过使用原始模式禁用转义;请参阅
--raw
选项的说明。 -
命令行格式 --binary-as-hex
类型 布尔值 默认值(≥ 8.0.19) FALSE in noninteractive mode
默认值(≤ 8.0.18) FALSE
当给出此选项时,mysql 使用十六进制表示法(
0xvalue
)显示二进制数据。无论整体输出显示格式是表格、纵向、HTML 还是 XML,都会出现这种情况。启用时,"""
--binary-as-hex
会影响所有二进制字符串的显示,包括诸如CHAR()
和UNHEX()
等函数返回的二进制字符串。以下示例使用字符A
的ASCII码(十进制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 字符集子句:
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
此选项在处理可能包含二进制大对象(BLOB)值的mysqlbinlog输出时很有用。默认情况下,mysql会将语句字符串中的
\r\n
转换为\n
,并将\0
解释为语句终止符。--binary-mode
会禁用这两个特性。它还会在非交互模式下(对于通过管道输入到mysql或使用source
命令加载的输入)禁用除charset
和delimiter
之外的所有mysql命令。(MySQL 8.0.43及更高版本:)
--binary-mode
启用后,会使服务器忽略--commands
的任何设置。 -
命令行格式 --bind-address=ip_address
在拥有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口。
-
--character-sets-dir=*
dir_name*
命令行格式 --character-sets-dir=dir_name
类型 目录名称 安装字符集的目录。请参阅第12.15节“字符集配置”。
-
命令行格式 --column-names
在结果中写入列名。
-
命令行格式 --column-type-info
显示结果集元数据。此信息对应于C API
MYSQL_FIELD
数据结构的内容。请参阅 C API基本数据结构。 -
--commands 启用或禁用本地mysql客户端命令的处理
命令行格式 --commands
引入版本 类型 布尔值 默认值 TRUE
是否启用或禁用对本地mysql客户端命令的处理。将此选项设置为
FALSE
会禁用此类处理,并产生以下效果:- 以下mysql客户端命令被禁用:
charset
(/C
保持启用状态)clear
connect
edit
ego
exit
go
help
nopager
notee
nowarning
pager
print
prompt
query_attributes
quit
rehash
resetconnection
ssl_session_data_print
source
status
system
tee
\u
(use
传递到服务器)warnings
\C
和delimiter
命令仍然启用。- “--system-command”选项将被忽略,不会产生任何效果。
启用
--binary-mode
时,此选项无效。当
--commands
启用时,可以使用--system-command
选项禁用(仅)系统命令。此选项是在 MySQL 8.0.43 中添加的。
- 以下mysql客户端命令被禁用:
-
--comments
,-c
命令行格式 --comments
类型 布尔值 默认值 FALSE
发送到服务器的语句中,是否去除或保留注释。默认值为
--skip-comments
(去除注释),使用--comments
可启用(保留注释)。注意
无论是否给出此选项,mysql 客户端始终会将优化器提示传递给服务器。
注释剥离已被弃用。预计此功能及控制它的选项将在未来的MySQL版本中移除。
-
--compress
,-C
| 命令行格式 |
--compress[={OFF|ON}]
|
| :--------- | ----------------------- |
| 已弃用 | |
| 类型 | 布尔值 |
| 默认值 |OFF
|如果可能,压缩客户端与服务器之间发送的所有信息。请参阅第6.2.8节 “连接压缩控制”。
从 MySQL 8.0.18 起,此选项已弃用。预计它将在未来的 MySQL 版本中移除。请参阅配置旧版连接压缩。
-
--compression-algorithms=*
value*
命令行格式 --compression-algorithms=value
引入版本 类型 设置 默认值 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
类型 数值的 默认值 0
连接超时前的秒数。(默认值为
0
。) -
--database=db_name
,-D db_name
命令行格式 --database=dbname
类型 字符串 要使用的数据库。这主要在选项文件中有用。
-
--debug[=debug_options\]
,-#<br /> [debug_options]
命令行格式 --debug[=debug_options]
类型 字符串 默认值 d:t:o,/tmp/mysql.trace
编写一条调试日志。典型的
debug_options
字符串为d:t:o,file_name
。默认值为d:t:o,/tmp/mysql.trace
。此选项仅在MySQL是使用
WITH_DEBUG
构建时可用。Oracle提供的MySQL发行版二进制文件并非使用此选项构建。 -
命令行格式 --debug-check
类型 布尔值 默认值 FALSE
程序退出时打印一些调试信息。
此选项仅在使用
WITH_DEBUG
构建MySQL时可用。Oracle提供的MySQL发行版二进制文件并非使用此选项构建。 -
--debug-info
,-T
命令行格式 --debug-info
类型 布尔值 默认值 FALSE
程序退出时打印调试信息以及内存和CPU使用情况统计信息。
只有在使用
WITH_DEBUG
编译MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件未使用此选项进行编译。 -
命令行格式 --default-auth=plugin
类型 字符串 关于使用哪个客户端身份验证插件的提示。请参阅8.2.17节,“可插拔身份验证”。
-
--default-character-set=*
charset_name*:指定charset_name作为客户端和连接的默认字符集。
命令行格式 --default-character-set=charset_name
类型 字符串 将
charset_name
用作客户端和连接的默认字符集。如果操作系统使用一种字符集,而默认情况下 mysql 客户端使用另一种字符集,此选项可能会很有用。在这种情况下,输出的格式可能不正确。通常,你可以使用此选项强制客户端改用系统字符集来解决此类问题。
有关更多信息,请参阅第12.4节,“连接字符集和排序规则”以及第12.15节,“字符集配置”。
-
命令行格式 --defaults-extra-file=file_name
类型 文件名 在全局选项文件之后但(在Unix系统上)在用户选项文件之前读取此选项文件。如果该文件不存在或以其他方式无法访问,则会出现错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录的路径。有关此选项及其他选项文件选项的更多信息,请参阅 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-file=file_name
类型 文件名 仅使用给定的选项文件。如果该文件不存在或以其他方式无法访问,则会出现错误。如果
file_name
不是绝对路径名,则会相对于当前目录进行解释。异常:即使使用
--defaults-file
,客户端程序仍会读取.mylogin.cnf
。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-group-suffix=str
类型 字符串 不仅读取常规的选项组,还读取具有常规名称且后缀为
str
的组。例如,mysql通常读取[client]
和[mysql]
组。如果此选项设为--defaults-group-suffix=_other
,mysql还会读取[client_other]
和[mysql_other]
组。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节,“影响选项文件处理的命令行选项”。
-
命令行格式 --delimiter=str
类型 字符串 默认值 ;
设置语句分隔符。默认值为分号字符(
;
)。 -
禁用命名命令。仅使用
\*
形式,或者仅在以分号 (;
) 结尾的行首使用命名命令。mysql 默认启用此选项。但是,即使使用此选项,长格式命令仍可从第一行开始生效。请参阅 6.5.1.2 节,“mysql 客户端命令”。 -
命令行格式 --dns-srv-name=name
引入版本 类型 字符串 指定一个DNS SRV记录的名称,该记录确定用于建立与MySQL服务器连接的候选主机。有关MySQL中DNS SRV支持的信息,请参阅 6.2.6节,“使用DNS SRV记录连接到服务器”。
假设为
example.com
域名的DNS配置了以下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选项优先。--dns-srv-name
会使连接建立使用mysql_real_connect_dns_srv()
C API函数,而不是mysql_real_connect()
。但是,如果在运行时随后使用了connect
命令并指定了主机名参数,那么该主机名优先于在mysql启动时为指定DNS SRV记录而给出的任何--dns-srv-name
选项。此选项是在MySQL 8.0.22中添加的。
-
命令行格式 --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
引入版本 已弃用 类型 字符串 注意
从 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
即使发生SQL错误也继续执行。命令行格式 --force
即使发生SQL错误也继续执行。
-
命令行格式 --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=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选项优先。--dns-srv-name
会使连接建立使用mysql_real_connect_dns_srv()
C API函数,而不是mysql_real_connect()
。但是,如果在运行时随后使用了connect
命令并指定了主机名参数,那么该主机名优先于在mysql启动时为指定DNS SRV记录而给出的任何--dns-srv-name
选项。 -
--html
,-H
生成HTML输出。 --html, -H 生成HTML输出。 --忽略空格,-i 忽略函数名后的空格。这一设置的效果在IGNORE_SPACE SQL模式的讨论中有描述(见7.1.11节,“服务器SQL模式”)。 --init-command=str 连接到服务器后要执行的单个SQL语句。如果启用了自动重连,重连发生后该语句将再次执行。命令行格式 --html
生成HTML输出。
-
--ignore-spaces
,-i
忽略函数名后的空格。此选项的效果在关于 IGNORE_SPACE SQL 模式的讨论中有描述(参见 7.1.11 节,“服务器 SQL 模式”)。命令行格式 --ignore-spaces
忽略函数名后的空格。其效果在关于
IGNORE_SPACE
SQL 模式的讨论中进行了描述(请参阅7.1.11 节,“服务器 SQL 模式”)。 -
--init-command=str 连接到服务器后要执行的单个SQL语句。如果启用了自动重连,重连后该语句将再次执行。
命令行格式 --init-command=str
连接到服务器后要执行的单个SQL语句。如果启用了自动重连,重连发生后该语句将再次执行。
-
命令行格式 --line-numbers
禁用者 skip-line-numbers
为错误写入行号。使用
--skip-line-numbers
禁用此功能。 -
--load-data-local-dir=*
dir_name*
命令行格式 --load-data-local-dir=dir_name
引入版本 类型 目录名称 默认值 empty string
此选项会影响客户端用于
LOAD DATA
操作的LOCAL
功能。它指定了LOAD DATA LOCAL
语句中指定的文件必须所在的目录。--load-data-local-dir
的效果取决于是否启用或禁用LOCAL
数据加载:- 如果通过默认方式在MySQL客户端库中启用了
LOCAL
数据加载,或者通过指定--local-infile[=1\]
启用了该功能,则会忽略--load-data-local-dir
选项。 - 如果默认在MySQL客户端库中或通过指定
--local-infile=0
禁用了LOCAL
数据加载,则--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中添加的。”
- 如果通过默认方式在MySQL客户端库中启用了
-
| 命令行格式 |
--local-infile[={0|1}]
|
| :--------- | ------------------------ |
| 类型 | 布尔值 |
| 默认值 |FALSE
|默认情况下,
LOCAL
加载数据LOAD DATA
的功能由编译到 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
类型 字符串 从
.mylogin.cnf
登录路径文件中指定的登录路径读取选项。“登录路径”是一个选项组,其中包含指定要连接到哪个MySQL服务器以及以哪个账户进行身份验证的选项。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参阅6.6.7节,“mysql_config_editor — MySQL配置实用程序”。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --max-allowed-packet=value
类型 数值的 默认值 16777216
客户端/服务器通信缓冲区的最大大小。默认值为16MB,最大值为1GB。
-
命令行格式 --max-join-size=value
类型 数值的 默认值 1000000
使用
--safe-updates
时,连接中自动限制的行数。(默认值为1000000。) -
命令行格式 --named-commands
禁用者 skip-named-commands
启用命名的 mysql 命令。允许使用长格式命令,而不仅仅是短格式命令。例如,
quit
和\q
都能被识别。使用--skip-named-commands
禁用命名命令。请参阅 6.5.1.2 节,“mysql 客户端命令”。 -
命令行格式 --net-buffer-length=value
类型 数值的 默认值 16384
TCP/IP和套接字通信的缓冲区大小。(默认值为16KB。)
-
命令行格式 --network-namespace=name
引入版本 类型 字符串 用于TCP/IP连接的网络命名空间。如果省略此参数,连接将使用默认(全局)命名空间。有关网络命名空间的信息,请参阅7.1.14节,“网络命名空间支持”。
此选项是在MySQL 8.0.22中添加的。仅在支持网络命名空间的平台上可用。
-
命令行格式 --no-auto-rehash
已弃用 是 这与
--skip-auto-rehash
具有相同的效果。请参阅--auto-rehash
的说明。 -
--no-beep
,-b
命令行格式 --no-beep
发生错误时不发出蜂鸣声。
-
命令行格式 --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
忽略除默认数据库为命令行中指定数据库时出现的语句之外的其他语句。此选项尚不完善,使用时应谨慎。语句筛选仅基于
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-databasedb1,mysql将按如下方式处理输入:
- 由于默认数据库为
db1
,因此会执行DELETE
语句,即便该语句指定的是另一个数据库中的表。 - 由于默认数据库不是 db1,因此不执行 DROP TABLE 和 CREATE TABLE 语句,即使这些语句指定了 db1 中的表。
- 因为默认数据库是
db1
,所以[
INSERT](https://dev.mysql.com/doc/refman/8.0/en/insert.html)
和[
CREATE TABLE](https://dev.mysql.com/doc/refman/8.0/en/create-table.html)
语句会被执行,即使[
CREATE TABLE](https://dev.mysql.com/doc/refman/8.0/en/create-table.html)
语句指定的表位于不同的数据库中。
- 由于默认数据库为
-
命令行格式 --pager[=command]
禁用者 skip-pager
类型 字符串 使用给定的命令进行分页查询输出。如果省略该命令,默认的分页器是您的
PAGER
环境变量的值。有效的分页器有 less、more、cat [> filename] 等。此选项仅在 Unix 系统上且仅在交互模式下有效。要禁用分页,请使用--skip-pager
。6.5.1.2 节 “mysql 客户端命令” 进一步讨论了输出分页。 -
--password[=password\]
,-p[password]
连接到服务器时使用的MySQL账户的密码。密码值是可选的。如果未给出,mysql 会提示输入密码。如果给出密码,--password= 或 -p 与后面的密码之间不能有空格。如果未指定密码选项,默认不发送密码。 在命令行中指定密码应被视为不安全的做法。为避免在命令行中给出密码,可以使用选项文件。请参阅 8.1.2.1节,“密码安全的最终用户指南”。 要明确指定没有密码且 mysql 不应提示输入密码,请使用 --skip-password 选项。命令行格式 --password[=password]
类型 字符串 用于连接服务器的MySQL账户密码。密码值是可选的。如果未提供,mysql 会提示输入。如果提供了,在
--password=
或-p
与随后的密码之间不得有空格。如果未指定密码选项,默认不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中提供密码,请使用选项文件。请参阅8.1.2.1节,“用户密码安全指南”。
要显式指定没有密码且mysql不应提示输入密码,请使用
--skip-password
选项。 -
--password1[=*
pass_val*\] --password1[=口令值]
用于连接服务器的MySQL账户的多因素身份验证因素1的密码。密码值是可选的。如果未提供,mysql 会提示输入。如果提供了,
--password1=
与其后的密码之间 不得有空格。如果未指定密码选项,默认不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中输入密码,请使用选项文件。请参阅 8.1.2.1节,“密码安全的最终用户指南”。
要显式指定无密码且mysql不应提示输入密码,请使用
--skip-password1
选项。--password1
与--password
同义,--skip-password1
与--skip-password
亦是如此。 -
用于连接服务器的MySQL账户的多因素身份验证因素2的密码。此选项的语义与
--password1
的语义类似;详情请参阅该选项的说明。 -
用于连接服务器的MySQL账户的多因素身份验证因子3的密码。此选项的语义与
--password1
的语义类似;详情请参阅该选项的说明。 -
--pipe
,-W
在Windows上,使用命名管道连接到服务器。此选项仅在服务器启动时启用了named_pipe系统变量以支持命名管道连接时才适用。此外,进行连接的用户必须是named_pipe_full_access_group系统变量指定的Windows组的成员。命令行格式 --pipe
类型 字符串 在Windows上,使用命名管道连接到服务器。仅当服务器在启用
named_pipe
系统变量以支持命名管道连接的情况下启动时,此选项才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的Windows组的成员。 -
--plugin-authentication-kerberos-client-mode=*
value*
命令行格式 --plugin-authentication-kerberos-client-mode
引入版本 类型 字符串 默认值 SSPI
有效值 GSSAPI``SSPI
在Windows上,
authentication_kerberos_client
身份验证插件支持此插件选项。它提供了客户端用户可以在运行时设置的两个可能值:SSPI
和GSSAPI
。客户端插件选项的默认值使用安全支持提供程序接口 (SSPI),该接口能够从 Windows 内存缓存中获取凭据。或者,客户端用户可以选择一种模式,通过 Windows 上的 MIT Kerberos 库支持通用安全服务应用程序接口 (GSSAPI)。GSSAPI 能够获取以前使用 kinit 命令生成的缓存凭据。
有关更多信息,请参阅GSSAPI模式下Windows客户端的命令。
-
命令行格式 --plugin-dir=dir_name
类型 目录名称 用于查找插件的目录。如果使用
--default-auth
选项指定身份验证插件,但 mysql 找不到该插件,请指定此选项。请参见 8.2.17 节 “可插拔身份验证”。 -
--port=port_num
,-P port_num
命令行格式 --port=port_num
类型 数值的 默认值 3306
对于TCP/IP连接,要使用的端口号。
-
命令行格式 --print-defaults
打印程序名称及其从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --prompt=format_str
类型 字符串 默认值 mysql>
将提示符设置为指定格式。默认值为
mysql>
。提示符可以包含的特殊序列在6.5.1.2节“mysql客户端命令”中描述。 -
命令行格式 --protocol=type
类型 字符串 默认值 [see text]
有效值 TCP``SOCKET``PIPE``MEMORY
用于连接服务器的传输协议。当其他连接参数通常导致使用的协议并非您所需的协议时,此参数很有用。有关允许值的详细信息,请参阅6.2.7节“连接传输协议”。
-
--快速, -q
命令行格式 --quick
不要缓存每个查询结果,在接收到每行数据时就打印。如果输出暂停,这可能会降低服务器速度。使用此选项时,mysql 不会使用历史文件。
默认情况下,mysql 会在产生任何输出之前获取所有结果行;在存储这些结果行时,它会依次根据每列的实际值计算运行时的最大列长度。在打印输出时,它会使用这个最大值来格式化输出。当指定了
--quick
时,mysql 在开始之前没有可供计算长度的行,因此使用最大长度。在以下示例中,表t1
有一个类型为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
:以原始格式输出,不对特殊字符进行转义。例如,换行符、制表符、NUL和反斜杠将以其原始形式输出,而不是转义后的形式(如\n、\t、\0和\)。 --safe-updates, --i-am-a-dummy, -U:启用此选项后,UPDATE和DELETE语句如果在WHERE子句中未使用键或没有LIMIT子句,将产生错误。此外,对产生(或估计会产生)非常大结果集的SELECT语句也会施加限制。如果已在选项文件中设置了此选项,可以在命令行上使用--skip-safe-updates来覆盖它。有关此选项的更多信息,请参阅使用安全更新模式(--safe-updates)。 --select-limit=value:使用--safe-updates时,SELECT语句的自动限制。(默认值为1000。) --server-public-key-path=file_name:包含服务器基于RSA密钥对的密码交换所需公钥的客户端副本的PEM格式文件的路径名。此选项适用于使用sha256_password或caching_sha2_password身份验证插件进行身份验证的客户端。对于不使用这些插件之一进行身份验证的账户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。 具体翻译如下: """ --原始, -r """ """ --安全更新, --我是个虚拟选项(此为直译,推测可能是用于测试或特定标识的选项), -U """ """ --选择限制=值 """ """ --服务器公钥路径=文件名命令行格式 --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
禁用者 skip-reconnect
如果与服务器的连接丢失,自动尝试重新连接。每次连接丢失时都会进行一次重新连接尝试。若要禁止重新连接行为,请使用
--skip-reconnect
。 -
--安全更新,--我是个虚拟选项,-U
命令行格式 --safe-updates``--i-am-a-dummy
类型 布尔值 默认值 FALSE
如果启用此选项,未在
WHERE
子句或LIMIT
子句中使用键的UPDATE
和DELETE
语句将产生错误。此外,对于产生(或估计会产生)非常大的结果集的SELECT
语句也会施加限制。如果已在选项文件中设置了此选项,可以在命令行上使用--skip-safe-updates
来覆盖它。有关此选项的更多信息,请参见 使用安全更新模式(--safe-updates)。 -
命令行格式 --select-limit=value
类型 数值的 默认值 1000
使用
--safe-updates
时,SELECT
语句的自动限制。(默认值为1000。) -
--server-public-key-path=*
file_name*
命令行格式 --server-public-key-path=file_name
类型 文件名 包含服务器进行基于RSA密钥对的密码交换所需公钥的客户端副本的PEM格式文件的路径名。此选项适用于使用
sha256_password
或caching_sha2_password
身份验证插件进行身份验证的客户端。对于不使用这些插件之一进行身份验证的账户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。如果给出
--server-public-key-path=file_name
且指定了一个有效的公钥文件,则它优先于--get-server-public-key
。对于
sha256_password
,只有在使用OpenSSL构建MySQL时,此选项才适用。有关
sha256_password
和caching_sha2_password
插件的信息,请参阅8.4.1.3节,“SHA-256可插拔身份验证”以及8.4.1.2节,“缓存SHA-2可插拔身份验证”。 -
命令行格式 --shared-memory-base-name=name
特定于平台 Windows:微软视窗操作系统(常指Windows操作系统) 在Windows上,使用共享内存连接到本地服务器时要使用的共享内存名称。默认值是
MYSQL
。共享内存名称区分大小写。此选项仅在服务器启用
shared_memory
系统变量以支持共享内存连接时适用。 -
命令行格式 --show-warnings
如果有警告,在每条语句之后显示警告。此选项适用于交互模式和批处理模式。
-
命令行格式 --sigint-ignore
忽略
SIGINT
信号(通常是输入 Control+C 的结果)。如果不使用此选项,在有当前语句时,按 Control+C 会中断该语句,否则取消任何部分输入行。
-
--silent
,-s
静默模式。减少输出。可多次使用此选项以进一步减少输出。 此选项会导致输出为非表格格式并转义特殊字符。可使用原始模式禁用转义;请参阅 --raw 选项的说明。 --skip-column-names,-N 不在结果中写入列名。使用此选项会使输出右对齐,如下所示: --skip-line-numbers,-L命令行格式 --silent
静默模式。减少输出内容。此选项可多次使用,以逐渐减少输出量。
此选项会生成非表格输出格式并转义特殊字符。可通过使用原始模式禁用转义;请参阅
--raw
选项的说明。 -
命令行格式 --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
不要为错误编写行号。当你想要比较包含错误消息的结果文件时,此功能很有用。
-
命令行格式 --skip-system-command
引入版本 禁用
system
(\!
) 命令。相当于--system-command=OFF
。 -
--socket=path
,-S path
| 命令行格式 |
--socket={file_name|pipe_name}
|
| :--------- | -------------------------------- |
| 类型 | 字符串 |对于与
localhost
的连接,要使用的Unix套接字文件,或者在Windows上,要使用的命名管道的名称。在 Windows 上,仅当服务器在启用了
named_pipe
系统变量以支持命名管道连接的情况下启动时,此选项才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的 Windows 组的成员。 -
--ssl*
以
--ssl
开头的选项用于指定是否使用加密连接到服务器,并指明在何处查找 SSL 密钥和证书。请参阅 加密连接的命令选项。 -
| 命令行格式 |
--ssl-fips-mode={OFF|ON|STRICT}
|
| :--------- | --------------------------------- |
| 已弃用 | |
| 类型 | 枚举 |
| 默认值 |OFF
|
| 有效值 |OFF``ON``STRICT
|控制是否在客户端启用FIPS模式。--ssl-fips-mode选项与其他--ssl-xxx选项的不同之处在于,它并非用于建立加密连接,而是用于影响允许进行哪些加密操作。请参阅8.8节,“FIPS支持”。
这些“--ssl-fips-mode”值是允许的:
OFF
:禁用FIPS模式。- 开启:启用FIPS模式。
STRICT
:启用“严格”FIPS模式。
注意
如果OpenSSL FIPS对象模块不可用,
--ssl-fips-mode
唯一允许的值是OFF
。在这种情况下,将--ssl-fips-mode
设置为ON
或STRICT
会导致客户端在启动时生成警告并以非FIPS模式运行。从 MySQL 8.0.34 起,此选项已弃用。预计它将在 MySQL 的未来版本中移除。
-
--syslog
,-j
命令行格式 --syslog
此选项使mysql将交互式语句发送到系统日志记录工具。在Unix上,该工具是
syslog
;在Windows上,它是Windows事件日志。日志消息显示的目标取决于系统。在Linux上,目标通常是/var/log/messages
文件。以下是在Linux上使用
--syslog
生成的输出示例。此输出经过格式化以提高可读性;实际上,每条日志消息都占一行。Mar 7 12:39:25 myhost MysqlClient[20824]: SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23, DB_SERVER:'127.0.0.1', DB:'--', QUERY:'USE test;' Mar 7 12:39:28 myhost MysqlClient[20824]: SYSTEM_USER:'oscar', MYSQL_USER:'my_oscar', CONNECTION_ID:23, DB_SERVER:'127.0.0.1', DB:'test', QUERY:'SHOW TABLES;'
有关更多信息,请参阅6.5.1.3节,“mysql客户端日志记录”。
-
| 命令行格式 |
--system-command[={ON|OFF}]
|
| :--------- | ----------------------------- |
| 引入版本 | |
| 禁用者 |skip-system-command
|
| 类型 | 布尔值 |
| 默认值 |ON
|启用或禁用
system
(\!
) 命令。当通过--system-command=OFF
或--skip-system-command
禁用此选项时,system
命令将因错误而被拒绝。(MySQL 8.0.43及更高版本:)
--commands
选项在禁用(设置为FALSE
)时,会使服务器忽略此选项的任何设置。 -
--table
,-t
:以表格格式显示输出。这是交互式使用的默认设置,但也可用于批量模式下生成表格输出。命令行格式 --table
以表格格式显示输出。这是交互式使用的默认设置,但也可用于在批处理模式下生成表格输出。
-
命令行格式 --tee=file_name
类型 文件名 将输出的副本追加到给定文件中。此选项仅在交互模式下有效。6.5.1.2节,“mysql客户端命令”进一步讨论了tee文件。
-
--tls-ciphersuites=*
ciphersuite_list*
命令行格式 --tls-ciphersuites=ciphersuite_list
引入版本 类型 字符串 用于使用TLSv1.3的加密连接的可允许密码套件。该值是一个或多个以冒号分隔的密码套件名称的列表。此选项可指定的密码套件取决于用于编译MySQL的SSL库。有关详细信息,请参阅8.3.2节,“加密连接TLS协议和密码”。
此选项是在MySQL 8.0.16中添加的。
-
命令行格式 --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<br /> -v
即使在批处理模式下也会生成表格输出格式。) -
--版本, -V
命令行格式 --version
显示版本信息并退出。
-
--vertical
,-E
命令行格式 --vertical
垂直打印查询输出行(每个列值占一行)。如果不使用此选项,你可以通过在单个语句末尾加上
\G
来指定垂直输出。 -
--wait
,-w
命令行格式 --wait
如果无法建立连接,等待并重试,而不是中止。
-
--xml
,-X
命令行格式 --xml
生成XML输出。
<field name="column_name">NULL</field>
使用
--xml
与 mysql 搭配时的输出,与 mysqldump--xml
的输出相匹配。详细信息请参阅 6.5.4节,“mysqldump — 数据库备份程序”。XML输出也使用XML命名空间,如下所示:
$> mysql --xml -uroot -e "SHOW VARIABLES LIKE 'version%'" <?xml version="1.0"?> <resultset statement="SHOW VARIABLES LIKE 'version%'" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <row> <field name="Variable_name">version</field> <field name="Value">5.0.40-debug</field> </row> <row> <field name="Variable_name">version_comment</field> <field name="Value">Source distribution</field> </row> <row> <field name="Variable_name">version_compile_machine</field> <field name="Value">i686</field> </row> <row> <field name="Variable_name">version_compile_os</field> <field name="Value">suse-linux-gnu</field> </row> </resultset>
-
命令行格式 --zstd-compression-level=#
引入版本 类型 整数 用于与使用
zstd
压缩算法的服务器建立连接时所使用的压缩级别。允许的级别范围是 1 到 22,值越大表示压缩级别越高。默认的zstd
压缩级别为 3。压缩级别设置对不使用zstd
压缩的连接没有影响。有关更多信息,请参阅6.2.8节,“连接压缩控制”。
此选项是在MySQL 8.0.18中添加的。
6.5.1.2 mysql客户端命令
mysql
会将你发出的每条SQL语句发送到服务器执行。此外,mysql
自身也会解释一组命令。要查看这些命令列表,请在mysql>
提示符下输入help
或\h
:
mysql> help
List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
? (\?) Synonym for `help'.
clear (\c) Clear the current input statement.
connect (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
edit (\e) Edit command with $EDITOR.
ego (\G) Send command to mysql server, display result vertically.
exit (\q) Exit mysql. Same as quit.
go (\g) Send command to mysql server.
help (\h) Display this help.
nopager (\n) Disable pager, print to stdout.
notee (\t) Don't write into outfile.
pager (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print (\p) Print current command.
prompt (\R) Change your mysql prompt.
quit (\q) Quit mysql.
rehash (\#) Rebuild completion hash.
source (\.) Execute an SQL script file. Takes a file name as an argument.
status (\s) Get status information from the server.
system (\!) Execute a system shell command.
tee (\T) Set outfile [to_outfile]. Append everything into given
outfile.
use (\u) Use another database. Takes database name as argument.
charset (\C) Switch to another charset. Might be needed for processing
binlog with multi-byte charsets.
warnings (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
resetconnection(\x) Clean session context.
query_attributes Sets string parameters (name1 value1 name2 value2 ...)
for the next query to pick up.
ssl_session_data_print Serializes the current SSL session data to stdout
or file.
For server side help, type 'help contents'
如果使用 --binary-mode 选项调用 mysql,则除了 charset 和 delimiter 之外,所有 mysql 命令在非交互模式下均被禁用(对于通过管道传输到 mysql 或使用 source 命令加载的输入)。从 MySQL 8.0.43 开始,可以使用 --commands 选项来启用或禁用除 /C、delimiter 和 use 之外的所有命令。
每个命令都有长格式和短格式。长格式不区分大小写;短格式区分大小写。长格式后面可以跟一个可选的分号作为结束符,但短格式不应该跟分号。
不支持在多行 /*<br /> ... */
注释中使用短格式命令。短格式命令可在单行 /*! ... */
版本注释中使用,/*+ ... */
优化器提示注释也是如此,这些注释存储在对象定义中。如果担心优化器提示注释可能存储在对象定义中,以至于使用 mysql
重新加载转储文件时会导致执行此类命令,可以使用 --binary-mode
选项调用 mysql,或者使用 mysql 之外的重新加载客户端。
-
help [arg]
,\h [arg]
,\? [arg]
,? [arg]
显示帮助信息,列出可用的mysql命令。 如果为 help 命令提供一个参数,mysql 会将其作为搜索字符串,以从《MySQL 参考手册》的内容中获取服务器端帮助。有关更多信息,请参阅6.5.1.4 节,“mysql 客户端服务器端帮助”。显示一条帮助消息,列出可用的mysql命令。
如果为
help
命令提供一个参数,mysql 会将其用作搜索字符串,以从《MySQL参考手册》的内容中获取服务器端帮助。有关更多信息,请参见6.5.1.4节,“mysql客户端服务器端帮助”。 -
charset<br /> charset_name
,\C<br /> charset_name
更改默认字符集并发出
SET NAMES
语句。如果在启用自动重连(不建议)的情况下运行mysql,这将使客户端和服务器上的字符集保持同步,因为指定的字符集将用于重连。 -
clear
,\c
清除当前输入内容。如果您改变主意,不想执行正在输入的语句,可使用此操作。
-
connect [db_name<br /> [host_name]]
,\r [db_name<br /> [host_name]]
连接 [数据库名[主机名]],\r [数据库名[主机名]]重新连接到服务器。可以提供可选的数据库名称和主机名参数,以指定默认数据库或服务器运行所在的主机。如果省略,则使用当前值。
如果
connect
命令指定了主机名参数,则该主机优先于在mysql启动时为指定DNS SRV记录而给出的任何--dns-srv-name
选项。 -
delimiter str
,\d str
更改mysql 解释为SQL语句之间分隔符的字符串。默认值为分号字符(
;
)。分隔符字符串可以在
delimiter
命令行中作为无引号或带引号的参数指定。可以使用单引号('
)、双引号("
) 或反引号(```) 字符进行引用。要在带引号的字符串中包含引号,可以使用不同的引号字符引用该字符串,或者使用反斜杠(\
) 字符转义引号。在带引号的字符串之外应避免使用反斜杠,因为它是MySQL的转义字符。对于无引号的参数,分隔符将读取到第一个空格或行尾。对于带引号的参数,分隔符将读取到该行上匹配的引号处。mysql 将定界符字符串的实例解释为语句定界符,只要它出现,引号字符串内除外。在定义可能出现在其他单词中的定界符时要小心。例如,如果将定界符定义为
X
,则在语句中无法使用单词INDEX
。mysql 会将其解释为INDE
后跟定界符X
。当mysql 识别的分隔符设置为默认值
;
以外的值时,该字符的实例将不经解释直接发送到服务器。但是,服务器本身仍将;
解释为语句分隔符并相应地处理语句。服务器端的这种行为在多语句执行(请参阅 多语句执行支持)以及解析存储过程和函数、触发器及事件的主体时起作用(请参阅 27.1节,“定义存储程序”)。 -
edit
,\e
编辑当前输入语句。mysql会检查
EDITOR
和VISUAL
环境变量的值,以确定要使用哪个编辑器。如果这两个变量都未设置,则默认编辑器为vi。“edit”命令仅在Unix系统中有效。
-
ego
,\G
将当前语句发送到服务器执行,并以纵向格式显示结果。
-
退出,\q
退出 mysql。
-
将当前语句发送到服务器执行。
将当前语句发送到服务器执行。
-
nopager
,\n
禁用输出分页。请参阅
pager
的说明。nopager
命令仅在 Unix 系统中有效。 -
notee
,\t
禁用将输出复制到tee文件。有关
tee
的说明,请参见相关描述。 -
nowarning
,\w
禁用每条语句之后的警告显示。
-
启用输出分页。在调用
pager<br /> [command]
时使用--pager选项,可以使用诸如less、more等Unix程序或任何其他类似程序以交互模式浏览或搜索查询结果。如果未为该选项指定值,mysql将检查PAGER环境变量的值,并将分页器设置为该值。分页器功能仅在交互模式下有效。 可以使用pager命令以交互方式启用输出分页,并使用nopager禁用。该命令接受一个可选参数;如果提供该参数,则将分页程序设置为该参数值。如果没有参数,则将分页器设置为命令行上设置的分页器,如果未指定分页器,则设置为stdout。 输出分页仅在Unix中有效,因为它使用了popen()函数,而该函数在Windows上不存在。对于Windows,可以使用tee选项来保存查询输出,尽管在某些情况下,它不如pager方便浏览输出。 pager[command], \P[command]启用输出分页。在调用
--pager
时使用--pager 选项,可以使用诸如less、more 之类的Unix程序或任何其他类似程序以交互模式浏览或搜索查询结果。如果不为该选项指定值,mysql 会检查PAGER
环境变量的值并将分页程序设置为该值。分页功能仅在交互模式下有效。可以使用 pager 命令以交互方式启用输出分页,并使用 nopager 命令禁用分页。该命令接受一个可选参数;如果提供了该参数,则将分页程序设置为该参数指定的程序。如果未提供参数,则将分页程序设置为命令行中设置的分页程序;如果未指定分页程序,则设置为 stdout。
输出分页仅在Unix系统下可用,因为它使用了
popen()
函数,而该函数在Windows系统中不存在。对于Windows系统,可以使用tee
选项来保存查询输出,尽管在某些情况下,它不如pager
那样便于浏览输出。 -
print
,\p
打印当前输入语句,但不执行它。
-
prompt [str]
,\R [str]
将 mysql 提示符重新配置为给定字符串。本节后面将介绍可在提示符中使用的特殊字符序列。
如果指定
prompt
命令但不提供参数,mysql 会将提示符重置为默认的mysql>
。 -
query_attributes *
name* *
value* [*
name* *
value* ...]
定义应用于发送到服务器的下一个查询的查询属性。有关查询属性的用途和用法的讨论,请参阅 11.6 节,“查询属性”。
“
query_attributes
命令遵循以下规则:” -
quit
,\q
退出 mysql。
-
rehash
,\#
重建完成哈希,这样在您输入语句时可实现数据库、表和列名的自动完成。(请参阅
--auto-rehash
选项的说明。) -
resetconnection
,\x
重置连接以清除会话状态。这包括清除使用
query_attributes
命令定义的任何当前查询属性。重置连接的效果类似于
mysql_change_user()
或自动重连,不同之处在于连接不会关闭并重新打开,也不会重新进行身份验证。请参阅mysql_change_user() 和自动重连控制。此示例展示了
resetconnection
如何清除会话状态中维护的值: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 | +------------------+
-
source<br /> file_name
,\.<br /> file_name
读取指定名称的文件并执行其中包含的语句。在Windows系统上,路径名分隔符指定为
/
或\\
。引号字符被视为文件名本身的一部分。为获得最佳效果,文件名不应包含空格字符。
-
ssl_session_data_print [*
file_name*]
获取、序列化并(可选地)存储成功连接的会话数据。可以提供可选的文件名和参数,以指定用于存储序列化会话数据的文件。如果省略,则会将会话数据输出到
stdout
。如果MySQL会话配置为可重用,那么来自文件的会话数据将被反序列化,并提供给
connect
命令以重新连接。当会话成功重用时,status
命令将包含一行显示SSL session reused: true
,同时客户端仍保持与服务器的连接。 -
status
,\s
提供有关正在使用的连接和服务器的状态信息。如果启用了
--safe-updates
,status
还会打印影响查询的mysql 变量的值。 -
system<br /> command
,\!<br /> command
使用默认的命令解释器执行给定的命令。
在 MySQL 8.0.19 之前,
system
命令仅在 Unix 系统上可用。从 8.0.19 版本起,该命令在 Windows 系统上也能使用。在MySQL 8.0.40及更高版本中,可以通过使用
--system-command=OFF
或--skip-system-command
启动客户端来禁用此命令。 -
tee<br /> [file_name]
,\T [file_name]
在调用mysql 时使用
--tee
选项,你可以记录语句及其输出。屏幕上显示的所有数据都会追加到给定文件中。这对于调试也非常有用。mysql 在每条语句执行后,就在打印下一个提示符之前,将结果刷新到文件中。Tee 功能仅在交互模式下起作用。你可以使用
tee
命令以交互方式启用此功能。如果不带参数,则使用上一个文件。可以使用notee
命令禁用tee
文件。再次执行tee
可重新启用日志记录。 -
use db_name
,\u db_name
使用
db_name
作为默认数据库。 -
warnings
,\W
启用在每条语句之后显示警告(如果有任何警告的话)。
以下是关于pager
命令的一些提示:
-
你可以用它写入文件,且结果仅输出到文件:
mysql> pager cat > /tmp/log.txt
你还可以为你想用作分页程序的程序传递任何选项:
mysql> pager less -n -i -S
-
在前面的示例中,请注意
-S
选项。你可能会发现它对于浏览宽查询结果非常有用。有时,非常宽的结果集在屏幕上很难阅读。less 命令的-S
选项可以使结果集更易于阅读,因为你可以使用左箭头键和右箭头键水平滚动它。你还可以在 less 中以交互方式使用-S
来打开和关闭水平浏览模式。有关更多信息,请阅读 less 的手册页:man less
-
可将
-F
和-X
选项与less一起使用,以便在输出内容可在一屏内显示时退出,在无需滚动时此功能很方便:mysql> pager less -n -i -S -F -X
-
你可以指定非常复杂的分页器命令来处理查询输出:
mysql> pager cat | tee /dr1/tmp/res.txt \ | tee /dr2/tmp/res2.txt | less -n -i -S
在这个例子中,该命令会将查询结果发送到挂载在
/dr1
和/dr2
上的两个不同文件系统中两个不同目录下的文件中,但仍会使用less在屏幕上显示结果。
你还可以将tee
和pager
函数结合使用。启用tee
文件并将pager
设置为less,这样你就能够使用less程序浏览结果,同时所有内容仍会追加到文件中。与pager
命令一起使用的Unix tee
和内置的mysql tee
命令之间的区别在于,即使没有可用的Unix tee,内置的tee
仍然可以工作。内置的tee
还会记录屏幕上打印的所有内容,而与pager
一起使用的Unix tee记录的内容则没有那么多。此外,在mysql中可以交互式地打开和关闭tee
文件日志记录。当你想将某些查询记录到文件中,但不想记录其他查询时,这很有用。
prompt
命令重新配置默认的 mysql>
提示符。用于定义提示符的字符串可以包含以下特殊序列。
选项 | 描述 |
---|---|
\C |
当前连接标识符 |
\c |
一个计数器,每当你发出一条语句时就会递增 |
\D |
当前完整日期 |
\d |
默认数据库 |
\h |
服务器主机 |
\l |
当前分隔符 |
\m |
当前时间的分钟数 |
\n |
换行符 |
\O |
当前月份的三个字母格式(Jan、Feb 等) |
\o |
当前月份的数字格式 |
\P |
上午/下午 |
\p |
当前的TCP/IP端口或套接字文件 |
\R |
当前时间,采用24小时制(0-23) |
\r |
当前时间,标准12小时制时间(1–12) |
\S |
分号 |
\s |
当前时间的秒数 |
\T |
如果当前会话在事务块内,则打印一个星号(* )(从 MySQL 8.0.28 开始) |
\t |
一个制表符 |
\U |
你的完整user_name@host_name 账户名 |
\u |
你的用户名 |
\v |
服务器版本 |
\w |
以三个字母的格式表示的当前星期几(Mon、Tue 等) |
\Y |
当前年份,四位数字 |
\y |
当前年份,两位数字 |
\_ |
一个空格 |
\ |
一个空格(反斜杠后接一个空格) |
\' |
单引号 |
\" |
双引号 |
\\ |
一个字面上的 \ 反斜杠字符 |
\* x* |
x ,适用于任何未在上述列出的“x ” |
你可以通过多种方式设置提示词:
-
使用环境变量。 你可以将
MYSQL_PS1
环境变量设置为一个提示符字符串。例如:export MYSQL_PS1="(\u@\h) [\d]> "
-
使用命令行选项。 你可以在命令行上为 mysql 设置
--prompt
选项。例如:$> mysql --prompt="(\u@\h) [\d]> " (user@host) [database]>
-
使用选项文件。你可以在任何MySQL选项文件的
[mysql]
组中设置prompt
选项,例如/etc/my.cnf
或你主目录中的.my.cnf
文件。例如:[mysql] prompt=(\\u@\\h) [\\d]>\\_
在这个示例中,请注意反斜杠是成对出现的。如果您在选项文件中使用
prompt
选项设置提示符,那么在使用特殊的提示符选项时,建议将反斜杠加倍。在允许使用的提示符选项集与选项文件中识别的特殊转义序列集之间存在一些重叠。(选项文件中转义序列的规则列于 6.2.2.2 节“使用选项文件” 中。)如果您使用单个反斜杠,这种重叠可能会给您带来问题。例如,\s
会被解释为一个空格,而不是当前的秒数。以下示例展示了如何在选项文件中定义一个提示符,以hh:mm:ss>
格式包含当前时间:[mysql] prompt="\\r:\\m:\\s> "
-
以交互方式设置提示词。 你可以通过使用
prompt
(或\R
)命令以交互方式更改提示词。例如:mysql> prompt (\u@\h) [\d]>\_ PROMPT set to '(\u@\h) [\d]>\_' (user@host) [database]> (user@host) [database]> prompt Returning to default PROMPT of mysql> mysql>
6.5.1.3 mysql客户端日志记录
mysql 客户端可以对交互式执行的语句进行以下类型的日志记录:
- 在Unix系统上,mysql会将语句写入到一个历史记录文件中。默认情况下,该文件名为
.mysql_history
,位于你的主目录中。要指定不同的文件,请设置MYSQL_HISTFILE
环境变量的值。 - 在所有平台上,如果给出了
--syslog
选项,mysql 会将语句写入系统日志记录工具。在Unix系统上,该工具是syslog
;在Windows系统上,它是Windows事件日志。日志消息显示的目标位置取决于系统。在Linux系统上,目标位置通常是/var/log/messages
文件。
以下讨论描述了适用于所有日志记录类型的特征,并提供了每种日志记录类型的特定信息。
日志记录如何发生
对于每个启用的日志记录目标,语句日志记录的发生方式如下:
- 只有在交互式执行时才会记录语句。当从文件或管道中读取语句等情况时,语句为非交互式的。也可以使用
--batch
或--execute
选项来禁止记录语句。 - 如果语句与“忽略”列表中的任何模式匹配,则会被忽略且不会记录。此列表将在后面介绍。
- mysql 会单独记录每个未被忽略且非空的语句行。
- 如果一条非忽略语句跨越多行(不包括终止分隔符),mysql 会将这些行连接起来形成完整的语句,将换行符映射为空格,并记录结果以及一个分隔符。
因此,跨多行的输入语句可能会被记录两次。考虑以下输入:
mysql> SELECT
-> 'Today is'
-> ,
-> CURDATE()
-> ;
在这种情况下,mysql 按读取顺序记录“SELECT”、“'Today is'”、“,”、“CURDATE()”和“;”这些行。它还会在将 SELECT\n'Today<br /> is'\n,\nCURDATE()
映射为 SELECT 'Today is' ,<br /> CURDATE()
之后,记录完整的语句以及一个分隔符。因此,日志输出中会出现以下这些行:
SELECT
'Today is'
,
CURDATE()
;
SELECT 'Today is' , CURDATE();
出于日志记录目的,mysql 会忽略与 “忽略” 列表中任何模式匹配的语句。默认情况下,模式列表为"*IDENTIFIED*:*PASSWORD*"
,用于忽略涉及密码的语句。模式匹配不区分大小写。在模式中,有两个字符是特殊的:
- “?” 匹配任意单个字符。
*
匹配零个或多个字符的任意序列。
要指定其他模式,请使用 --histignore
选项或设置 MYSQL_HISTIGNORE
环境变量。(如果同时指定了两者,则选项值优先。)该值应该是一个或多个以冒号分隔的模式列表,这些模式将追加到默认模式列表中。
在命令行中指定的模式可能需要加上引号或进行转义,以防止命令解释器对它们进行特殊处理。例如,若要除了抑制涉及密码的语句的日志记录之外,还要抑制 UPDATE
和 DELETE
语句的日志记录,请按如下方式调用 mysql:
mysql --histignore="*UPDATE*:*DELETE*"
控制历史记录文件
.mysql_history
文件应使用严格的访问模式加以保护,因为敏感信息可能会写入其中,例如包含密码的SQL语句文本。请参见8.1.2.1节,“密码安全的最终用户指南”。在mysql客户端中,使用向上箭头键调出历史记录时,可以访问该文件中的语句。请参见禁用交互式历史记录。
如果您不想保留历史记录文件,首先若.mysql_history
存在则将其删除。然后使用以下任一方法防止再次创建该文件:
-
将
MYSQL_HISTFILE
环境变量设置为/dev/null
。要使此设置在每次登录时生效,请将其放入某个 shell 启动文件中。 -
将
.mysql_history
创建为指向/dev/null
的符号链接;此操作只需执行一次:ln -s /dev/null $HOME/.mysql_history
系统日志记录特性
如果给出了--syslog
选项,mysql会将交互式语句写入系统日志记录工具。消息日志记录具有以下特点。
日志记录处于“信息”级别。这对应于Unix/Linux系统上LOG_INFO
功能的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;'
6.5.1.4 mysql客户端服务器端帮助
mysql> help search_string
如果为 help 命令提供一个参数,mysql 会将其作为搜索字符串,从《MySQL 参考手册》的内容中获取服务器端帮助。此命令的正常运行要求在 mysql 数据库中的帮助表用帮助主题信息进行初始化(参见 7.1.17 节,“服务器端帮助支持”)。
如果搜索字符串没有匹配项,则搜索失败:
mysql> help me
Nothing found
Please try to run 'help contents' for a list of all accessible topics
使用 help contents 查看帮助类别列表:
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
6.5.1.5 从文本文件执行SQL语句
通常以交互方式使用mysql客户端,如下所示:
mysql db_name
然而,也可以将SQL语句放在一个文件中,然后让 mysql 从该文件读取输入。要做到这一点,创建一个文本文件 text_file
,其中包含你希望执行的语句。然后按如下所示调用 mysql:
mysql db_name < text_file
如果在文件中把 USE<br /> db_name
语句作为第一条语句,就无需在命令行中指定数据库名称:
mysql < text_file
如果您已经在运行 mysql,则可以使用 source
命令或 \.
命令执行 SQL 脚本文件:
mysql> source file_name
mysql> \. file_name
有时,你可能希望脚本向用户显示进度信息。为此,你可以插入如下语句:
SELECT '<info_to_display>' AS ' ';
显示的语句输出<info_to_display>
。
你也可以使用 --verbose 选项调用 mysql,这会使每条语句在其产生的结果之前显示。
MySQL会忽略输入文件开头的Unicode字节序标记(BOM)字符。以前,它会读取这些字符并将其发送到服务器,从而导致语法错误。BOM的存在不会使MySQL更改其默认字符集。要更改默认字符集,可以使用诸如 --default-character-set=utf8mb4
之类的选项来调用MySQL。
有关批处理模式的更多信息,请参阅5.5节,“以批处理模式使用mysql”。
6.5.1.6 mysql客户端提示
本节提供有关更有效地使用mysql的技术以及mysql操作行为的信息。
- 输入行编辑
- 禁用交互式历史记录
- Windows 上的 Unicode 支持
- 垂直显示查询结果
- 使用安全更新模式(--safe-updates)
- 禁用mysql自动重连
- MySQL客户端解析器与服务器解析器
输入行编辑
mysql 支持输入行编辑,这使您能够就地修改当前输入行或调出以前的输入行。例如,左箭头 和 右箭头 键可在当前输入行中水平移动,上箭头 和 下箭头 键可在以前输入的行集中上下移动。退格键 删除光标前的字符,输入新字符则将其输入到光标位置。要输入该行,请按 回车键。
在 Windows 上,编辑键序列与控制台窗口中命令编辑所支持的序列相同。在 Unix 上,键序列取决于用于构建 mysql 的输入库(例如,libedit
或 readline
库)。
libedit
和readline
库的文档可在线获取。要更改给定输入库允许的键序列集,请在库启动文件中定义键绑定。该文件位于您的主目录中:.editrc
用于libedit
,.inputrc
用于readline
。
例如,在libedit
中,Control+W删除当前光标位置之前的所有内容,Control+U删除整行。在readline
中,Control+W删除光标前的单词,Control+U删除当前光标位置之前的所有内容。如果mysql是使用libedit
构建的,那么喜欢这两个键具有readline
行为的用户可以在.editrc
文件中添加以下几行(如有必要则创建该文件):
bind "^W" ed-delete-prev-word
bind "^U" vi-kill-line-prev
要查看当前的按键绑定集,暂时在 .editrc
的末尾添加一行,内容仅为 bind
。mysql 在启动时会显示这些绑定。
禁用交互式历史记录
向上箭头键(up-arrow)可让您调出当前和以前会话中的输入行。在共享控制台的情况下,此行为可能不合适。mysql 支持根据主机平台部分或完全禁用交互式历史记录。
在Windows上,历史记录存储在内存中。Alt+F7 删除当前历史缓冲区内存中存储的所有输入行。它还会删除使用 F7 显示并使用 F9(按编号)调出的输入行前面的序列号列表。按下 Alt+F7 后输入的新输入行将重新填充当前历史缓冲区。如果使用 --syslog
选项启动 mysql,清除缓冲区并不会阻止记录到Windows事件查看器中。关闭控制台窗口也会清除当前历史缓冲区。
要在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<br /> client - Unicode
的项目。该项目会调用mysql客户端,并将其属性设置为通过控制台以 Unicode 方式与 MySQL 服务器进行通信。
要手动利用此支持,请在使用兼容Unicode字体的控制台中运行mysql,并将默认字符集设置为与服务器通信时支持的Unicode字符集:
- 打开一个控制台窗口。
- 转到控制台窗口属性,选择“字体”选项卡,然后选择“Lucida Console”或其他一些兼容的Unicode字体。这是必要的,因为控制台窗口默认使用的是DOS光栅字体,这种字体不适合Unicode。
- 使用
--default-character-set=utf8mb4
(或utf8mb3
)选项执行mysql.exe。此选项是必要的,因为utf16le
是不能用作客户端字符集的字符集之一。请参阅不允许使用的客户端字符集。
有了这些更改,mysql 使用 Windows API 通过 UTF-16LE 与控制台通信,并通过 UTF-8 与服务器通信。(前面提到的菜单项按上述方式设置字体和字符集。)
为避免每次运行 mysql 时都执行这些步骤,你可以创建一个快捷方式来调用 mysql.exe。该快捷方式应将控制台字体设置为 Lucida Console 或其他一些兼容的 Unicode 字体,并将 --default-character-set=utf8mb4
(或 utf8mb3
)选项传递给 mysql.exe。
或者,创建一个仅设置控制台字体的快捷方式,并在 my.ini
文件的 [mysql]
组中设置字符集:
[mysql]
default-character-set=utf8mb4 # or utf8mb3
垂直显示查询结果
一些查询结果以垂直方式显示时,比以通常的水平表格格式显示时可读性更强。可以通过在查询末尾使用 \G 而非分号来垂直显示查询结果。例如,包含换行符的较长文本值在垂直输出时通常更容易阅读:
mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G
*************************** 1. row ***************************
msg_nro: 3068
date: 2000-03-01 23:29:50
time_zone: +0200
mail_from: Jones
reply: jones@example.com
mail_to: "John Smith" <smith@example.com>
sbj: UTF-8
txt: >>>>> "John" == John Smith writes:
John> Hi. I think this is a good idea. Is anyone familiar
John> with UTF-8 or Unicode? Otherwise, I'll put this on my
John> TODO list and see what happens.
Yes, please do that.
Regards,
Jones
file: inbox-jani-1
hash: 190402944
1 row in set (0.09 sec)
使用安全更新模式(--safe-updates)
对于初学者来说,一个有用的启动选项是--safe-updates
(或者--i-am-a-dummy
,二者效果相同)。当你可能发出了UPDATE
或DELETE
语句但忘记了指示要修改哪些行的 WHERE
子句时,安全更新模式会很有帮助。通常情况下,此类语句会更新或删除表中的所有行。使用 --safe-updates
,你只能通过指定标识行的键值或 LIMIT
子句,或者二者皆指定,来修改行。这有助于防止意外发生。安全更新模式还会限制可能产生(或预计会产生)非常大的结果集的SELECT
语句。
--safe-updates
选项会使mysql
在连接到MySQL服务器时执行以下语句,以设置sql_safe_updates
、sql_select_limit
和max_join_size
系统变量的会话值:
SET sql_safe_updates=1, sql_select_limit=1000, max_join_size=1000000;
SET
语句对语句处理的影响如下:
-
启用
sql_safe_updates
后,如果UPDATE
和DELETE
语句在WHERE
子句中未指定键约束,或未提供LIMIT
子句,或两者皆无,则会产生错误。例如:UPDATE tbl_name SET not_key_column=val WHERE key_column=val; UPDATE tbl_name SET not_key_column=val LIMIT 1;
-
将
sql_select_limit
设置为1000会使服务器将所有SELECT
结果集限制为1000行,除非语句中包含LIMIT
子句。 -
将
max_join_size
设置为 1000000 会导致多表SELECT
语句产生错误,如果服务器估计必须检查超过 1000000 行组合。
要指定不同于1000和1000000的结果集限制,可以在调用mysql时使用--select-limit
和--max-join-size
选项来覆盖默认值:
mysql --safe-updates --select-limit=500 --max-join-size=10000
在安全更新模式下,即使在WHERE
子句中指定了键,UPDATE
和DELETE
语句仍有可能产生错误,如果优化器决定不使用键列上的索引的话:
- 如果内存使用量超过系统变量
range_optimizer_max_mem_size
所允许的范围,则无法使用索引的范围访问。此时优化器将回退到全表扫描。请参阅 限制范围优化的内存使用。 - 如果键比较需要类型转换,则可能不会使用索引(请参见10.3.1节,“MySQL如何使用索引”)。假设使用
WHERE c1 =<br /> 2222
将带索引的字符串列c1
与一个数值进行比较。对于此类比较,字符串值会转换为数字,然后对操作数进行数值比较(请参见14.3节,“表达式求值中的类型转换”),这会导致无法使用索引。如果启用了安全更新模式,则会发生错误。
从 MySQL 8.0.13 开始,安全更新模式还包含以下行为:
- 使用带有
UPDATE
和DELETE
语句的EXPLAIN
不会产生安全更新错误。这使得可以使用EXPLAIN
加上SHOW WARNINGS
来查看为什么不使用索引,这在诸如range_optimizer_max_mem_size
违规或发生类型转换,且优化器即使在WHERE
子句中指定了键列也不使用索引的情况下会很有帮助。 - 当发生安全更新错误时,错误消息会包含生成的第一个诊断信息,以提供有关失败原因的信息。例如,该消息可能表明超过了
range_optimizer_max_mem_size
值,或者发生了类型转换,这两种情况中的任何一种都可能导致无法使用索引。 - 对于多表删除和更新操作,仅当任何目标表使用表扫描时,在启用安全更新的情况下才会产生错误。
禁用MySQL自动重连
如果mysql客户端在发送语句时与服务器的连接丢失,它会立即自动尝试重新连接服务器一次并再次发送该语句。但是,即使mysql重新连接成功,您的第一个连接也已结束,并且之前所有的会话对象和设置都会丢失:临时表、自动提交模式以及用户定义变量和会话变量。此外,任何当前事务都会回滚。这种行为可能对您有危险,例如在以下示例中,服务器在第一条和第二条语句之间在您不知情的情况下关闭并重新启动:
mysql> SET @a=1;
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO t VALUES(@a);
ERROR 2006: MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 1
Current database: test
Query OK, 1 row affected (1.30 sec)
mysql> SELECT * FROM t;
+------+
| a |
+------+
| NULL |
+------+
1 row in set (0.05 sec)
@a
用户变量随连接丢失,重新连接后未定义。如果连接丢失时让mysql以错误终止很重要,你可以使用--skip-reconnect
选项启动mysql客户端。
有关自动重连及其在发生重连时对状态信息的影响的更多信息,请参阅自动重连控制。
MySQL客户端解析器与服务器解析器对比
mysql客户端在客户端使用的解析器,并非是服务器端mysqld服务器所使用的完整解析器的副本。这可能会导致对某些结构的处理方式存在差异。例如:
-
如果启用了
ANSI_QUOTES
SQL模式,服务器解析器会将由"
字符分隔的字符串视为标识符,而不是普通字符串。mysql 客户端解析器不会考虑
ANSI_QUOTES
SQL 模式。无论ANSI_QUOTES
是否启用,它都将由"
、'
和 ``` 字符分隔的字符串视为相同。 -
在
/*! ... */
和/*+ ...<br /> */
注释内,mysql 客户端解析器会解释简写形式的 mysql 命令。服务器解析器不会解释它们,因为这些命令在服务器端没有意义。如果希望 mysql 不在注释中解释简写命令,一种部分解决方法是使用
--binary-mode
选项,该选项会在非交互模式下(对于通过管道输入到 mysql 或使用source
命令加载的输入)禁用所有 mysql 命令,但\C
和\d
除外。
6.5.2 mysqladmin——MySQL服务器管理程序
mysqladmin 是用于执行管理操作的客户端。你可以使用它来检查服务器的配置和当前状态、创建和删除数据库等。
像这样调用mysqladmin:
mysqladmin [options] command [command-arg] [command [command-arg]] ...
mysqladmin 支持以下命令。有些命令在命令名后需要跟一个参数。
-
create *
db_name*
创建一个名为
db_name
的新数据库。 -
debug
在 MySQL 8.0.20 之前,告知服务器将调试信息写入错误日志。连接的用户必须具有
SUPER
权限。此信息的格式和内容可能会发生变化。这包括有关事件调度器的信息。请参阅27.4.5节,“事件调度器状态”。
-
drop *
db_name*
删除名为
db_name
的数据库及其所有表。 -
extended-status
显示服务器状态变量及其值。
-
flush-hosts
刷新主机缓存中的所有信息。请参阅7.1.12.3节“DNS查找与主机缓存”。
-
flush-logs [*
log_type* ...]
刷新所有日志。
mysqladmin flush-logs
命令允许指定可选的日志类型,以指明要刷新哪些日志。在flush-logs
命令之后,可以提供一个由一个或多个下列日志类型组成的空格分隔列表:binary
、engine
、error
、general
、relay
、slow
。这些日志类型与可为FLUSH LOGS
SQL语句指定的日志类型相对应。 -
flush-privileges
重新加载授权表(与
reload
相同)。 -
flush-status
清除状态变量。
-
flush-tables
刷新所有表。
-
flush-threads
刷新线程缓存。
-
kill *
id*,*
id*,...
终止服务器线程。如果指定了多个线程ID值,列表中不能有空格。
要终止属于其他用户的线程,已连接的用户必须拥有
CONNECTION_ADMIN
权限(或已弃用的SUPER
权限)。 -
password *
new_password*
设置一个新密码。这会将用于通过 mysqladmin 连接到服务器的账户的密码更改为
new_password
。因此,下次使用同一账户调用 mysqladmin(或任何其他客户端程序)时,必须指定新密码。警告
使用mysqladmin设置密码应被视为不安全。在某些系统上,你的密码会对系统状态程序(如ps)可见,其他用户可能会调用该程序来显示命令行。MySQL客户端通常会在初始化过程中用零覆盖命令行密码参数。然而,在很短的一段时间内,该值仍是可见的。此外,在某些系统上,这种覆盖策略无效,密码对ps仍然可见。(SystemV Unix系统以及其他一些系统可能会存在此问题。)
如果
new_password
值包含空格或其他对你的命令解释器来说特殊的字符,你需要将其用引号括起来。在Windows系统上,务必使用双引号而非单引号;单引号不会从密码中去除,而是会被解释为密码的一部分。例如:mysqladmin password "my new password"
新密码可以在 password 命令之后省略。在这种情况下,mysqladmin 会提示输入密码值,这样您就可以避免在命令行中指定密码。仅当 password 是 mysqladmin 命令行中的最后一个命令时,才应省略密码值。否则,下一个参数将被视为密码。
注意
如果服务器是使用
--skip-grant-tables
选项启动的,则不要使用此命令。不会应用密码更改。即使在同一命令行上在password
命令之前加上flush-privileges
来重新启用授权表,情况也是如此,因为刷新操作是在连接之后发生的。但是,你可以使用 mysqladmin flush-privileges 来重新启用授权表,然后使用单独的 mysqladmin password 命令来更改密码。 -
ping
检查服务器是否可用。如果服务器正在运行,mysqladmin 返回的状态码为0;如果未运行,则为1。即使出现诸如
Access denied
这样的错误,状态码仍为0,因为这意味着服务器正在运行但拒绝了连接,这与服务器未运行的情况不同。 -
processlist
显示活动服务器线程的列表。这类似于
SHOW PROCESSLIST
语句的输出。如果给出了--verbose
选项,输出类似于SHOW FULL PROCESSLIST
的输出。(请参见 第15.7.7.29节,“SHOW PROCESSLIST 语句”。) -
reload
重新加载授权表。
-
refresh
刷新所有表并关闭和打开日志文件。
-
shutdown
停止服务器。
-
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之前使用此命令。
-
variables
显示服务器系统变量及其值。
-
version
显示来自服务器的版本信息。
所有命令都可以缩短为任意唯一前缀。例如:
$> 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服务器已运行的秒数。
-
Threads
活动线程(客户端)的数量。
-
服务器启动以来来自客户端的问题(查询)数量。
-
Slow queries
执行时间超过
long_query_time
秒的查询数量。请参阅 7.4.5节,“慢查询日志”。 -
Opens
服务器已打开的表的数量。
-
Flush tables
服务器已执行的
flush-*
、refresh
和reload
命令的数量。 -
Open tables
当前处于打开状态的表的数量。
如果使用Unix套接字文件连接到本地服务器时执行mysqladmin shutdown,mysqladmin 会等待,直到服务器的进程ID文件被删除,以确保服务器已正常停止。
mysqladmin 支持以下选项,这些选项可以在命令行中指定,也可以在选项文件的 [mysqladmin]
和 [client]
组中指定。有关 MySQL 程序使用的选项文件的信息,请参阅 6.2.2.2 节,“使用选项文件”。
表6.13 mysqladmin选项
-
--help
,-?
命令行格式 --help
显示帮助信息并退出。
-
命令行格式 --bind-address=ip_address
在具有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口。
-
--character-sets-dir=*
dir_name*
命令行格式 --character-sets-dir=path
类型 字符串 默认值 [none]
安装字符集的目录。请参阅12.15节“字符集配置”。
-
--compress
,-C
| 命令行格式 |
--compress[={OFF|ON}]
|
| :--------- | ----------------------- |
| 已弃用 | |
| 类型 | 布尔值 |
| 默认值 |OFF
|如果可能,压缩客户端与服务器之间发送的所有信息。请参阅6.2.8节 “连接压缩控制”。
从 MySQL 8.0.18 开始,此选项已被弃用。预计它将在 MySQL 的未来版本中移除。请参阅配置旧版连接压缩。
-
--compression-algorithms=*
value*
命令行格式 --compression-algorithms=value
引入 类型 设置 默认值 uncompressed
有效取值 zlib``zstd``uncompressed
与服务器建立连接时允许使用的压缩算法。可用算法与
protocol_compression_algorithms
系统变量中的算法相同。默认值为uncompressed
。有关更多信息,请参阅6.2.8节,“连接压缩控制”。
此选项是在MySQL 8.0.18中添加的。
-
命令行格式 --connect-timeout=value
类型 数值型 默认值 43200
连接超时前的最大秒数。默认值为43200(12小时)。
-
--count=N
,-c N
命令行格式 --count=#
如果给出
--sleep
选项,重复执行命令时要进行的迭代次数。 -
--debug[=debug_options\]
,-#<br /> [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
类型 布尔值 默认值 FALSE
程序退出时打印一些调试信息。
只有在使用
WITH_DEBUG
构建MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件并非使用此选项构建。 -
命令行格式 --debug-info
类型 布尔值 默认值 FALSE
程序退出时,打印调试信息以及内存和CPU使用情况统计信息。
只有在使用
WITH_DEBUG
构建MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件未使用此选项构建。 -
命令行格式 --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
类型 文件名 仅使用给定的选项文件。如果该文件不存在或以其他方式无法访问,则会出现错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录的路径。异常:即使使用
--defaults-file
,客户端程序仍会读取.mylogin.cnf
。有关此选项和其他选项文件选项的更多信息,请参阅 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-group-suffix=str
类型 字符串 不仅读取通常的选项组,还读取具有常用名称且后缀为
str
的组。例如,mysqladmin 通常会读取[client]
和[mysqladmin]
组。如果此选项指定为--defaults-group-suffix=_other
,mysqladmin 还会读取[client_other]
和[mysqladmin_other]
组。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节,“影响选项文件处理的命令行选项”。
-
命令行格式 --enable-cleartext-plugin
类型 布尔值 默认值 FALSE
启用
mysql_clear_password
明文身份验证插件。(请参阅8.4.1.4节,“客户端明文可插拔身份验证”。) -
--force
,-f
(直接返回,因为无法翻译,内容是命令行参数相关格式,保留原样)命令行格式 --force
不要为
drop<br /> db_name
命令请求确认。对于多个命令,即使发生错误也继续执行。 -
命令行格式 --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
类型 字符串 从
.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
来阻止读取这些选项。例外情况是,无论在何种情况下,都会读取
.mylogin.cnf
文件(如果它存在)。这使得即使在使用--no-defaults
时,也能以比在命令行上更安全的方式指定密码。要创建.mylogin.cnf
,请使用 mysql_config_editor 实用程序。请参阅 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
--password[=password\]
,-p[password]
命令行格式 --password[=password]
类型 字符串 用于连接服务器的MySQL账户的密码。密码值是可选的。如果未提供,mysqladmin 会提示输入密码。如果提供了密码,在
--password=
或-p
与随后的密码之间不得有空格。如果未指定密码选项,默认不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中输入密码,请使用选项文件。请参阅8.1.2.1节,“密码安全的最终用户指南”。
要显式指定无密码且mysqladmin不应提示输入密码,请使用
--skip-password
选项。 -
用于连接服务器的MySQL账户的多因素身份验证因素1的密码。密码值是可选的。如果未提供,mysql 会提示输入密码。如果提供了密码,则
--password1=
与其后的密码之间不得有空格。如果未指定密码选项,默认情况下不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中输入密码,请使用选项文件。请参阅 8.1.2.1 节,“密码安全的最终用户指南”。
要明确指定没有密码,且mysqladmin不应提示输入密码,请使用
--skip-password1
选项。--password1
和--password
是同义词,--skip-password1
和--skip-password
也是同义词。 -
用于连接服务器的MySQL账户的多因素身份验证因素2的密码。此选项的语义与
--password1
的语义类似;详细信息请参阅该选项的说明。 -
用于连接服务器的MySQL账户的多因素身份验证因素3的密码。此选项的语义与
--password1
的语义类似;详情请参阅该选项的说明。 -
--pipe
,-W
""" 所在语境: --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] --pipe,-W 命令行格式 类型 字符串 翻译: """ --管道,-W命令行格式 --pipe
类型 字符串 在Windows上,使用命名管道连接到服务器。此选项仅在服务器启动时启用了
named_pipe
系统变量以支持命名管道连接时才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的Windows组的成员。 -
命令行格式 --plugin-dir=dir_name
类型 目录名称 用于查找插件的目录。如果使用
--default-auth
选项指定身份验证插件,但mysqladmin找不到该插件,请指定此选项。请参阅8.2.17节,“可插拔身份验证”。 -
--port=port_num
,-P port_num
命令行格式 --port=port_num
类型 数值 默认值 3306
对于TCP/IP连接,要使用的端口号。
-
命令行格式 --print-defaults
打印程序名称以及它从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --protocol=type
类型 字符串 默认值 [see text]
有效取值 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
类型 文件名 包含服务器基于RSA密钥对的密码交换所需公钥的客户端副本的PEM格式文件的路径名。此选项适用于使用
sha256_password
或caching_sha2_password
身份验证插件进行身份验证的客户端。对于不使用这些插件之一进行身份验证的账户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。如果给出
--server-public-key-path=file_name
并指定了一个有效的公钥文件,则它优先于--get-server-public-key
。对于
sha256_password
,只有在使用OpenSSL构建MySQL时,此选项才适用。有关
sha256_password
和caching_sha2_password
插件的信息,请参阅8.4.1.3节,“SHA-256可插拔身份验证”以及8.4.1.2节,“缓存SHA-2可插拔身份验证”。 -
--shared-memory-base-name=*
name*
命令行格式 --shared-memory-base-name=name
特定平台 Windows操作系统 在Windows上,使用共享内存连接到本地服务器时要使用的共享内存名称。默认值为
MYSQL
。共享内存名称区分大小写。此选项仅在服务器启动时启用了系统变量
shared_memory
以支持共享内存连接的情况下适用。 -
命令行格式 --show-warnings
显示发送到服务器的语句执行所产生的警告。
-
--shutdown-timeout=*
value* 等待服务器关闭的最长秒数。默认值为3600(1小时)。
命令行格式 --shutdown-timeout=seconds
类型 数值 默认值 3600
等待服务器关闭的最长秒数。默认值为3600(1小时)。
-
--silent
,-s
命令行格式 --silent
如果无法建立与服务器的连接,则静默退出。
-
--sleep=delay
,-i delay
命令行格式 --sleep=delay
重复执行命令,每次执行之间休眠
delay
秒。--count
选项决定迭代次数。如果未给出--count
,mysqladmin将无限期执行命令,直到被中断。 -
--socket=path
,-S path
对于到 localhost 的连接,要使用的 Unix 套接字文件,或者在 Windows 上,要使用的命名管道的名称。 在 Windows 上,只有在启用 named_pipe 系统变量以支持命名管道连接的情况下启动服务器,此选项才适用。此外,进行连接的用户必须是由 named_pipe_full_access_group 系统变量指定的 Windows 组的成员。 以 --ssl 开头的选项指定是否使用加密连接到服务器,并指明在何处查找 SSL 密钥和证书。请参阅 加密连接的命令选项。 --ssl-fips-mode={OFF|ON|STRICT} 已弃用 枚举 (注:你提供的文本中"""内内容其实就是你提供的语境,所以直接重复输出并适当翻译了下周边语境辅助理解 。若实际需求并非如此,请明确说明。)| 命令行格式 |
--socket={file_name|pipe_name}
|
| :--------- | -------------------------------- |
| 类型 | 字符串 |对于与
localhost
的连接,要使用的Unix套接字文件,或者在Windows上,要使用的命名管道的名称。在Windows系统上,只有在启用
named_pipe
系统变量以支持命名管道连接的情况下启动服务器,此选项才会生效。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的Windows组的成员。 -
--ssl*
以
--ssl
开头的选项用于指定是否使用加密连接到服务器,并指明在何处查找SSL密钥和证书。请参阅 加密连接的命令选项。 -
| 命令行格式 |
--ssl-fips-mode={OFF|ON|STRICT}
|
| :--------- | --------------------------------- |
| 已弃用 | |
| 类型 | 枚举 |
| 默认值 |OFF
|
| 有效取值 |OFF``ON``STRICT
|控制是否在客户端启用FIPS模式。
--ssl-fips-mode
选项与其他--ssl-xxx
选项的不同之处在于,它并非用于建立加密连接,而是用于影响允许哪些加密操作。请参阅8.8节 “FIPS支持”。这些
--ssl-fips-mode
值是允许的:OFF
:禁用FIPS模式。ON
:启用FIPS模式。STRICT
:启用“严格”FIPS模式。
注意
如果OpenSSL FIPS对象模块不可用,
--ssl-fips-mode
唯一允许的值是OFF
。在这种情况下,将--ssl-fips-mode
设置为ON
或STRICT
会导致客户端在启动时发出警告并以非FIPS模式运行。从 MySQL 8.0.34 开始,此选项已被弃用。预计它将在未来的 MySQL 版本中移除。
-
--tls-ciphersuites=*
ciphersuite_list*
命令行格式 --tls-ciphersuites=ciphersuite_list
引入 类型 字符串 用于使用TLSv1.3的加密连接的可允许密码套件。该值是一个或多个以冒号分隔的密码套件名称的列表。可用于此选项的密码套件取决于用于编译MySQL的SSL库。有关详细信息,请参阅8.3.2节,“加密连接TLS协议和密码”。
此选项是在MySQL 8.0.16中添加的。
-
命令行格式 --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]
如果无法建立连接,则等待并重试,而不是中止。如果给出了 count 值,则表示重试次数。默认重试一次。命令行格式 --wait
如果无法建立连接,应等待并重试,而不是中止。如果给出了
count
值,则表示重试次数。默认重试一次。 -
命令行格式 --zstd-compression-level=#
引入 类型 整数 用于与服务器建立连接时使用
zstd
压缩算法的压缩级别。允许的级别范围是1到22,数值越大表示压缩程度越高。默认的zstd
压缩级别为3。此压缩级别设置对不使用zstd
压缩的连接无效。如需更多信息,请参阅6.2.8节,“连接压缩控制”。
此选项是在MySQL 8.0.18中添加的。
6.5.3 mysqlcheck——表维护程序
mysqlcheck
客户端执行表维护操作:它可检查表、修复表、优化表或分析表。
每张表在处理过程中都会被锁定,因此其他会话无法访问该表。不过,对于检查操作,仅使用READ
锁锁定表(有关READ
锁和WRITE
锁的详细信息,请参阅15.3.6节,“LOCK TABLES和UNLOCK TABLES语句”)。表维护操作可能很耗时,尤其是对于大型表。如果使用--databases
或--all-databases
选项来处理一个或多个数据库中的所有表,调用mysqlcheck可能需要很长时间。(如果MySQL升级过程确定需要检查表,因为它以相同的方式处理表,那么升级过程也是如此。)
必须在mysqld 服务器运行时使用mysqlcheck,这意味着无需停止服务器即可执行表维护。
mysqlcheck
以一种方便用户的方式使用 SQL 语句 CHECK TABLE
、REPAIR TABLE
、ANALYZE TABLE
和 OPTIMIZE TABLE
。它确定要对所需执行的操作使用哪些语句,然后将这些语句发送到服务器执行。有关每个语句适用于哪些存储引擎的详细信息,请参阅第 15.7.3 节“表维护语句”中的相关语句说明。
并非所有存储引擎都一定支持这四种维护操作。在这种情况下,会显示一条错误消息。例如,如果 test.t
是一个 MEMORY
表,尝试对其进行检查会产生以下结果:
$> mysqlcheck test t
test.t
note : The storage engine for the table doesn't support check
如果 mysqlcheck 无法修复表,请参阅3.14节,“重建或修复表或索引”,了解手动修复表的策略。例如,对于 InnoDB 表就是这种情况,这类表可以使用 CHECK TABLE 进行检查,但不能使用 REPAIR TABLE 进行修复。
注意
最好在执行表修复操作之前对表进行备份;在某些情况下,该操作可能会导致数据丢失。可能的原因包括但不限于文件系统错误。
通常有三种方式来调用mysqlcheck:
mysqlcheck [options] db_name [tbl_name ...]
mysqlcheck [options] --databases db_name ...
mysqlcheck [options] --all-databases
如果在 db_name
之后未指定任何表,或者使用了 --databases
或 --all-databases
选项,则会检查整个数据库。
与其他客户端程序相比,[**mysqlcheck**](https://dev.mysql.com/doc/refman/8.0/en/mysqlcheck.html)
有一个特殊功能。检查表的默认行为([
--check](https://dev.mysql.com/doc/refman/8.0/en/mysqlcheck.html#option_mysqlcheck_check)
)可以通过重命名二进制文件来更改。如果你想要一个默认修复表的工具,你只需复制一份 [**mysqlcheck**](https://dev.mysql.com/doc/refman/8.0/en/mysqlcheck.html)
并命名为 **mysqlrepair**
,或者创建一个指向 [**mysqlcheck**](https://dev.mysql.com/doc/refman/8.0/en/mysqlcheck.html)
的符号链接并命名为 **mysqlrepair**
。如果你调用 **mysqlrepair**
,它将修复表。
下表中所示的名称可用于更改mysqlcheck的默认行为。
命令 | 含义 |
---|---|
mysql修复 | 默认选项是 --repair |
mysql分析 | 默认选项是 --analyze |
mysql优化 | 默认选项是 --optimize |
mysqlcheck 支持以下选项,这些选项可以在命令行中指定,也可以在选项文件的 [mysqlcheck]
和 [client]
组中指定。有关 MySQL 程序使用的选项文件的信息,请参阅 6.2.2.2 节,“使用选项文件”。
表6.14 mysqlcheck选项
-
--help
,-?
命令行格式 --help
显示帮助信息并退出。
-
命令行格式 --all-databases
检查所有数据库中的所有表。这与使用
--databases
选项并在命令行中指定所有数据库的效果相同,只是不会检查INFORMATION_SCHEMA
和performance_schema
数据库。可以通过使用--databases
选项显式指定它们来进行检查。 -
--all-in-1
,-1
命令行格式 --all-in-1
不必为每个表发布一条语句,而是为每个数据库执行一条语句,该语句列出要处理的来自该数据库的所有表。
-
--analyze
,-a
(选项)--analyze,-a (用于)分析表。命令行格式 命令行格式 命令行格式 命令行格式 --analyze
分析这些表。
-
命令行格式 --auto-repair
如果一个已检查的表损坏,自动修复它。所有表检查完毕后,再进行任何必要的修复。
-
命令行格式 --bind-address=ip_address
在具有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口。
-
--character-sets-dir=*
dir_name*
命令行格式 --character-sets-dir=dir_name
类型 目录名称 安装字符集的目录。请参阅第12.15节“字符集配置”。
-
--check
,-c
命令行格式 --check
检查表中是否存在错误。这是默认操作。
-
命令行格式 --check-only-changed
只检查自上次检查以来发生更改的表,或未正确关闭的表。
-
--check-upgrade
,-g
:使用FOR UPGRADE选项调用CHECK TABLE,检查表与当前服务器版本的兼容性。命令行格式 --check-upgrade
使用
FOR UPGRADE
选项调用CHECK TABLE
,以检查表与服务器当前版本是否存在不兼容问题。 -
| 命令行格式 |
--compress[={OFF|ON}]
|
| :--------- | ----------------------- |
| 已弃用 | |
| 类型 | 布尔值 |
| 默认值 |OFF
|如果可能,压缩客户端与服务器之间发送的所有信息。请参阅6.2.8节 “连接压缩控制”。
从 MySQL 8.0.18 开始,此选项已弃用。预计它将在 MySQL 的未来版本中移除。请参阅配置旧版连接压缩。
-
--compression-algorithms=*
value*
命令行格式 --compression-algorithms=value
引入时间 类型 设置 默认值 uncompressed
有效取值 zlib``zstd``uncompressed
与服务器建立连接时允许使用的压缩算法。可用的算法与系统变量
protocol_compression_algorithms
相同。默认值为uncompressed
。有关更多信息,请参阅6.2.8节,“连接压缩控制”。
此选项是在MySQL 8.0.18中添加的。
-
--databases
,-B
命令行格式 --databases
处理指定数据库中的所有表。通常情况下,mysqlcheck 将命令行中的第一个名称参数视为数据库名,后续的任何名称视为表名。使用此选项时,它会将所有名称参数都视为数据库名。
-
--debug[=debug_options\]
,-#<br /> [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
类型 布尔值 默认值 FALSE
程序退出时打印一些调试信息。
只有在使用
WITH_DEBUG
编译MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件不会使用此选项进行编译。 -
命令行格式 --debug-info
类型 布尔值 默认值 FALSE
程序退出时打印调试信息以及内存和CPU使用情况统计信息。
此选项仅在MySQL是使用
WITH_DEBUG
构建时才可用。Oracle提供的MySQL发行版二进制文件未使用此选项构建。 -
命令行格式 --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
类型 文件名 仅使用给定的选项文件。如果该文件不存在或以其他方式无法访问,则会发生错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录的路径。异常:即使使用
--defaults-file
,客户端程序仍会读取.mylogin.cnf
。有关此选项及其他选项文件选项的更多信息,请参阅 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-group-suffix=str
类型 字符串 不仅读取常规的选项组,还读取具有常规名称且后缀为
str
的组。例如,mysqlcheck通常读取[client]
和[mysqlcheck]
组。如果将此选项指定为--defaults-group-suffix=_other
,mysqlcheck还会读取[client_other]
和[mysqlcheck_other]
组。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
--extended
,-e
命令行格式 --extended
如果你使用此选项来检查表,它将确保这些表完全一致,但会花费较长时间。
如果您使用此选项来修复表,它将运行扩展修复,这不仅可能需要很长时间才能执行完毕,而且还可能产生大量垃圾行!
-
--default-auth=*
plugin*:指定使用哪个客户端身份验证插件的提示。请参阅 8.2.17节,“可插拔身份验证”。 --default-auth=插件
命令行格式 --default-auth=plugin
类型 字符串 关于使用哪个客户端身份验证插件的提示。请参阅 8.2.17节,“可插拔身份验证”。
-
命令行格式 --enable-cleartext-plugin
类型 布尔值 默认值 FALSE
启用
mysql_clear_password
明文身份验证插件。(请参阅8.4.1.4节,“客户端明文可插拔身份验证”。) -
--fast
,-F
命令行格式 --fast
仅检查未正确关闭的表。
-
--force
,-f
(即使)发生SQL错误仍继续执行。 --force,-f (即便)出现SQL错误也继续。 --force,-f (就算)出现SQL错误依旧继续。命令行格式 --force
即使发生SQL错误也继续执行。
-
命令行格式 --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
--主机=主机名,-h 主机名命令行格式 --host=host_name
类型 字符串 默认值 localhost
连接到给定主机上的 MySQL 服务器。
-
命令行格式 --login-path=name
类型 字符串 从
.mylogin.cnf
登录路径文件中指定的登录路径读取选项。“登录路径”是一个选项组,其中包含指定要连接到哪个MySQL服务器以及以哪个账户进行身份验证的选项。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参阅6.6.7节,“mysql_config_editor — MySQL配置实用程序”。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
--medium-check
,-m
执行一项比--extended操作更快的检查。此操作仅能发现所有错误中的99.99%,但在大多数情况下这已足够。 --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命令行格式 --medium-check
执行一项比
--extended
操作更快的检查。这只能发现所有错误中的99.99%,但在大多数情况下这应该足够了。 -
命令行格式 --no-defaults
不读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,可以使用
--no-defaults
来阻止读取这些选项。例外情况是,无论如何都会读取
.mylogin.cnf
文件(如果该文件存在)。这使得即使在使用--no-defaults
时,也能以比在命令行上更安全的方式指定密码。要创建.mylogin.cnf
,请使用 mysql_config_editor 实用程序。请参阅 6.6.7节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节,“影响选项文件处理的命令行选项”。
-
--optimize
,-o
命令行格式 --optimize
优化表。
-
--password[=password\]
,-p[password]
命令行格式 --password[=password]
类型 字符串 用于连接服务器的MySQL账户的密码。密码值是可选的。如果未提供,mysqlcheck 会提示输入密码。如果提供了密码,在
--password=
或-p
与随后的密码之间不得有空格。如果未指定密码选项,默认情况下不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中提供密码,请使用选项文件。请参阅8.1.2.1节,“密码安全的最终用户指南”。
要显式指定没有密码且mysqlcheck不应提示输入密码,请使用
--skip-password
选项。 -
用于连接服务器的MySQL账户的多因素身份验证因素1的密码。密码值是可选的。如果未提供,mysqlcheck 会提示输入。如果提供,
--password1=
与其后的密码之间不得有空格。如果未指定密码选项,默认不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中输入密码,请使用选项文件。请参阅8.1.2.1节,“用户密码安全指南”。
要显式指定没有密码且mysqlcheck不应提示输入密码,请使用
--skip-password1
选项。--password1
和--password
是同义词,--skip-password1
和--skip-password
也是同义词。 -
用于连接服务器的MySQL账户的多因素身份验证因子2的密码。此选项的语义与
--password1
的语义类似;详情请参阅该选项的说明。 -
用于连接服务器的MySQL账户的多因素身份验证因素3的密码。此选项的语义与
--password1
的语义类似;详情请参阅该选项的说明。 -
--pipe
,-W
在 Windows 系统上,使用命名管道连接到服务器。此选项仅在服务器启动时启用了named_pipe系统变量以支持命名管道连接时才适用。此外,进行连接的用户必须是named_pipe_full_access_group系统变量指定的 Windows 组的成员。 所以翻译为: --pipe,-W:在Windows系统上,使用命名管道连接到服务器。此选项仅在服务器启动时启用了named_pipe系统变量以支持命名管道连接时才适用。此外,进行连接的用户必须是named_pipe_full_access_group系统变量指定的Windows组的成员。 (这里只是对该部分结合语境做了表意,原内容--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
打印程序名称以及从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --protocol=type
类型 字符串 默认值 [see text]
有效取值 TCP``SOCKET``PIPE``MEMORY
用于连接服务器的传输协议。当其他连接参数通常导致使用的协议并非您想要的协议时,此参数很有用。有关允许值的详细信息,请参阅 6.2.7 节“连接传输协议”。
-
--quick
,-q
命令行格式 --quick
如果您使用此选项检查表,它将阻止检查扫描行以查找错误链接。这是最快的检查方法。
如果您使用此选项修复表,它将尝试仅修复索引树。这是最快的修复方法。
-
--repair
,-r
命令行格式 --repair
执行一种修复操作,该操作几乎可以修复任何问题,但无法修复非唯一的唯一键。
-
命令行格式 --server-public-key-path=file_name
类型 文件名 包含服务器基于RSA密钥对的密码交换所需公钥的客户端副本的PEM格式文件的路径名。此选项适用于使用
sha256_password
或caching_sha2_password
身份验证插件进行身份验证的客户端。对于不使用其中一个插件进行身份验证的账户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。如果指定了
--server-public-key-path=file_name
且该参数指定了一个有效的公钥文件,则它优先于--get-server-public-key
。对于
sha256_password
,只有在MySQL是使用OpenSSL构建时,此选项才适用。有关
sha256_password
和caching_sha2_password
插件的信息,请参阅 8.4.1.3节,“SHA-256 可插拔身份验证” 以及 8.4.1.2节,“缓存式 SHA-2 可插拔身份验证”。 -
命令行格式 --shared-memory-base-name=name
特定平台 Windows操作系统 在Windows上,使用共享内存连接到本地服务器时要使用的共享内存名称。默认值为
MYSQL
。共享内存名称区分大小写。此选项仅在服务器启动时启用了系统变量
shared_memory
以支持共享内存连接的情况下适用。 -
--silent
,-s
命令行格式 --silent
安静模式。仅打印错误消息。
-
命令行格式 --skip-database=db_name
在由 mysqlcheck 执行的操作中,不要包含指定的数据库(区分大小写)。
-
--socket=path
,-S path
| 命令行格式 |
--socket={file_name|pipe_name}
|
| :--------- | -------------------------------- |
| 类型 | 字符串 |对于与
localhost
的连接,要使用的Unix套接字文件,或者在Windows上,要使用的命名管道的名称。在Windows系统上,只有在启用了
named_pipe
系统变量以支持命名管道连接的情况下启动服务器,此选项才会生效。此外,建立连接的用户必须是named_pipe_full_access_group
系统变量指定的Windows组的成员。 -
--ssl*
以
--ssl
开头的选项用于指定是否使用加密连接到服务器,并指明在何处查找SSL密钥和证书。请参阅 加密连接的命令选项。 -
| 命令行格式 |
--ssl-fips-mode={OFF|ON|STRICT}
|
| :--------- | --------------------------------- |
| 已弃用 | |
| 类型 | 枚举 |
| 默认值 |OFF
|
| 有效取值 |OFF``ON``STRICT
|控制是否在客户端启用FIPS模式。
--ssl-fips-mode
选项与其他--ssl-xxx
选项的不同之处在于,它并非用于建立加密连接,而是用于影响允许哪些加密操作。请参阅8.8节“FIPS支持”。这些“--ssl-fips-mode”值是允许的:
OFF
:禁用FIPS模式。ON
:启用FIPS模式。STRICT
:启用“严格”FIPS模式。
注意
如果OpenSSL FIPS对象模块不可用,
--ssl-fips-mode
唯一允许的值是OFF
。在这种情况下,将--ssl-fips-mode
设置为ON
或STRICT
会导致客户端在启动时生成警告并以非FIPS模式运行。从 MySQL 8.0.34 开始,此选项已被弃用。预计它将在未来的 MySQL 版本中移除。
-
命令行格式 --tables
覆盖
--databases
或-B
选项。该选项之后的所有名称参数都将被视为表名。 -
--tls-ciphersuites=*
ciphersuite_list*
命令行格式 --tls-ciphersuites=ciphersuite_list
引入 类型 字符串 用于使用TLSv1.3的加密连接的可允许密码套件。该值是一个或多个以冒号分隔的密码套件名称的列表。此选项可指定的密码套件取决于编译MySQL时使用的SSL库。有关详细信息,请参阅 8.3.2节,“加密连接TLS协议和密码”。
此选项是在MySQL 8.0.16中添加的。
-
命令行格式 --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
对于
MyISAM
表的修复操作,从数据字典中获取表结构,以便即使.MYI
头部损坏,也能修复表。 -
--user=user_name
,-u user_name
命令行格式 --user=user_name,
类型 字符串 用于连接服务器的MySQL账户的用户名。
-
--verbose
,-v
命令行格式 --verbose
详细模式。打印有关程序运行各个阶段的信息。
-
--version
,-V
显示版本信息并退出。命令行格式 --version
显示版本信息并退出。
-
命令行格式 --write-binlog
此选项默认启用,这样由
ANALYZE TABLE
生成的ANALYZE TABLE、OPTIMIZE TABLE
和REPAIR TABLE
语句会写入二进制日志。使用--skip-write-binlog
可使语句中添加NO_WRITE_TO_BINLOG
,这样这些语句就不会被记录。当这些语句不应发送到副本,或者在使用二进制日志从备份恢复时不应运行时,使用--skip-write-binlog
。 -
命令行格式 --zstd-compression-level=#
引入 类型 整数 用于与服务器建立连接时使用
zstd
压缩算法的压缩级别。允许的级别范围是1到22,数值越大表示压缩程度越高。默认的zstd
压缩级别为3。压缩级别设置对不使用zstd
压缩的连接没有影响。有关更多信息,请参阅6.2.8节,“连接压缩控制”。
此选项是在 MySQL 8.0.18 中添加的。
6.5.4 mysqldump——数据库备份程序
mysqldump
客户端实用程序执行逻辑备份,生成一组SQL语句,这些语句可以执行以重现原始数据库对象定义和表数据。它转储一个或多个MySQL数据库,用于备份或将其转移到另一个SQL服务器。mysqldump
命令还可以生成CSV、其他分隔文本或XML格式的输出。
提示
建议使用 MySQL Shell 转储实用程序,该程序支持多线程并行转储、文件压缩和进度信息显示,还具备云功能,如 Oracle 云基础设施对象存储流,以及 MySQL HeatWave 兼容性检查和修改。使用 MySQL Shell 加载转储实用程序 可轻松将转储内容导入到 MySQL Server 实例或 MySQL HeatWave 数据库系统。MySQL Shell 的安装说明可在 此处 找到。
- 性能与可扩展性注意事项
- 调用语法
- 选项语法 - 按字母顺序汇总
- 连接选项
- 选项文件选项
- 数据定义语言选项
- 调试选项
- 帮助选项
- 国际化选项
- 复制选项
- 格式选项
- 筛选选项
- 性能选项
- 事务选项
- 选项组
- 示例
- 限制
mysqldump
至少需要对转储表具有SELECT
权限,对转储视图具有SHOW VIEW
权限,对转储触发器具有TRIGGER
权限,如果未使用--single-transaction
选项,则需要LOCK TABLES
权限,如果未使用--no-tablespaces
选项(从MySQL 8.0.21起),则需要PROCESS
权限,并且(从MySQL 8.0.32起)如果同时设置了gtid_mode=ON
和gtid_purged=ON|AUTO
,使用--single-transaction
选项时需要RELOAD
或FLUSH_TABLES
权限。某些选项可能如选项说明中所述需要其他权限。
要重新加载转储文件,你必须拥有执行其中包含的语句所需的权限,例如对这些语句创建的对象具有适当的CREATE
权限。
mysqldump 的输出可以包含ALTER DATABASE
语句,这些语句会更改数据库排序规则。在转储存储程序以保留其字符编码时,可能会使用这些语句。要重新加载包含此类语句的转储文件,需要对受影响的数据库拥有ALTER
权限。
注意
在Windows上使用PowerShell并进行输出重定向生成的转储文件采用UTF - 16编码:
mysqldump [options] > dump.sql
但是,UTF - 16不允许作为连接字符集(请参阅不允许使用的客户端字符集),因此转储文件无法正确加载。要解决此问题,请使用--result-file
选项,该选项以ASCII格式创建输出:
mysqldump [options] --result-file=dump.sql
如果转储文件包含系统表,则不建议在服务器上启用GTID(gtid_mode=ON
)时加载该转储文件。mysqldump 会针对使用非事务性MyISAM存储引擎的系统表发出DML指令,而在启用GTID时不允许这种组合。
性能与可扩展性注意事项
mysqldump
的优点包括在恢复之前查看甚至编辑输出的便利性和灵活性。你可以克隆数据库用于开发和数据库管理员(DBA)工作,或者为测试创建现有数据库的微小变体。它并非旨在作为一种快速或可扩展的解决方案来备份大量数据。对于大数据量,即使备份步骤耗时合理,恢复数据也可能非常缓慢,因为重放SQL语句涉及插入、创建索引等磁盘I/O操作。
对于大规模备份和恢复,物理备份更为合适,以原始格式复制数据文件,以便能够快速恢复。
如果您的表主要是 InnoDB
表,或者您同时拥有 InnoDB
和 MyISAM
表,可以考虑使用 mysqlbackup,该工具是 MySQL Enterprise 的一部分。此工具可为 InnoDB
备份提供高性能,且对业务的干扰最小;它还可以备份 MyISAM
和其他存储引擎中的表;此外,它还提供了许多方便的选项,以适应不同的备份场景。请参阅 第 32.1 节,“MySQL Enterprise Backup 概述”。
mysqldump
可以逐行检索并转储表内容,也可以从表中检索整个内容并在转储之前将其缓冲在内存中。如果要转储大表,内存缓冲可能会成为问题。要逐行转储表,请使用 --quick
选项(或启用 --quick
的 --opt
选项)。--opt
选项(以及因此启用的 --quick
选项)默认启用,因此要启用内存缓冲,请使用 --skip-quick
。
如果您使用的是较新版本的mysqldump 来生成要重新加载到非常旧的 MySQL 服务器中的转储,请使用--skip-opt
选项,而不要使用 --opt
或--extended-insert
选项。
有关 mysqldump 的更多信息,请参阅 9.4 节,“使用 mysqldump 进行备份”。
调用语法 性能和可扩展性注意事项 mysqldump 物理 mysqldump
通常有三种使用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 程序使用的选项文件的信息,请参阅6.2.2.2节,“使用选项文件” 。
表6.15 mysqldump选项
选项名称 | 描述 | 引入版本 | 已弃用 |
---|---|---|---|
--添加删除数据库语句 | 在每个CREATE DATABASE语句之前添加DROP DATABASE语句 | ||
--添加删除表语句 | 在每个CREATE TABLE语句之前添加DROP TABLE语句 | ||
--添加删除触发器 | 在每个CREATE TRIGGER语句之前添加DROP TRIGGER语句 | ||
--添加锁 | 在每个表转储前后加上LOCK TABLES和UNLOCK TABLES语句 | ||
--所有数据库 | 转储所有数据库中的所有表 | ||
--允许使用关键字 | 允许创建作为关键字的列名 | ||
--应用副本语句 | 在CHANGE REPLICATION SOURCE TO语句之前加上STOP REPLICA,并在输出末尾加上START REPLICA | ||
--应用从库语句 | 在CHANGE MASTER语句之前包含STOP SLAVE,并在输出末尾包含START SLAVE | ||
--绑定地址 | 使用指定的网络接口连接到MySQL服务器 | ||
--字符集目录 | 字符集安装目录 | ||
--列统计信息 | 编写ANALYZE TABLE语句以生成统计直方图 | ||
--注释 | 向转储文件添加注释 | ||
--compact 生成更紧凑的输出 | 生成更简洁的输出 | ||
--compatible:生成与其他数据库系统或旧版MySQL服务器更兼容的输出 | 生成与其他数据库系统或旧版MySQL服务器更兼容的输出 | ||
--使用包含列名的完整INSERT语句 | 使用包含列名的完整INSERT语句 | ||
--压缩 | 压缩客户端与服务器之间发送的所有信息 | ||
--压缩算法 | 连接到服务器时允许使用的压缩算法 | ||
--创建选项 | 在CREATE TABLE语句中包含所有特定于MySQL的表选项 | ||
--数据库 | 将所有名称参数解释为数据库名称 | ||
--调试 | 写入调试日志 | ||
--调试检查 | 程序退出时打印调试信息 | ||
--调试信息 | 程序退出时打印调试信息、内存和CPU统计信息 | ||
--默认身份验证 | 要使用的身份验证插件 | ||
--默认字符集 | 指定默认字符集 | ||
--defaults-extra-file:除常规选项文件外,读取指定名称的选项文件 | 除了常规选项文件外,还读取指定名称的选项文件 | ||
--默认配置文件 | 只读命名选项文件 | ||
--默认组后缀 | 选项组后缀值 | ||
--删除主日志 | 在复制源服务器上,执行转储操作后删除二进制日志 | ||
--删除源日志 | 在复制源服务器上,执行转储操作后删除二进制日志 | ||
--禁用键 | 对于每张表,在INSERT语句前后加上禁用和启用键的语句 | ||
--转储日期 | 如果指定了 --comments,则将转储日期作为 “Dump completed on” 注释包含在内 | ||
--dump-replica --包含CHANGE REPLICATION SOURCE TO语句,该语句列出副本源的二进制日志坐标 | 包含列出副本源二进制日志坐标的CHANGE REPLICATION SOURCE TO语句 | ||
--dump-slave:包含列出副本源二进制日志坐标的CHANGE MASTER语句 | 包含列出副本源二进制日志坐标的CHANGE MASTER语句 | ||
--启用明文插件 | 启用明文身份验证插件 | ||
--events 转储已转储数据库中的事件 | 转储已转储数据库中的事件 | ||
--扩展插入 | 使用多行INSERT语法 | ||
--字段封闭符 | 此选项与 --tab 选项一起使用,其含义与 LOAD DATA 的相应子句相同。 | ||
--转义字符由 | 此选项与 --tab 选项一起使用,其含义与LOAD DATA的相应子句相同。 | ||
--字段可选择地封闭于 | 此选项与 --tab 选项一起使用,其含义与LOAD DATA的相应子句相同。 | ||
--字段终止符为 | 此选项与 --tab 选项一起使用,其含义与LOAD DATA的相应子句相同。 | ||
--刷新日志 | 转储开始前刷新MySQL服务器日志文件 | ||
--刷新权限 | 转储MySQL数据库后发出FLUSH PRIVILEGES语句 | ||
--强制 | 即使在表转储期间发生SQL错误,也继续执行 | ||
--获取服务器公钥 | 从服务器请求RSA公钥 | ||
显示帮助信息并退出 | 显示帮助信息并退出 | ||
--hex-blob:使用十六进制表示法转储二进制列 | 使用十六进制表示法转储二进制列 | ||
--主机 | MySQL服务器所在的主机 | ||
--忽略错误 | 忽略指定错误 | ||
--忽略表 | 不要转储指定的表 | ||
--包含主服务器主机端口 | 在使用 --dump-slave 生成的 CHANGE MASTER 语句中包含 MASTER_HOST/MASTER_PORT 选项 | ||
--包含源主机端口 | 在使用 --dump-replica 生成的 CHANGE REPLICATION SOURCE TO 语句中包含 SOURCE_HOST 和 SOURCE_PORT 选项。 | ||
--忽略插入 | 编写INSERT IGNORE语句,而不是INSERT语句 | ||
--以行为结束标志 | 此选项与 --tab 选项一起使用,其含义与 LOAD DATA 的相应子句相同。 | ||
--锁定所有表 | 锁定所有数据库中的所有表 | ||
--锁定表 | 转储表之前锁定所有表 | ||
--log-error:将警告和错误追加到指定文件中 | 将警告和错误追加到指定文件 | ||
--登录路径 | 从.mylogin.cnf读取登录路径选项 | ||
--master-data 将二进制日志文件名和位置写入输出 | 将二进制日志文件名和位置写入输出 | ||
--最大允许数据包 | 发送到服务器或从服务器接收的最大数据包长度 | ||
--mysqld-长查询时间 | 慢查询阈值的会话值 | ||
--net-buffer-length:TCP/IP和套接字通信的缓冲区大小 | TCP/IP和套接字通信的缓冲区大小 | ||
--网络超时 | 增加网络超时时间,以便进行更大规模的表转储 | ||
--不自动提交 | 将每个转储表的INSERT语句包含在SET autocommit = 0和COMMIT语句之间 | ||
--不创建数据库 | 不要编写创建数据库语句 | ||
--不写入创建信息 | 不要编写用于重新创建每个转储表的CREATE TABLE语句 | ||
--不导出数据 | 不转储表内容 | ||
--不使用默认值 | 不读取选项文件 | ||
--no-set-names 等同于 --skip-set-charset | 与 --skip-set-charset 相同 | ||
--不写入表空间 在输出中不写入任何CREATE LOGFILE GROUP或CREATE TABLESPACE语句 | 不要在输出中编写任何CREATE LOGFILE GROUP或CREATE TABLESPACE语句 | ||
--优化选项 | --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset 的简写 | ||
--按主键排序 | 按主键或首个唯一索引对每个表的行进行排序后转储。 | ||
--密码 | 连接服务器时使用的密码 | ||
--password1 连接到服务器时要使用的第一个多因素身份验证密码 | 连接服务器时使用的首个多因素身份验证密码 | ||
--password2 连接服务器时使用的第二个多因素身份验证密码 | 连接服务器时使用的第二个多因素身份验证密码 | ||
--password3 连接服务器时使用的第三个多因素身份验证密码 | 连接服务器时使用的第三个多因素身份验证密码 | ||
--管道 | 使用命名管道连接到服务器(仅适用于Windows) | ||
--plugin-authentication-kerberos-client-mode:允许通过Windows上的MIT Kerberos库进行GSSAPI可插拔身份验证 --plugin-dir:插件安装目录 --port:用于连接的TCP/IP端口号 --print-defaults:打印默认选项 --protocol:要使用的传输协议 “--plugin-authentication-kerberos-client-mode”:“--插件 - 身份验证 - Kerberos客户端模式” | 允许在 Windows 上通过 MIT Kerberos 库进行 GSSAPI 可插拔身份验证 | ||
插件目录 | 插件安装目录 | ||
--端口 | 连接所用的TCP/IP端口号 | ||
--print-defaults 打印默认选项 | 打印默认选项 | ||
--协议 | 要使用的传输协议 | ||
--快速 从服务器一次一行地检索表的行 --引用名称 用反引号字符引用标识符 --替换 编写REPLACE语句而非INSERT语句 --结果文件 将输出定向到给定文件 --例程 从转储的数据库中转储存储例程(过程和函数) “--快速” | 一次从服务器检索表中的一行数据 | ||
--quote-names 引用名称 --quote-names 使用反引号字符引用标识符 | 使用反引号字符引用标识符 | ||
--replace 写入REPLACE语句而非INSERT语句 | 编写REPLACE语句而非INSERT语句 | ||
--结果文件 | 将输出直接写入给定文件 | ||
--例程 | 从转储的数据库中转储存储过程(过程和函数) | ||
--服务器公钥路径 | 包含RSA公钥的文件的路径名 | ||
--设置字符集 | 在输出中添加 SET NAMES default_character_set | ||
--设置GTID清理状态 | 是否在输出中添加 SET @@GLOBAL.GTID_PURGED | ||
--共享内存基名称 | 共享内存连接的共享内存名称(仅适用于Windows) | ||
--show-create-skip-secondary-engine:在CREATE TABLE语句中排除SECONDARY ENGINE子句 | 从CREATE TABLE语句中排除SECONDARY ENGINE子句 | ||
--单事务 | 在从服务器转储数据之前发出 BEGIN SQL 语句 | ||
--跳过添加和删除表语句 | 不要在每个CREATE TABLE语句之前添加DROP TABLE语句 | ||
--跳过添加锁 | 不要添加锁 | ||
--跳过注释 | 不要在转储文件中添加注释 | ||
--不生成紧凑输出 | 不生成更紧凑的输出 | ||
--跳过禁用键 | 请勿禁用键 | ||
--跳过扩展插入 | 关闭扩展插入 | ||
--跳过生成的不可见主键 | 不要在转储文件中包含生成的不可见主键 | ||
--跳过优化选项 | 关闭由 --opt 设置的选项 | ||
--跳过快速模式 | 不要一次从服务器检索表中的一行数据 | ||
--跳过引用名称 | 不要引用标识符 | ||
--跳过设置字符集 | 不要编写SET NAMES语句 | ||
--跳过触发器 | 不转储触发器 | ||
--跳过时区-协调世界时 | 关闭时区-协调世界时(tz-utc) | ||
--socket 使用的Unix套接字文件或Windows命名管道 | 要使用的Unix套接字文件或Windows命名管道 | ||
--源数据 | 将二进制日志文件名和位置写入输出 | ||
--ssl-ca:包含受信任SSL证书颁发机构列表的文件 | 包含受信任SSL证书颁发机构列表的文件 | ||
包含受信任SSL证书颁发机构证书文件的目录 | 包含受信任的SSL证书颁发机构证书文件的目录 | ||
包含X.509证书的文件 | 包含X.509证书的文件 | ||
--ssl-cipher 允许用于连接加密的密码 | 允许用于连接加密的密码 | ||
--ssl-crl(指定包含证书吊销列表的文件) | 包含证书吊销列表的文件 | ||
--ssl-crlpath:包含证书吊销列表文件的目录 | 包含证书吊销列表文件的目录 | ||
--ssl-fips-mode 是否在客户端启用FIPS模式 --ssl-key 包含X.509密钥的文件 --ssl-mode 与服务器连接所需的安全状态 --ssl-session-data 包含SSL会话数据的文件 --ssl-session-data-continue-on-failed-reuse 会话复用失败时是否建立连接 “--ssl-fips-mode”翻译为“--SSL FIPS模式” | 是否在客户端启用FIPS模式 | ||
--ssl-key:包含X.509密钥的文件 | 包含X.509密钥的文件 | ||
--ssl-mode 期望的与服务器连接的安全状态 | 与服务器连接所需的安全状态 | ||
--ssl-session-data:包含SSL会话数据的文件 | 包含SSL会话数据的文件 | ||
--ssl-session-data-continue-on-failed-reuse:如果会话复用失败,是否建立连接 | 如果会话复用失败,是否建立连接 | ||
--制表符 | 生成制表符分隔的数据文件 | ||
--表 | 覆盖 --databases 或 -B 选项 | ||
--tls-ciphersuites:允许用于加密连接的TLSv1.3密码套件 | 加密连接允许使用的TLSv1.3密码套件 | ||
--tls-version 允许用于加密连接的TLS协议 | 加密连接允许使用的TLS协议 | ||
--触发器 | 为每个转储的表转储触发器 | ||
--以协调世界时(UTC)为时间基准 | 在转储文件中添加 SET TIME_ZONE='+00:00 | ||
--用户 | 连接到服务器时使用的MySQL用户名 | ||
--罗嗦 | 详细模式 | ||
--version 显示版本信息并退出 | 显示版本信息并退出 | ||
--where 仅转储由给定WHERE条件选择的行 | 仅转储由给定WHERE条件选择的行 | ||
--xml:生成XML输出。 --zstd-compression-level:使用zstd压缩与服务器连接时的压缩级别。 连接选项:mysqldump命令登录到MySQL服务器以提取信息。以下选项指定如何连接到同一台机器或远程系统上的MySQL服务器。 --bind-address=ip_address:在具有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口。 --compress,-C:(此处未给出具体含义,可根据上下文进一步确定) | 生成XML输出 | ||
--zstd压缩级别 | 使用zstd压缩的与服务器连接的压缩级别 |
连接选项
mysqldump
命令登录到MySQL服务器以提取信息。以下选项指定了如何连接到同一台机器或远程系统上的MySQL服务器。
-
命令行格式 --bind-address=ip_address
在拥有多个网络接口的计算机上,使用此选项来选择用于连接到MySQL服务器的接口。
-
--compress
,-C
| 命令行格式 |
--compress[={OFF|ON}]
|
| :--------- | ----------------------- |
| 已弃用 | |
| 类型 | 布尔值 |
| 默认值 |OFF
|如果可能,压缩客户端与服务器之间发送的所有信息。请参阅第6.2.8节“连接压缩控制”。
从 MySQL 8.0.18 起,此选项已被弃用。预计它将在未来的 MySQL 版本中移除。请参阅配置旧版连接压缩。
-
--compression-algorithms=*
value*
命令行格式 --compression-algorithms=value
引入 类型 设置 默认值 uncompressed
有效值 zlib``zstd``uncompressed
连接到服务器时允许使用的压缩算法。可用的算法与
protocol_compression_algorithms
系统变量中的算法相同。默认值为uncompressed
。有关更多信息,请参阅6.2.8节,“连接压缩控制”。
此选项是在MySQL 8.0.18中添加的。
-
命令行格式 --default-auth=plugin
类型 字符串 关于使用哪个客户端身份验证插件的提示。请参阅8.2.17节“可插拔身份验证”。
-
命令行格式 --enable-cleartext-plugin
类型 布尔值 默认值 FALSE
启用
mysql_clear_password
明文身份验证插件。(请参阅 8.4.1.4 节,“客户端明文可插拔身份验证”。) -
命令行格式 --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
类型 字符串 从
.mylogin.cnf
登录路径文件中指定的登录路径读取选项。“登录路径”是一个选项组,其中包含的选项用于指定要连接到哪个MySQL服务器以及使用哪个账户进行身份验证。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参阅6.6.7节,“mysql_config_editor — MySQL配置实用程序”。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
--password[=password\]
,-p[password]
--password[=密码],-p[密码]命令行格式 --password[=password]
类型 字符串 用于连接服务器的MySQL账户的密码。密码值是可选的。如果未提供,mysqldump 会提示输入。如果提供了,在
--password=
或-p
与随后的密码之间不得有空格。如果未指定密码选项,默认不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中输入密码,请使用选项文件。请参阅 8.1.2.1节,“用户密码安全指南”。
要显式指定没有密码且mysqldump不应提示输入密码,请使用
--skip-password
选项。 -
用于连接服务器的MySQL账户的多因素身份验证因素1的密码。密码值是可选的。如果未提供,mysqldump 会提示输入。如果提供了,
--password1=
与其后的密码之间 不得有空格。如果未指定密码选项,默认不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中输入密码,请使用选项文件。请参阅8.1.2.1节,“密码安全的最终用户指南”。
要显式指定没有密码,且mysqldump不应提示输入密码,请使用
--skip-password1
选项。--password1
和--password
是同义词,--skip-password1
和--skip-password
也是同义词。 -
用于连接服务器的MySQL账户的多因素身份验证因素2的密码。此选项的语义与
--password1
的语义类似;详细信息请参阅该选项的说明。 -
用于连接服务器的MySQL账户的多因素身份验证因子3的密码。此选项的语义与
--password1
的语义类似;详情请参阅该选项的说明。 -
--pipe
,-W
命令行格式 --pipe
类型 字符串 在Windows上,使用命名管道连接到服务器。仅当服务器在启动时启用了系统变量
named_pipe
以支持命名管道连接时,此选项才适用。此外,进行连接的用户必须是系统变量named_pipe_full_access_group
指定的Windows组的成员。 -
--plugin-authentication-kerberos-client-mode=*
value*
命令行格式 --plugin-authentication-kerberos-client-mode
引入 类型 字符串 默认值 SSPI
有效值 GSSAPI
在Windows上,
authentication_kerberos_client
身份验证插件支持此插件选项。它提供了客户端用户可以在运行时设置的两个可能值:SSPI
和GSSAPI
。客户端插件选项的默认值使用安全支持提供程序接口 (SSPI),该接口能够从 Windows 内存缓存中获取凭据。或者,客户端用户可以选择一种模式,通过 Windows 上的 MIT Kerberos 库支持通用安全服务应用程序接口 (GSSAPI)。GSSAPI 能够获取以前使用 kinit 命令生成的缓存凭据。
有关更多信息,请参阅GSSAPI模式下Windows客户端的命令。
-
命令行格式 --plugin-dir=dir_name
类型 目录名称 用于查找插件的目录。如果使用
--default-auth
选项指定身份验证插件,但mysqldump找不到该插件,请指定此选项。请参阅8.2.17节,“可插拔身份验证”。 -
--port=port_num
,-P port_num
命令行格式 --port=port_num
类型 数值型 默认值 3306
对于TCP/IP连接,要使用的端口号。
-
命令行格式 --protocol=type
类型 字符串 默认值 [see text]
有效取值 TCP``SOCKET``PIPE``MEMORY
用于连接服务器的传输协议。当其他连接参数通常导致使用的协议并非您所需的协议时,此参数很有用。有关允许值的详细信息,请参阅6.2.7节“连接传输协议”。
-
--server-public-key-path=*
file_name*
命令行格式 --server-public-key-path=file_name
类型 文件名 包含服务器进行基于RSA密钥对的密码交换所需公钥的客户端副本的PEM格式文件的路径名。此选项适用于使用
sha256_password
或caching_sha2_password
身份验证插件进行身份验证的客户端。对于不使用这些插件之一进行身份验证的账户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。如果指定了
--server-public-key-path=file_name
且该参数指定了一个有效的公钥文件,则它优先于--get-server-public-key
。对于
sha256_password
,只有在MySQL是使用OpenSSL构建时,此选项才适用。有关
sha256_password
和caching_sha2_password
插件的信息,请参阅 8.4.1.3节,“SHA-256 可插拔身份验证” 以及 8.4.1.2节,“缓存 SHA-2 可插拔身份验证”。 -
--socket=path
,-S path
| 命令行格式 |
--socket={file_name|pipe_name}
|
| :--------- | -------------------------------- |
| 类型 | 字符串 |对于连接到
localhost
,要使用的Unix套接字文件,或者在Windows上,要使用的命名管道的名称。在 Windows 上,仅当服务器在启用了 named_pipe 系统变量以支持命名管道连接的情况下启动时,此选项才适用。此外,建立连接的用户必须是 named_pipe_full_access_group 系统变量指定的 Windows 组的成员。
-
--ssl*
以
--ssl
开头的选项用于指定是否使用加密连接到服务器,并指明在何处查找 SSL 密钥和证书。请参阅 加密连接的命令选项。 -
| 命令行格式 |
--ssl-fips-mode={OFF|ON|STRICT}
|
| :--------- | --------------------------------- |
| 已弃用 | |
| 类型 | 枚举 |
| 默认值 |OFF
|
| 有效值 |OFF``ON``STRICT
|控制是否在客户端启用FIPS模式。
--ssl-fips-mode
选项与其他--ssl-xxx
选项的不同之处在于,它并非用于建立加密连接,而是用于影响允许哪些加密操作。请参阅 8.8节“FIPS支持”。这些“--ssl-fips-mode”值是允许的:
OFF
:禁用FIPS模式。- 开启:启用 FIPS 模式。
- STRICT:启用 “严格” FIPS 模式。
注意
如果OpenSSL FIPS对象模块不可用,
--ssl-fips-mode
唯一允许的值是OFF
。在这种情况下,将--ssl-fips-mode
设置为ON
或STRICT
会导致客户端在启动时生成警告并以非FIPS模式运行。从MySQL 8.0.34开始,此选项已弃用。预计它将在未来的MySQL版本中移除。
-
--tls-ciphersuites=*
ciphersuite_list*
命令行格式 --tls-ciphersuites=ciphersuite_list
引入 类型 字符串 用于使用TLSv1.3的加密连接的可允许密码套件。该值是一个或多个以冒号分隔的密码套件名称的列表。此选项可指定的密码套件取决于用于编译MySQL的SSL库。有关详细信息,请参阅8.3.2节,“加密连接TLS协议和密码”。
此选项是在MySQL 8.0.16中添加的。
-
命令行格式 --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=#
引入版本 类型 整数 用于使用
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
类型 文件名 仅使用给定的选项文件。如果该文件不存在或以其他方式无法访问,则会发生错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录的路径。异常:即使使用
--defaults-file
,客户端程序也会读取.mylogin.cnf
。有关此选项及其他选项文件选项的更多信息,请参阅 6.2.2.3 节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-group-suffix=str
类型 字符串 不仅读取常规的选项组,还读取具有常规名称且后缀为
str
的组。例如,mysqldump 通常会读取[client]
和[mysqldump]
组。如果将此选项指定为--defaults-group-suffix=_other
,mysqldump 还会读取[client_other]
和[mysqldump_other]
组。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --no-defaults
不读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,可以使用
--no-defaults
来阻止读取这些选项。例外情况是,无论如何都会读取
.mylogin.cnf
文件(如果它存在)。这使得即使在使用--no-defaults
时,也能以比在命令行上更安全的方式指定密码。要创建.mylogin.cnf
,请使用 mysql_config_editor 实用程序。请参阅 6.6.7节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --print-defaults
打印程序名称以及它从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
数据定义语言选项
“mysqldump 的使用场景包括设置全新的 MySQL 实例(包括数据库表),以及用现有数据库和表替换现有实例中的数据。以下选项可让您通过对转储文件中的各种 DDL 语句进行编码,来指定在恢复转储时要拆除和设置的内容。”
-
命令行格式 --add-drop-database
在每个
CREATE DATABASE
语句之前编写一条DROP DATABASE
语句。此选项通常与--all-databases
或--databases
选项结合使用,因为除非指定了其中一个选项,否则不会编写任何CREATE DATABASE
语句。注意
在MySQL 8.0中,
mysql
模式被视为系统模式,终端用户无法删除。如果将--add-drop-database
与--all-databases
一起使用,或者与--databases
一起使用,且要转储的模式列表中包含mysql
,则转储文件将包含一条DROP DATABASE
mysql`` 语句,重新加载转储文件时会导致错误。相反,若要使用
--add-drop-database
,请使用--databases
并带上要转储的模式列表,其中该列表不包含mysql
。 -
命令行格式 --add-drop-table
在每条
CREATE TABLE
语句之前编写一条DROP TABLE
语句。 -
命令行格式 --add-drop-trigger
在每个
CREATE TRIGGER
语句之前编写一条DROP TRIGGER
语句。 -
命令行格式 --all-tablespaces
向表转储中添加创建
NDB
表所使用的任何表空间所需的所有 SQL 语句。此信息不会包含在 mysqldump 的输出中。此选项目前仅与 NDB 集群表相关。 -
命令行格式 --no-create-db
如果指定了
--databases
或--all-databases
选项,则抑制输出中原本包含的[
CREATE DATABASE](https://dev.mysql.com/doc/refman/8.0/en/create-database.html)
语句。 -
命令行格式 --no-create-info
不要编写用于创建每个转储表的
CREATE TABLE
语句。注意
此选项不会从mysqldump输出中排除创建日志文件组或表空间的语句;但是,您可以为此使用
--no-tablespaces
选项。 -
命令行格式 --no-tablespaces
此选项会抑制 mysqldump 输出中的所有
CREATE LOGFILE GROUP
和CREATE TABLESPACE
语句。 -
命令行格式 --replace
调试选项
以下选项可打印调试信息、在转储文件中编码调试信息,或者让转储操作无论是否存在潜在问题都继续进行。
-
命令行格式 --allow-keywords
允许创建为关键字的列名。这通过在每个列名前加上表名来实现。
-
--comments
,-i
命令行格式 --comments
在转储文件中写入其他信息,如程序版本、服务器版本和主机。此选项默认启用。若要禁止显示此附加信息,请使用
--skip-comments
。 -
--debug[=debug_options\]
,-#<br /> [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
类型 布尔值 默认值 FALSE
程序退出时打印一些调试信息。
只有在使用
WITH_DEBUG
构建MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件未使用此选项构建。 -
命令行格式 --debug-info
类型 布尔值 默认值 FALSE
程序退出时,打印调试信息以及内存和CPU使用情况统计信息。
只有在使用
WITH_DEBUG
构建MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件未使用此选项构建。 -
命令行格式 --dump-date
类型 布尔值 默认值 TRUE
如果给出了
--comments
选项,mysqldump 会在转储结尾生成如下形式的注释:-- Dump completed on DATE
然而,日期会导致在不同时间获取的转储文件看起来不同,即使数据在其他方面是相同的。
--dump-date
和--skip-dump-date
控制是否将日期添加到注释中。默认值是--dump-date
(在注释中包含日期)。--skip-dump-date
禁止打印日期。 -
--force
,-f
:程序退出时,打印调试信息以及内存和CPU使用情况统计信息。命令行格式 --force
忽略所有错误;即使在表转储期间发生SQL错误,也继续执行。
此选项的一个用途是,即使mysqldump遇到因定义引用已删除的表而失效的视图,也能继续执行。如果不使用
--force
,mysqldump会因错误信息而退出。使用--force
时,mysqldump会打印错误信息,但也会将包含视图定义的SQL注释写入转储输出并继续执行。如果同时使用
--ignore-error
选项来忽略特定错误,则--force
选项优先。 -
命令行格式 --log-error=file_name
类型 文件名 通过将警告和错误追加到指定文件中来记录它们。默认情况下不进行日志记录。
-
命令行格式 --skip-comments
查看 --comments 选项的说明。
-
--verbose
,-v
命令行格式 --verbose
详细模式。打印更多关于程序执行情况的信息。
帮助选项
以下选项显示有关mysqldump命令本身的信息。
-
--help
,-?
(注:这部分内容在原语境中未明确具体含义,可推测是与获取帮助相关的指令或选项,一般可直译为“--help(帮助),-?(问号形式的帮助请求)” ,但此处严格按要求未翻译,仅保留原文)命令行格式 --help
显示帮助信息并退出。
-
--version
,-V
命令行格式 --version
显示版本信息并退出。
国际化选项
以下选项会改变mysqldump命令在使用本国语言设置时表示字符数据的方式。
-
命令行格式 --character-sets-dir=dir_name
类型 目录名称 安装字符集的目录。请参阅第12.15节“字符集配置”。
-
命令行格式 --default-character-set=charset_name
类型 字符串 默认值 utf8
使用
charset_name
作为默认字符集。请参阅 第 12.15 节,“字符集配置”。如果未指定字符集,mysqldump 将使用utf8mb4
。 -
命令行格式 --no-set-names
已弃用 是 关闭
--set-charset
设置,这与指定--skip-set-charset
相同。 -
命令行格式 --set-charset
禁用者 skip-set-charset
将
SET NAMES default_character_set
写入输出。此选项默认启用。若要取消SET NAMES
语句,请使用--skip-set-charset
。
复制选项
mysqldump
命令常用于在复制配置中的副本服务器上创建一个空实例或包含数据的实例。以下选项适用于在复制源服务器和副本上转储和恢复数据。
-
命令行格式 --apply-replica-statements
引入版本 类型 布尔值 默认值 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
已弃用 类型 布尔值 默认值 FALSE
在MySQL 8.0.26之前,请使用此选项,而不是
--apply-replica-statements
。这两个选项效果相同。 -
命令行格式 --delete-source-logs
引入版本 从 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
已弃用 在 MySQL 8.0.26 之前,请使用此选项,而不要使用
--delete-source-logs
。这两个选项效果相同。 -
命令行格式 --dump-replica[=value]
引入版本 类型 数值型 默认值 1
有效取值 1``2
从 MySQL 8.0.26 版本开始,使用
--dump-replica
,在 MySQL 8.0.26 版本之前,使用--dump-slave
。这两个选项效果相同。这些选项与--source-data
类似,不同之处在于它们用于转储副本服务器,以生成一个转储文件,该文件可用于将另一台服务器设置为与被转储服务器具有相同源的副本。这些选项会使转储输出包含一条CHANGE REPLICATION SOURCE TO
语句(从 MySQL 8.0.23 版本开始)或CHANGE MASTER TO
语句(在 MySQL 8.0.23 版本之前),该语句指示被转储副本的源的二进制日志坐标(文件名和位置)。CHANGE REPLICATION SOURCE TO
语句从SHOW REPLICA STATUS
的输出中读取Relay_Master_Log_File
和Exec_Master_Log_Pos
的值,并分别将它们用于SOURCE_LOG_FILE
和SOURCE_LOG_POS
。这些是副本开始复制的复制源服务器坐标。注意
已执行的中继日志中的事务顺序不一致可能会导致使用错误的位置。有关更多信息,请参见第19.5.1.34节,“复制和事务不一致”。
--dump-replica
或--dump-slave
会导致使用源服务器的坐标,而不是转储服务器的坐标,就像--source-data
或--master-data
选项的做法一样。此外,如果使用了此选项,会导致--source-data
或--master-data
选项被覆盖,实际上被忽略。警告
如果要应用转储的服务器使用
gtid_mode=ON
以及SOURCE_AUTO_POSITION=1
或MASTER_AUTO_POSITION=1
,则不应使用--dump-replica
或--dump-slave
。选项值的处理方式与
--source-data
相同。设置为novalue或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]
已弃用 类型 数值型 默认值 1
有效值 1``2
在 MySQL 8.0.26 之前使用此选项,而不是
--dump-replica
。这两个选项效果相同。 -
命令行格式 --include-source-host-port
引入版本 类型 布尔值 默认值 FALSE
从 MySQL 8.0.26 版本开始,使用
--include-source-host-port
,而在 MySQL 8.0.26 版本之前,使用--include-master-host-port
。这两个选项效果相同。这些选项会在使用--dump-replica
或--dump-slave
选项生成的副本转储中,为副本源的主机名和 TCP/IP 端口号向CHANGE REPLICATION SOURCE TO
语句(自 MySQL 8.0.23 起)或CHANGE MASTER TO
语句(MySQL 8.0.23 之前)添加SOURCE_HOST
|MASTER_HOST
以及SOURCE_PORT
|MASTER_PORT
选项。 -
命令行格式 --include-master-host-port
已弃用 类型 布尔值 默认值 FALSE
在 MySQL 8.0.26 之前,请使用此选项,而不要使用
--include-source-host-port
。这两个选项效果相同。 -
命令行格式 --source-data[=value]
引入版本 类型 数值型 默认值 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]
已弃用 类型 数值的 默认值 1
有效值 1``2
在MySQL 8.0.26之前,请使用此选项,而不要使用
--source-data
。这两个选项效果相同。 -
命令行格式 --set-gtid-purged=value
类型 枚举 默认值 AUTO
有效取值 OFF``ON``AUTO
此选项适用于使用基于GTID复制(
gtid_mode=ON
)的服务器。它控制在转储输出中是否包含SET<br /> @@GLOBAL.gtid_purged
语句,该语句会在重新加载转储文件的服务器上更新gtid_purged
的值,以将源服务器gtid_executed
系统变量中的GTID集添加进来。gtid_purged
保存了已在服务器上应用但不存在于服务器任何二进制日志文件中的所有事务的GTID。因此,mysqldump 会添加在源服务器上执行的事务的GTID,以便目标服务器将这些事务记录为已应用,尽管其二进制日志中没有这些事务。--set-gtid-purged
还控制是否包含SET<br /> @@SESSION.sql_log_bin=0
语句,该语句在重新加载转储文件时禁用二进制日志记录。此语句可防止在执行转储文件中的事务时生成新的GTID并将其分配给这些事务,从而使用事务的原始GTID。如果未设置
--set-gtid-purged
选项,默认情况下,若正在备份的服务器上启用了GTID,且gtid_executed
系统变量的全局值中的GTID集不为空,则转储输出中将包含一条SET<br /> @@GLOBAL.gtid_purged
语句。如果服务器上启用了GTID,还会包含一条SET<br /> @@SESSION.sql_log_bin=0
语句。你既可以使用指定的GTID集合替换
gtid_purged
的值,也可以在语句中添加一个加号(+),将指定的GTID集合追加到gtid_purged
已有的GTID集合中。mysqldump记录的SET @@GLOBAL.gtid_purged
语句在特定版本的注释中包含一个加号(+
),这样MySQL会将转储文件中的GTID集合添加到现有的gtid_purged
值中。需要注意的是,mysqldump 为
SET<br /> @@GLOBAL.gtid_purged
语句所包含的值,涵盖了服务器上gtid_executed
集中所有事务的 GTID,即便这些事务更改了数据库中被抑制的部分,或者服务器上未包含在部分转储中的其他数据库。这意味着,在重放转储文件的服务器上更新gtid_purged
值后,存在的 GTID 可能与目标服务器上的任何数据都不相关。如果不在目标服务器上重放更多转储文件,多余的 GTID 不会对服务器的未来操作造成任何问题,但会使在复制拓扑中不同服务器上比较或协调 GTID 集变得更加困难。如果在目标服务器上重放另一个包含相同 GTID 的转储文件(例如,来自同一源服务器的另一个部分转储),则第二个转储文件中的任何SET<br /> @@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”选项的可能值如下:
-
自动
默认值。如果在正在备份的服务器上启用了GTID,并且
gtid_executed
不为空,则会在输出中添加SET @@GLOBAL.gtid_purged
,其中包含来自gtid_executed
的GTID集。如果启用了GTID,则会在输出中添加SET<br /> @@SESSION.sql_log_bin=0
。如果服务器上未启用GTID,则不会将这些语句添加到输出中。 -
关闭
SET @@GLOBAL.gtid_purged
不会添加到输出中,并且SET<br /> @@SESSION.sql_log_bin=0
也不会添加到输出中。对于未使用 GTID 的服务器,请使用此选项或AUTO
。仅当您确定目标服务器的gtid_purged
中已存在所需的 GTID 集且不应更改,或者您计划手动识别并添加任何缺失的 GTID 时,才对使用 GTID 的服务器使用此选项。 -
开启
如果在要备份的服务器上启用了GTID,则会将
SET @@GLOBAL.gtid_purged
添加到输出中(除非gtid_executed
为空),并且会将SET<br /> @@SESSION.sql_log_bin=0
添加到输出中。如果设置了此选项,但服务器上未启用GTID,则会发生错误。对于使用GTID的服务器,除非确定目标服务器上不需要gtid_executed
中的GTID,否则请使用此选项或AUTO
。 -
注释掉的
从 MySQL 8.0.17 版本开始可用。如果在要备份的服务器上启用了 GTID,则会将
SET<br /> @@GLOBAL.gtid_purged
添加到输出中(除非gtid_executed
为空),但它会被注释掉。这意味着输出中会包含gtid_executed
的值,但重新加载转储文件时不会自动采取任何操作。SET @@SESSION.sql_log_bin=0
会添加到输出中,并且不会被注释掉。使用COMMENTED
,你可以手动或通过自动化方式控制gtid_executed
设置的使用。例如,如果你要将数据迁移到另一台已经有不同活动数据库的服务器上,可能会倾向于这样做。
-
格式选项
以下选项指定了如何表示整个转储文件或转储文件中的某些类型的数据。它们还控制是否将某些可选信息写入转储文件。
-
命令行格式 --compact
生成更紧凑的输出。此选项启用
--skip-add-drop-table
、--skip-add-locks
、--skip-comments
、--skip-disable-keys
以及--skip-set-charset
选项。 -
命令行格式 --compatible=name[,name,...]
类型 字符串 默认值 ''
有效取值 ansi``mysql323``mysql40``postgresql``oracle``mssql``db2``maxdb``no_key_options``no_table_options``no_key_options
生成与其他数据库系统或旧版MySQL服务器更兼容的输出。此选项唯一允许的值是
ansi
,它与设置服务器SQL模式的相应选项含义相同。请参阅7.1.11节,“服务器SQL模式”。 -
命令行格式 --complete-insert
使用包含列名的完整
INSERT
语句。 -
命令行格式 --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 子句相同。请参见第 15.2.9 节,“LOAD DATA 语句”。
-
命令行格式 --hex-blob
使用十六进制表示法转储二进制列(例如,
'abc'
变为0x616263
)。受影响的数据类型有BINARY
、VARBINARY
、BLOB
类型、BIT
、所有空间数据类型,以及使用binary
字符集的 其他非二进制数据类型。使用
--tab
选项时,--hex-blob
选项将被忽略。 -
命令行格式 --lines-terminated-by=string
类型 字符串 此选项与 --tab 选项一同使用,其含义与 LOAD DATA 的相应 LINES 子句相同。请参见第15.2.9节,“LOAD DATA语句”。
-
命令行格式 --quote-names
禁用方式 skip-quote-names
引用标识符(如数据库名、表名和列名)使用 ``` 字符括起来。如果启用了
ANSI_QUOTES
SQL 模式,则标识符使用"
字符括起来。此选项默认启用。可以使用--skip-quote-names
将其禁用,但此选项应在可能启用--quote-names
的选项(如--compatible
)之后给出。 -
--result-file=file_name
,-r file_name
命令行格式 --result-file=file_name
类型 文件名 直接输出到指定名称的文件。结果文件会被创建,其之前的内容将被覆盖,即使在生成转储时出现错误也是如此。
在Windows系统上应使用此选项,以防止换行符
\n
被转换为\r\n
回车/换行序列。 -
--show-create-skip-secondary-engine=*
value*
命令行格式 --show-create-skip-secondary-engine
引入版本 从
CREATE TABLE
语句中排除SECONDARY ENGINE
子句。它通过在转储操作期间启用show_create_table_skip_secondary_engine
系统变量来实现此目的。或者,你可以在使用mysqldump之前启用show_create_table_skip_secondary_engine
系统变量。此选项是在MySQL 8.0.18中添加的。在不支持
show_create_table_skip_secondary_engine
变量的MySQL 8.0.18之前版本上,尝试使用--show-create-skip-secondary-engine
选项执行mysqldump操作会导致错误。 -
--tab=dir_name
,-T dir_name
命令行格式 --tab=dir_name
类型 目录名称 生成以制表符分隔的文本格式数据文件。对于每个转储的表,mysqldump 会创建一个
tbl_name.sql
文件,该文件包含用于创建表的CREATE TABLE
语句,并且服务器会写入一个tbl_name.txt
文件,该文件包含表的数据。此选项的值是写入这些文件的目录。注意
此选项仅应在与 mysqld 服务器同一台机器上运行 mysqldump 时使用。由于服务器会在您指定的目录中创建
*.txt
文件,该目录必须可由服务器写入,并且您使用的 MySQL 账户必须具有FILE
权限。由于 mysqldump 会在同一目录中创建*.sql
,该目录必须可由您的系统登录账户写入。默认情况下,
.txt
数据文件在列值之间使用制表符分隔,并在每行末尾使用换行符进行格式化。可以使用--fields-xxx
和--lines-terminated-by
选项显式指定格式。列值将转换为由
--default-character-set
选项指定的字符集。 -
命令行格式 --tz-utc
禁用者 skip-tz-utc
此选项支持在不同时区的服务器之间转储和重新加载
TIMESTAMP
列。mysqldump 会将其连接时区设置为 UTC,并在转储文件中添加SET<br /> TIME_ZONE='+00:00'
。如果不使用此选项,TIMESTAMP
列将在源服务器和目标服务器的本地时区中转储和重新加载,如果服务器位于不同的时区,这可能会导致值发生变化。--tz-utc
还可以防止因夏令时导致的变化。默认情况下启用--tz-utc
。要禁用它,请使用--skip-tz-utc
。 -
--xml
,-X
命令行格式 --xml
以格式良好的XML形式写入转储输出。
NULL
、'NULL'
与空值:对于名为column_name
的列,此选项生成的输出按如下方式区分NULL
值、空字符串和字符串值'NULL'
。值: XML表示形式: NULL
(未知值)<field name="*
column_name*" xsi:nil="true" />
''
(空字符串)<field name="*
column_name*"></field>
'NULL'
(字符串值)<field name="*
column_name*">NULL</field>
使用
--xml
选项运行时,mysql客户端的输出也遵循上述规则。(请参见6.5.1.1节,“mysql客户端选项”。)使用mysqldump生成的XML输出包含XML命名空间,如下所示:
$> 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>
筛选选项
以下选项用于控制将哪些类型的模式对象写入转储文件:按类别,如触发器或事件;按名称,例如,选择转储哪些数据库和表;甚至可以使用 WHERE
子句从表数据中过滤行。
-
--all-databases
,-A
--全部数据库,-A命令行格式 --all-databases
转储所有数据库中的所有表。这与使用
--databases
选项并在命令行中指定所有数据库的名称是一样的。注意
有关该选项与
--all-databases
的不兼容性,请参阅--add-drop-database
的说明。在 MySQL 8.0 之前,使用
--all-databases
选项时,mysqldump
和mysqlpump
的--routines
和--events
选项并非是包含存储程序和事件所必需的:转储包含mysql
系统数据库,因此也包含存储程序和事件定义所在的mysql.proc
和mysql.event
表。从 MySQL 8.0 开始,不再使用mysql.event
和mysql.proc
表。相应对象的定义存储在数据字典表中,但这些表不会被转储。要在使用--all-databases
进行的转储中包含存储程序和事件,请显式使用--routines
和--events
选项。 -
--databases
,-B
--数据库,-B命令行格式 --databases
转储多个数据库。通常情况下,mysqldump 将命令行上的第一个名称参数视为数据库名,后续名称视为表名。使用此选项时,它会将所有名称参数都视为数据库名。在每个新数据库之前,输出中会包含
CREATE DATABASE
和USE
语句。此选项可用于转储
performance_schema
数据库,通常情况下,即使用了--all-databases
选项,该数据库也不会被转储。(同时使用--skip-lock-tables
选项。)注意
有关该选项与
--databases
不兼容的信息,请参阅--add-drop-database
说明。 -
--events
,-E
命令行格式 --events
在输出中包含已转储数据库的事件调度器事件。此选项要求对这些数据库具有
EVENT
权限。使用
--events
生成的输出包含CREATE EVENT
语句,用于创建事件。 -
[
--忽略错误=*
error,error]...*
命令行格式 --ignore-error=error[,error]...
类型 字符串 忽略指定的错误。该选项的值是一个由逗号分隔的错误编号列表,用于指定在执行 mysqldump 时要忽略的错误。如果同时使用
--force
选项来忽略所有错误,则--force
优先。 -
命令行格式 --ignore-table=db_name.tbl_name
类型 字符串 请勿转储给定的表,必须同时使用数据库名和表名指定该表。若要忽略多个表,请多次使用此选项。此选项也可用于忽略视图。
-
--no-data
,-d
命令行格式 --no-data
不要写入任何表行信息(即,不要转储表内容)。如果您只想转储表的
CREATE TABLE
语句(例如,通过加载转储文件创建表的空副本),这会很有用。 -
--routines
,-R
""" 所在语境: 介绍 在输出中包含转储数据库的存储程序(过程和函数)。此选项需要全局 SELECT 权限。 使用 --routines 生成的输出包含 CREATE PROCEDURE 和 CREATE FUNCTION 语句来创建程序。 不写入任何表行信息(即,不转储表内容)。如果您只想转储表的 CREATE TABLE 语句(例如,通过加载转储文件创建表的空副本),这将很有用。 --routines,-R --ignore-table=db_name.tbl_name 不转储给定的表,必须同时使用数据库名和表名指定该表。要忽略多个表,请多次使用此选项。此选项也可用于忽略视图。 --no-data,-d 忽略指定的错误。选项值是一个逗号分隔的错误编号列表,指定在 mysqldump 执行期间要忽略的错误。如果还给出了 --force 选项以忽略所有错误,则 --force 优先。 翻译结果: """ --例程,-R命令行格式 --routines
在输出中包含转储数据库的存储程序(过程和函数)。此选项需要全局
SELECT
权限。使用
--routines
生成的输出包含CREATE PROCEDURE
和CREATE FUNCTION
语句,用于创建例程。 -
命令行格式 --skip-generated-invisible-primary-key
引入 类型 布尔值 默认值 FALSE
此选项从MySQL 8.0.30开始可用,它会使生成的不可见主键被排除在输出之外。有关更多信息,请参阅第15.1.20.11节,“生成的不可见主键”。
-
命令行格式 --tables
覆盖
--databases
或-B
选项。mysqldump 将该选项之后的所有名称参数视为表名。 -
命令行格式 --triggers
禁用者 skip-triggers
在输出中包含每个转储表的触发器。此选项默认启用;使用
--skip-triggers
将其禁用。要能够转储表的触发器,你必须对该表拥有
TRIGGER
权限。允许有多个触发器。mysqldump 按照激活顺序转储触发器,这样在重新加载转储文件时,触发器会以相同的激活顺序创建。但是,如果 mysqldump 转储文件包含针对某个表的多个触发器,且这些触发器具有相同的触发事件和动作时间,那么尝试将该转储文件加载到不支持多个触发器的旧版本服务器时就会出错。(有关解决方法,请参阅 降级说明;您可以将触发器转换为与旧版本服务器兼容的形式。)
-
--where='where_condition'
,-w<br /> 'where_condition'
命令行格式 --where='where_condition'
仅转储由给定的
WHERE
条件选择的行。如果条件中包含空格或对命令解释程序来说特殊的其他字符,则必须在条件两边加上引号。示例:
--where="user='jimf'" -w"userid>1" -w"userid<1"
性能选项
以下选项对性能(尤其是恢复操作的性能)最为关键。对于大型数据集,恢复操作(处理转储文件中的 INSERT
语句)是最耗时的部分。当急需快速恢复数据时,请提前规划并测试此阶段的性能。如果恢复时间以小时为单位,您可能倾向于选择其他备份和恢复解决方案,例如仅适用于 InnoDB
及混合使用的数据库的 MySQL Enterprise Backup。
性能也会受到“事务选项”的影响,主要是在转储操作方面。
-
命令行格式 --column-statistics
类型 布尔值 默认值 OFF
在输出中添加
ANALYZE TABLE
语句,以便在重新加载转储文件时为转储表生成直方图统计信息。此选项默认处于禁用状态,因为为大型表生成直方图可能需要很长时间。 -
命令行格式 --disable-keys
对于每个表,使用
/*!40000 ALTER TABLE<br /> tbl_name DISABLE KEYS<br /> */;
和/*!40000 ALTER TABLE<br /> tbl_name ENABLE KEYS<br /> */;
语句包围INSERT
语句。这样可以加快转储文件的加载速度,因为索引是在插入所有行之后创建的。此选项仅对MyISAM
表的非唯一索引有效。 -
--extended-insert
,-e
(--extended-insert,-e):在输出中添加ANALYZE TABLE语句,以便在重新加载转储文件时为转储的表生成直方图统计信息。此选项默认禁用,因为为大型表生成直方图可能需要很长时间。命令行格式 --extended-insert
禁用原因 skip-extended-insert
使用多行语法编写
INSERT
语句,该语法包含多个VALUES
列表。这样可以生成更小的转储文件,并在重新加载文件时加快插入速度。 -
命令行格式 --insert-ignore
编写
INSERT IGNORE
语句而非INSERT
语句。 -
命令行格式 --max-allowed-packet=value
类型 数字的 默认值 25165824
客户端/服务器通信缓冲区的最大大小。默认值为24MB,最大值为1GB。
注意
此选项的值特定于mysqldump,不应与 MySQL 服务器的
max_allowed_packet
系统变量混淆;无论mysqldump选项如何设置,mysqldump的单个数据包都不能超过服务器的值,即使后者的值更大。 -
--mysqld-long-query-time=*
value*
命令行格式 --mysqld-long-query-time=value
引入版本 类型 数值的 默认值 Server global setting
设置系统变量
long_query_time
的会话值。如果您想在将mysqldump查询记录到慢查询日志文件之前,延长允许mysqldump查询的时间,可以使用此选项(从MySQL 8.0.30起可用)。mysqldump会执行全表扫描,这意味着它的查询通常会超过适用于常规查询的全局long_query_time
设置。默认的全局设置为10秒。你可以使用
--mysqld-long-query-time
来指定一个会话值,范围从0(意味着来自 mysqldump 的每个查询都会记录到慢查询日志中)到31536000(即365天的秒数)。对于mysqldump 的选项,你只能指定整秒数。当你不指定此选项时,服务器的全局设置将应用于mysqldump 的查询。 -
命令行格式 --net-buffer-length=value
类型 数值的 默认值 16384
客户端/服务器通信缓冲区的初始大小。在创建多行
INSERT
语句时(如使用--extended-insert
或--opt
选项),mysqldump 创建的行最长可达--net-buffer-length
字节。如果增大此变量,要确保 MySQL 服务器的net_buffer_length
系统变量的值至少与此值一样大。 -
| 命令行格式 |
--network-timeout[={0|1}]
|
| :--------- | --------------------------- |
| 类型 | 布尔值 |
| 默认值 |TRUE
|通过将
--max-allowed-packet
设置为其最大值,并将网络读写超时设置为较大值,可实现转储大表。此选项默认启用。若要禁用它,请使用--skip-network-timeout
。 -
命令行格式 --opt
禁用者 skip-opt
此选项默认启用,是
--add-drop-table
--add-locks
--create-options
--disable-keys
--extended-insert
--lock-tables
--quick
--set-charset
组合的简写形式。它提供了快速转储操作,并生成可快速重新加载到MySQL服务器的转储文件。由于默认启用了
--opt
选项,因此只需指定其相反的选项--skip-opt
即可关闭几个默认设置。有关有选择地启用或禁用受--opt
影响的部分选项的信息,请参阅关于mysqldump
选项组 的讨论。 -
--快速,-q
命令行格式 --quick
禁用者 skip-quick
此选项对于转储大型表很有用。它强制mysqldump一次从服务器检索表的一行数据,而不是在写出之前检索整个行集并在内存中缓冲。
-
命令行格式 --skip-opt
请参阅
--opt
选项的说明。
事务选项
以下选项在转储操作的性能与导出数据的可靠性和一致性之间进行权衡。
-
命令行格式 --add-locks
在每个表转储前后加上
LOCK TABLES
和UNLOCK TABLES
语句。这样在重新加载转储文件时,插入操作会更快。请参阅 第10.2.5.1节,“优化INSERT语句”。 -
--flush-logs
,-F
(在转储前刷新MySQL服务器日志文件。此选项需要RELOAD权限。如果与--all-databases选项一起使用,日志会在转储每个数据库时刷新。但使用--lock-all-tables、--source-data、--master-data或--single-transaction时除外。在这些情况下,日志仅刷新一次,对应于所有表被FLUSH TABLES WITH READ LOCK锁定的时刻。如果希望转储和日志刷新在同一时刻进行,应将--flush-logs与--lock-all-tables、--source-data、--master-data或--single-transaction一起使用。) 事务选项 以下选项在转储操作的性能与导出数据的可靠性和一致性之间进行权衡。 用LOCK TABLES和UNLOCK TABLES语句包围每个表的转储。这样在重新加载转储文件时插入速度更快。请参阅10.2.5.1节,“优化INSERT语句”。 --flush-logs,-F 此选项对转储大表很有用。它强制mysqldump一次从服务器检索表的一行数据,而不是检索整个行集并在写入之前将其缓冲在内存中。 请参阅--opt选项的说明。 此选项默认启用,是--add-drop-table--add-locks--create-options--disable-keys--extended-insert--lock-tables--quick--set-charset组合的简写。它提供快速的转储操作,并生成可快速重新加载到MySQL服务器的转储文件。 由于--opt选项默认启用,因此仅需指定其相反选项--skip-opt来关闭几个默认设置。有关选择性启用或禁用受--opt影响的选项子集的信息,请参阅mysqldump选项组的讨论。 --flush-logs,-F:刷新日志文件命令行格式 --flush-logs
在开始转储之前刷新MySQL服务器日志文件。此选项需要
RELOAD
权限。如果将此选项与--all-databases
选项结合使用,则会针对每个转储的数据库刷新日志。使用--lock-all-tables
、--source-data
或--master-data
,或者--single-transaction
时除外。在这些情况下,日志仅刷新一次,对应于所有表被FLUSH TABLES WITH READ LOCK
锁定的时刻。如果希望转储和日志刷新恰好同时发生,应将--flush-logs
与--lock-all-tables
、--source-data
或--master-data
,或者--single-transaction
一起使用。 -
命令行格式 --flush-privileges
在转储
mysql
数据库后,向转储输出中添加一条FLUSH PRIVILEGES
语句。只要转储内容包含mysql
数据库以及任何其他依赖于mysql
数据库中的数据以进行正确恢复的数据库,就应使用此选项。因为转储文件包含一条
FLUSH PRIVILEGES
语句,重新加载该文件需要有足够权限来执行该语句。注意
对于从旧版本升级到MySQL 5.7或更高版本的情况,请勿使用
--flush-privileges
。有关这种情况下的升级说明,请参阅3.5节,“MySQL 8.0中的更改”。 -
命令行格式 --lock-all-tables
锁定所有数据库中的所有表。这通过在整个转储期间获取全局读锁来实现。此选项会自动关闭
--single-transaction
和--lock-tables
。 -
--lock-tables
,-l
--锁定表,-l命令行格式 --lock-tables
对于每个转储的数据库,在转储之前锁定所有要转储的表。对于MyISAM表,使用
READ LOCAL
锁定表,以允许并发插入。对于InnoDB等事务性表,--single-transaction
比--lock-tables
是一个好得多的选择,因为它根本不需要锁定表。由于
--lock-tables
会为每个数据库单独锁定表,因此该选项无法保证转储文件中的表在不同数据库之间具有逻辑一致性。不同数据库中的表可能会以完全不同的状态转储。某些选项,例如
--opt
,会自动启用--lock-tables
。如果你想覆盖此设置,请在选项列表末尾使用--skip-lock-tables
。 -
命令行格式 --no-autocommit
-
命令行格式 --order-by-primary
转储每个表的行,按其主键排序,如果存在唯一索引,则按其第一个唯一索引排序。这在将
MyISAM
表转储到InnoDB
表时很有用,但会使转储操作花费的时间长得多。 -
命令行格式 --shared-memory-base-name=name
特定平台 Windows操作系统 在Windows上,通过共享内存连接到本地服务器时使用的共享内存名称。默认值为
MYSQL
。共享内存名称区分大小写。此选项仅在服务器在启用
shared_memory
系统变量以支持共享内存连接的情况下启动时才适用。 -
命令行格式 --single-transaction
此选项将事务隔离模式设置为
REPEATABLE READ
,并在转储数据之前向服务器发送一条START TRANSACTION
SQL语句。它仅对诸如InnoDB
之类的事务性表有用,因为这样一来,它会在发出START TRANSACTION
时转储数据库的一致状态,而不会阻塞任何应用程序。如果同时满足
gtid_mode=ON
和gtid_purged=ON|AUTO
,则使用--single-transaction
时需要具备RELOAD
或FLUSH_TABLES
权限。此要求是在MySQL 8.0.32中添加的。使用此选项时,您应记住,只有
InnoDB
表是以一致状态转储的。例如,使用此选项时转储的任何MyISAM
或MEMORY
表仍可能更改状态。在进行
--single-transaction
转储时,为确保转储文件有效(表内容和二进制日志坐标正确),其他连接不应使用以下语句:ALTER TABLE
、CREATE TABLE
、DROP TABLE
、RENAME TABLE
、TRUNCATE TABLE
。一致性读操作与这些语句并非相互隔离,因此,在要转储的表上使用这些语句,可能会导致SELECT
(由mysqldump执行,用于检索表内容)获取到错误的内容或失败。--single-transaction
选项和--lock-tables
选项是互斥的,因为LOCK TABLES
会导致任何挂起的事务被隐式提交。在8.0.32版本之前:不建议同时使用
--single-transaction
和--set-gtid-purged
选项;这样做可能会导致mysqldump输出不一致。要转储大型表,请将
--single-transaction
选项与--quick
选项结合使用。
选项组
--opt
选项会启用多个设置,这些设置协同工作以执行快速转储操作。由于默认启用--opt
,所以所有这些设置默认都是开启的。因此,你很少需要指定--opt
。相反,你可以通过指定--skip-opt
将这些设置作为一组关闭,然后可以选择稍后在命令行中指定相关选项来重新启用某些设置。- “
--compact
”选项会关闭多个用于控制可选语句和注释是否显示在输出中的设置。同样,你可以在该选项之后使用其他选项来重新启用某些设置,或者使用“--skip-compact
”形式来开启所有设置。
当您有选择地启用或禁用组选项的效果时,顺序很重要,因为选项是按从头到尾的顺序处理的。例如,--disable-keys
--lock-tables
--skip-opt
不会产生预期的效果;它与单独使用 --skip-opt
的效果相同。
示例
要对整个数据库进行备份:
mysqldump db_name > backup-file.sql
要将转储文件重新加载回服务器:
mysql db_name < backup-file.sql
重新加载转储文件的另一种方法:
mysql -e "source /path-to-backup/backup-file.sql" db_name
mysqldump 对于通过将数据从一个 MySQL 服务器复制到另一个服务器来填充数据库也非常有用:
mysqldump --opt db_name | mysql --host=remote_host -C db_name
你可以使用一条命令转储多个数据库:
mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql
要转储所有数据库,请使用--all-databases
选项:
mysqldump --all-databases > all_databases.sql
对于InnoDB
表,mysqldump提供了一种在线备份的方法:
mysqldump --all-databases --master-data --single-transaction > all_databases.sql
或者,在MySQL 8.0.26及更高版本中:
mysqldump --all-databases --source-data --single-transaction > all_databases.sql
此备份在转储开始时获取所有表上的全局读锁(使用FLUSH TABLES WITH READ LOCK
)。一旦获取到此锁,便会读取二进制日志坐标并释放锁。如果在发出FLUSH
语句时正在运行长时间的更新语句,MySQL服务器可能会停顿,直到这些语句完成。在此之后,转储将不再需要锁,并且不会干扰表上的读写操作。如果MySQL服务器接收到的更新语句很短(就执行时间而言),即使有很多更新操作,初始锁的持有时间也应该不会很明显。
对于时间点恢复(也称为“前滚”,即在需要还原旧备份并重放自该备份以来发生的更改时),轮换二进制日志(请参阅 7.4.4节,“二进制日志”)或至少了解转储对应的二进制日志坐标通常很有用:
mysqldump --all-databases --master-data=2 > all_databases.sql
或者,在 MySQL 8.0.26 及更高版本中:
mysqldump --all-databases --source-data=2 > all_databases.sql
或者:
mysqldump --all-databases --flush-logs --master-data=2 > all_databases.sql
或者,在 MySQL 8.0.26 及更高版本中:
mysqldump --all-databases --flush-logs --source-data=2 > all_databases.sql
--source-data
或 --master-data
选项可以与 --single-transaction
选项同时使用,如果表使用 InnoDB 存储引擎进行存储,这为创建适用于时间点恢复之前使用的在线备份提供了一种便捷方式。
有关进行备份的更多信息,请参阅9.2节“数据库备份方法”和9.3节“备份与恢复策略示例”。
- 要选择
--opt
的效果,但排除某些特性,请对每个特性使用--skip
选项。要禁用扩展插入和内存缓冲,请使用--opt
--skip-extended-insert
--skip-quick
。(实际上,--skip-extended-insert
--skip-quick
就足够了,因为--opt
默认是开启的。) - 要对除禁用索引和表锁定之外的所有功能反转
--opt
,请使用--skip-opt
--disable-keys
--lock-tables
。
限制
默认情况下,[**mysqldump**](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html)
不会转储 performance_schema
或 sys
模式。要转储其中任何一个,请在命令行中显式指定它们的名称。你也可以使用 [
--databases](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_databases)
选项指定它们的名称。对于 performance_schema
,还需使用 [
--skip-lock-tables](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_lock-tables)
选项。
mysqldump
不会转储 INFORMATION_SCHEMA
模式。
mysqldump
不会转储 InnoDB
的 CREATETABLESPACE
语句。
mysqldump
不会转储 NDB Cluster 的 ndbinfo
信息数据库。
mysqldump
包含用于重新创建 mysql
数据库转储的 general_log
和 slow_query_log
表的语句。日志表内容不会被转储。
如果由于权限不足而在备份视图时遇到问题,请参阅 第 27.9 节“视图限制” 以获取解决方法。
6.5.5 mysqlimport — 数据导入程序
mysqlimport
客户端为 LOAD DATA
SQL 语句提供了一个命令行界面。mysqlimport
的大多数选项都直接对应于 LOAD DATA
语法的子句。请参阅第 15.2.9 节,“LOAD DATA 语句”。
像这样调用 mysqlimport:
mysqlimport [options] db_name textfile1 [textfile2 ...]
对于命令行中指定的每个文本文件,mysqlimport 会去除文件名的任何扩展名,并使用结果来确定要将文件内容导入的表名。例如,名为 patient.txt
、patient.text
和 patient
的文件都将被导入到名为 patient
的表中。
mysqlimport
支持以下选项,可以在命令行中指定,也可以在选项文件的 [mysqlimport]
和 [client]
组中指定。有关 MySQL 程序使用的选项文件的信息,请参见6.2.2.2 节,“使用选项文件”。
表6.16 mysqlimport选项
选项名称 | 描述 | 引入版本 | 已弃用 |
---|---|---|---|
--绑定地址 | 使用指定的网络接口连接到MySQL服务器 | ||
--字符集目录 | 可以找到字符集的目录 | ||
--列 | 此选项将以逗号分隔的列名列表作为其值 | ||
--压缩 | 压缩客户端与服务器之间传输的所有信息 | ||
--压缩算法 | 允许用于连接服务器的压缩算法 | ||
--调试 | 写入调试日志 | ||
--调试检查 | 程序退出时打印调试信息 | ||
--debug-info 打印调试信息、内存和程序退出时的CPU统计信息 | 程序退出时打印调试信息、内存和CPU统计信息 | ||
--默认身份验证插件 | 使用的身份验证插件 | ||
--默认字符集 | 指定默认字符集 | ||
--默认额外文件 | 除常规选项文件外,还读取指定名称的选项文件 | ||
--仅读取指定的选项文件 | 仅读取命名选项文件 | ||
--默认组后缀 | 选项组后缀值 | ||
--删除 | 导入文本文件前清空表 | ||
--启用明文插件 | 启用明文身份验证插件 | ||
--字段封闭符 | 此选项与LOAD DATA的相应子句含义相同 | ||
--字段转义字符由 | 此选项与 LOAD DATA 中相应子句的含义相同 |
||
--字段可选择地用特定字符括起来 | 此选项与 LOAD DATA 的相应子句含义相同 |
||
--字段终止符为 | 此选项与 LOAD DATA 的相应子句含义相同。 |
||
--强制 | 即使发生SQL错误也继续执行 | ||
--获取服务器公钥 | 向服务器请求RSA公钥 | ||
--help 显示帮助信息并退出 | 显示帮助信息并退出 | ||
--主机 | MySQL 服务器所在的主机 | ||
--忽略 | 查看 --replace 选项的说明 | ||
--忽略行数 | 忽略数据文件的前N行 | ||
--行终止符为 | 此选项与LOAD DATA的相应子句含义相同 | ||
--local 从本地客户端主机读取输入文件 | 从客户端主机本地读取输入文件 | ||
--锁定表 | 在处理任何文本文件之前锁定所有表进行写入 | ||
--登录路径 | 从 .mylogin.cnf 读取登录路径选项 | ||
--低优先级 | 加载表时使用LOW_PRIORITY | ||
不读取默认选项文件 | 不读取选项文件 | ||
--password 密码,连接服务器时使用的密码 | 连接服务器时使用的密码 | ||
--密码1 | 连接服务器时使用的首个多因素身份验证密码 | ||
--密码2 | 连接服务器时使用的第二个多因素身份验证密码 | ||
--password3 连接服务器时要使用的第三个多因素身份验证密码 | 连接服务器时使用的第三个多因素身份验证密码 | ||
--管道 | 使用命名管道连接到服务器(仅适用于 Windows) | ||
插件目录 | 插件安装目录 | ||
--端口 | 连接所用的TCP/IP端口号 | ||
--打印默认值 | 打印默认选项 | ||
--协议 | 要使用的传输协议 | ||
--替换 | --replace和--ignore选项用于控制对唯一键值上与现有行重复的输入行的处理方式。 | ||
--服务器公钥路径 | 包含RSA公钥的文件的路径名 | ||
--共享内存基名 | 共享内存连接的共享内存名称(仅适用于Windows) | ||
--silent 仅在发生错误时生成输出 | 仅在发生错误时生成输出 | ||
--套接字 | 要使用的Unix套接字文件或Windows命名管道 | ||
--SSL证书颁发机构(CA) | 包含受信任SSL证书颁发机构列表的文件 | ||
--SSL证书颁发机构路径 | 包含受信任SSL证书颁发机构证书文件的目录 | ||
--ssl-cert:包含X.509证书的文件 --ssl-cipher:连接加密允许使用的密码 --ssl-crl:包含证书吊销列表的文件 --ssl-crlpath:包含证书吊销列表文件的目录 | 包含X.509证书的文件 | ||
--ssl-cipher 允许用于连接加密的密码 | 连接加密允许使用的密码 | ||
--ssl-crl:包含证书吊销列表的文件 | 包含证书吊销列表的文件 | ||
--ssl-crlpath:包含证书吊销列表文件的目录 | 包含证书吊销列表文件的目录 | ||
--ssl-fips-mode 是否在客户端启用FIPS模式 --ssl-key 包含X.509密钥的文件 --ssl-mode 与服务器连接所需的安全状态 --ssl-session-data 包含SSL会话数据的文件 --ssl-session-data-continue-on-failed-reuse 会话重用失败时是否建立连接 | 是否在客户端启用FIPS模式 | ||
--ssl-key 包含X.509密钥的文件 | 包含X.509密钥的文件 | ||
--ssl-mode 连接到服务器所需的安全状态 | 与服务器连接所需的安全状态 | ||
--ssl-session-data:包含SSL会话数据的文件 | 包含SSL会话数据的文件 | ||
--ssl-session-data-continue-on-failed-reuse:如果会话复用失败,是否建立连接 | 如果会话复用失败,是否建立连接 | ||
--tls-ciphersuites(传输层安全协议密码套件) | 加密连接允许使用的TLSv1.3密码套件 | ||
--tls-version 允许用于加密连接的TLS协议 | 加密连接允许使用的TLS协议 | ||
--使用线程 | 并行文件加载的线程数 | ||
--用户 | 连接服务器时使用的MySQL用户名 | ||
--罗嗦 | 详细模式 | ||
--版本 | 显示版本信息并退出 | ||
--zstd压缩级别 | 使用zstd压缩的服务器连接的压缩级别 |
-
--help
,-?
命令行格式 --help
显示帮助信息并退出。
-
命令行格式 --bind-address=ip_address
在具有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口。
-
--character-sets-dir=*
dir_name*
命令行格式 --character-sets-dir=path
类型 字符串 默认值 [none]
安装字符集的目录。请参阅12.15节“字符集配置”。
-
--columns=column_list
,-c column_list
命令行格式 --columns=column_list
此选项的值为一列以逗号分隔的列名。列名的顺序决定了如何将数据文件中的列与表中的列进行匹配。
-
--compress
,-C
布尔值 如果可能,压缩客户端与服务器之间发送的所有信息。请参阅6.2.8节,“连接压缩控制”。 从 MySQL 8.0.18 开始,此选项已被弃用。预计它将在未来版本的 MySQL 中移除。请参阅配置旧版连接压缩。 --compression-algorithms=值| 命令行格式 |
--compress[={OFF|ON}]
|
| :--------- | ----------------------- |
| 已弃用 | |
| 类型 | 布尔值 |
| 默认值 |OFF
|如果可能,压缩客户端与服务器之间发送的所有信息。见6.2.8节,“连接压缩控制”。
从 MySQL 8.0.18 版本开始,此选项已被弃用。预计它将在未来的 MySQL 版本中移除。请参阅配置旧版连接压缩。
-
--compression-algorithms=*
value*
命令行格式 --compression-algorithms=value
引入版本 类型 设置 默认值 uncompressed
有效取值 zlib``zstd``uncompressed
连接到服务器时允许使用的压缩算法。可用算法与
protocol_compression_algorithms
系统变量的算法相同。默认值为uncompressed
。有关更多信息,请参阅6.2.8节,“连接压缩控制”。
此选项是在MySQL 8.0.18中添加的。
-
--debug[=debug_options\]
,-#<br /> [debug_options]
(此部分内容为特定格式或代码相关,无法直接翻译,按要求保留原文)命令行格式 --debug[=debug_options]
类型 字符串 默认值 d:t:o
编写一条调试日志。典型的
debug_options
字符串为d:t:o,file_name
。默认值为d:t:o
。此选项仅在MySQL是使用
WITH_DEBUG
构建时才可用。Oracle提供的MySQL发行版二进制文件并非使用此选项构建。 -
命令行格式 --debug-check
类型 布尔值 默认值 FALSE
程序退出时打印一些调试信息。
此选项仅在MySQL是使用
WITH_DEBUG
编译时才可用。Oracle提供的MySQL发行版二进制文件并非使用此选项编译。 -
--debug-info 打印调试信息、内存和程序退出时的CPU统计信息
命令行格式 --debug-info
类型 布尔值 默认值 FALSE
程序退出时,打印调试信息以及内存和CPU使用情况统计信息。
只有在使用
WITH_DEBUG
编译MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件未使用此选项进行编译。 -
命令行格式 --default-character-set=charset_name
类型 字符串 使用
charset_name
作为默认字符集。请参阅 12.15节,“字符集配置”。 -
命令行格式 --default-auth=plugin
类型 字符串 关于使用哪个客户端身份验证插件的提示。请参阅8.2.17节“可插拔身份验证”。
-
--defaults-extra-file=*
file_name*
命令行格式 --defaults-extra-file=file_name
类型 文件名 在全局选项文件之后读取此选项文件,但(在Unix系统上)在用户选项文件之前读取。如果该文件不存在或以其他方式无法访问,则会发生错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录的路径。有关此选项及其他选项文件选项的更多信息,请参阅 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-file=file_name
类型 文件名 仅使用给定的选项文件。如果该文件不存在或以其他方式无法访问,则会出现错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录的路径。异常:即使使用
--defaults-file
,客户端程序仍会读取.mylogin.cnf
。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-group-suffix=str
类型 字符串 不仅读取常规选项组,还读取具有常规名称且后缀为
str
的组。例如,mysqlimport通常读取[client]
和[mysqlimport]
组。如果将此选项指定为--defaults-group-suffix=_other
,mysqlimport还会读取[client_other]
和[mysqlimport_other]
组。有关此选项和其他选项文件选项的更多信息,请参阅 6.2.2.3 节“影响选项文件处理的命令行选项”。
-
--delete
,-D
在导入文本文件之前清空表。命令行格式 --delete
导入文本文件之前清空表。
-
命令行格式 --enable-cleartext-plugin
类型 布尔值 默认值 FALSE
启用
mysql_clear_password
明文身份验证插件。(请参阅8.4.1.4节,“客户端明文可插拔身份验证”。) -
--fields-terminated-by=...
,--fields-enclosed-by=...
,--fields-optionally-enclosed-by=...
,--fields-escaped-by=...
命令行格式 --fields-terminated-by=string
类型 字符串 命令行格式 --fields-enclosed-by=string
类型 字符串 命令行格式 --fields-optionally-enclosed-by=string
类型 字符串 命令行格式 --fields-escaped-by
类型 字符串 这些选项与
LOAD DATA
的相应子句含义相同。请参见 15.2.9 节,“LOAD DATA 语句”。 -
--force
,-f
--强制,-f命令行格式 --force
忽略错误。例如,如果文本文件对应的表不存在,继续处理其余文件。如果不使用
--force
,则当表不存在时,mysqlimport 会退出。 -
命令行格式 --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 服务器。默认主机为
localhost
。 -
--ignore
,-i
命令行格式 --ignore
请参阅
--replace
选项的说明。 -
命令行格式 --ignore-lines=#
类型 数值的 忽略数据文件的前
N
行。 -
命令行格式 --lines-terminated-by=string
类型 字符串 此选项与
LOAD DATA
对应的子句含义相同。例如,要导入以回车符/换行符对作为行结束符的Windows文件,使用--lines-terminated-by="\r\n"
。(根据命令解释器的转义规则,可能需要将反斜杠加倍。)请参见第15.2.9节,“LOAD DATA语句”。 -
--local
,-L
命令行格式 --local
类型 布尔值 默认值 FALSE
默认情况下,文件由服务器主机上的服务器读取。使用此选项,mysqlimport 会在客户端主机上本地读取输入文件。
要在 mysqlimport 中成功使用 LOCAL 加载操作,还要求服务器允许本地加载;请参见8.1.6节,“LOAD DATA LOCAL的安全注意事项” 。
-
命令行格式 --lock-tables
在处理任何文本文件之前,锁定所有表以进行写入操作。这可确保服务器上的所有表保持同步。
-
命令行格式 --login-path=name
类型 字符串 从
.mylogin.cnf
登录路径文件中指定的登录路径读取选项。“登录路径”是一个选项组,其中包含指定要连接到哪个MySQL服务器以及以哪个账户进行身份验证的选项。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参阅6.6.7节,“mysql_config_editor - MySQL配置实用程序”。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --low-priority
加载表时使用
LOW_PRIORITY
。这仅影响仅使用表级锁定的存储引擎(如MyISAM
、MEMORY
和MERGE
)。 -
命令行格式 --no-defaults
不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,可以使用
--no-defaults
来阻止读取这些选项。例外情况是,无论如何都会读取
.mylogin.cnf
文件(如果该文件存在)。这使得即使在使用--no-defaults
时,也能够以比在命令行上更安全的方式指定密码。要创建.mylogin.cnf
,请使用 mysql_config_editor 实用程序。请参阅 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
--password[=password\]
,-p[password]
命令行格式 --password[=password]
类型 字符串 用于连接服务器的MySQL账户的密码。密码值是可选的。如果未提供,mysqlimport 会提示输入密码。如果提供了密码,则在
--password=
或-p
与后面跟随的密码之间不能有空格。如果未指定密码选项,默认情况下不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中提供密码,请使用选项文件。请参阅 8.1.2.1节,“密码安全的最终用户指南”。
要明确指定没有密码且mysqlimport不应提示输入密码,请使用
--skip-password
选项。 -
用于连接服务器的MySQL账户的多因素身份验证因素1的密码。密码值是可选的。如果未提供,mysqlimport 会提示输入。如果提供,
--password1=
与其后的密码之间必须 无空格。如果未指定密码选项,默认不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中提供密码,请使用选项文件。请参阅 8.1.2.1节,“密码安全的最终用户指南”。
要明确指定没有密码且mysqlimport不应提示输入密码,请使用
--skip-password1
选项。--password1
和--password
同义,--skip-password1
和--skip-password
也是如此。 -
用于连接服务器的MySQL账户的多因素身份验证因子2的密码。此选项的语义与
--password1
的语义类似;详细信息请参阅该选项的说明。 -
用于连接服务器的MySQL账户的多因素身份验证因素3的密码。此选项的语义与
--password1
的语义类似;详情请参阅该选项的说明。 -
--pipe
,-W
命令行格式 --pipe
类型 字符串 在Windows上,使用命名管道连接到服务器。仅当服务器启动时启用了
named_pipe
系统变量以支持命名管道连接时,此选项才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的Windows组的成员。 -
命令行格式 --plugin-dir=dir_name
类型 目录名 用于查找插件的目录。如果使用
--default-auth
选项指定身份验证插件,但mysqlimport未找到该插件,请指定此选项。请参阅8.2.17节 “可插拔身份验证”。 -
--port=port_num
,-P port_num
命令行格式 --port=port_num
类型 数值的 默认值 3306
对于TCP/IP连接,要使用的端口号。
-
命令行格式 --print-defaults
打印程序名称以及它从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --protocol=type
类型 字符串 默认值 [see text]
有效取值 TCP``SOCKET``PIPE``MEMORY
用于连接服务器的传输协议。当其他连接参数通常导致使用的协议并非您想要的协议时,此设置很有用。有关允许值的详细信息,请参阅6.2.7节“连接传输协议”。
-
--replace
,-r
</b0--替换,-r命令行格式 --replace
--replace
和--ignore
选项用于控制对唯一键值与现有行重复的输入行的处理。如果指定--replace
,新行会替换具有相同唯一键值的现有行。如果指定--ignore
,唯一键值与现有行重复的输入行将被跳过。如果未指定任一选项,找到重复键值时会发生错误,并且文本文件的其余部分将被忽略。 -
命令行格式 --server-public-key-path=file_name
类型 文件名 包含服务器基于RSA密钥对的密码交换所需公钥的客户端副本的PEM格式文件的路径名。此选项适用于使用
sha256_password
或caching_sha2_password
身份验证插件进行身份验证的客户端。对于不使用这些插件之一进行身份验证的账户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。如果给出
--server-public-key-path=file_name
并指定了一个有效的公钥文件,则它优先于--get-server-public-key
。对于
sha256_password
,只有在使用OpenSSL构建MySQL时,此选项才适用。有关
sha256_password
和caching_sha2_password
插件的信息,请参阅 8.4.1.3 节,“SHA-256 可插拔身份验证” 以及 8.4.1.2 节,“缓存 SHA-2 可插拔身份验证”。 -
命令行格式 --shared-memory-base-name=name
特定平台 Windows系统 在 Windows 上,通过共享内存连接到本地服务器时要使用的共享内存名称。默认值为
MYSQL
。共享内存名称区分大小写。此选项仅在服务器启动时启用了系统变量
shared_memory
以支持共享内存连接的情况下才适用。 -
--silent
,-s
命令行格式 --silent
静默模式。仅在发生错误时生成输出。
-
--socket=path
,-S path
| 命令行格式 |
--socket={file_name|pipe_name}
|
| :--------- | -------------------------------- |
| 类型 | 字符串 |对于连接到
localhost
,要使用的Unix套接字文件,或者在Windows上,要使用的命名管道的名称。在 Windows 上,只有在启用了
named_pipe
系统变量以支持命名管道连接的情况下启动服务器,此选项才会生效。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的 Windows 组的成员。 -
--ssl*
以
--ssl
开头的选项用于指定是否使用加密连接到服务器,并指明在何处查找SSL密钥和证书。请参阅 加密连接的命令选项。 -
| 命令行格式 |
--ssl-fips-mode={OFF|ON|STRICT}
|
| :--------- | --------------------------------- |
| 已弃用 | |
| 类型 | 枚举 |
| 默认值 |OFF
|
| 有效取值 |OFF``ON``STRICT
|控制是否在客户端启用FIPS模式。
--ssl-fips-mode
选项与其他--ssl-xxx
选项的不同之处在于,它并非用于建立加密连接,而是用于影响允许进行哪些加密操作。请参阅8.8节“FIPS支持”。这些
--ssl-fips-mode
值是允许的:- 关闭:禁用FIPS模式。
- 开启:启用FIPS模式。
STRICT
:启用“严格”FIPS模式。
注意
如果OpenSSL FIPS对象模块不可用,则
--ssl-fips-mode
唯一允许的值为OFF
。在这种情况下,将--ssl-fips-mode
设置为ON
或STRICT
会导致客户端在启动时发出警告,并以非FIPS模式运行。从 MySQL 8.0.34 起,此选项已弃用。预计它将在未来的 MySQL 版本中移除。
-
--tls-ciphersuites=*
ciphersuite_list*
命令行格式 --tls-ciphersuites=ciphersuite_list
引入版本 类型 字符串 用于使用TLSv1.3的加密连接的可允许密码套件。该值是一个或多个以冒号分隔的密码套件名称的列表。此选项可指定的密码套件取决于用于编译MySQL的SSL库。有关详细信息,请参阅 8.3.2节,“加密连接TLS协议和密码”。
此选项是在 MySQL 8.0.16 中添加的。
-
命令行格式 --tls-version=protocol_list
类型 字符串 默认值(≥ 8.0.16) TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
(OpenSSL 1.1.1 或更高版本)TLSv1,TLSv1.1,TLSv1.2
(其他情况)默认值(≤ 8.0.15) TLSv1,TLSv1.1,TLSv1.2
用于加密连接的允许的TLS协议。该值是一个由一个或多个以逗号分隔的协议名称组成的列表。此选项可指定的协议取决于用于编译MySQL的SSL库。详情请参阅 8.3.2节,“加密连接TLS协议和密码”。
-
--user=user_name
,-u user_name
命令行格式 --user=user_name,
类型 字符串 用于连接服务器的MySQL账户的用户名。
-
--use-threads=*
N* 使用 N 个线程并行加载文件。
命令行格式 --use-threads=#
类型 数值的 使用
N
个线程并行加载文件。 -
--verbose
,-v
命令行格式 --verbose
详细模式。打印有关程序执行操作的更多信息。
-
--version
,-V
(注:这部分内容无确切可译内容,保留原文形式,一般在程序相关语境中,“--version”常表示“查看版本” ,“-V”是其缩写形式 )命令行格式 --version
显示版本信息并退出。
-
命令行格式 --zstd-compression-level=#
引入版本 类型 整数 用于与服务器建立连接时使用
zstd
压缩算法的压缩级别。允许的级别范围是1到22,值越大表示压缩程度越高。默认的zstd
压缩级别为3。此压缩级别设置对不使用zstd
压缩的连接无效。有关更多信息,请参阅6.2.8节,“连接压缩控制”。
此选项是在MySQL 8.0.18中添加的。
以下是一个示例会话,展示了mysqlimport的使用方法:
$> mysql -e 'CREATE TABLE imptest(id INT, n VARCHAR(30))' test
$> ed
a
100 Max Sydow
101 Count Dracula
.
w imptest.txt
32
q
$> od -c imptest.txt
0000000 1 0 0 \t M a x S y d o w \n 1 0
0000020 1 \t C o u n t D r a c u l a \n
0000040
$> mysqlimport --local test imptest.txt
test.imptest: Records: 2 Deleted: 0 Skipped: 0 Warnings: 0
$> mysql -e 'SELECT * FROM imptest' test
+------+---------------+
| id | n |
+------+---------------+
| 100 | Max Sydow |
| 101 | Count Dracula |
+------+---------------+
6.5.6 mysqlpump——数据库备份程序
mysqlpump 客户端实用程序执行逻辑备份,生成一组 SQL 语句,可通过执行这些语句来重现原始数据库对象定义和表数据。它转储一个或多个 MySQL 数据库,用于备份或将其转移到另一个 SQL 服务器。
注意
自MySQL 8.0.34起,mysqlpump已被弃用;预计它将在MySQL未来版本中移除。你可以使用mysqldump等MySQL程序以及MySQL Shell来执行逻辑备份、转储数据库及类似任务。
提示
考虑使用MySQL Shell转储实用程序,该程序提供多线程并行转储、文件压缩和进度信息显示,以及云功能,如甲骨文云基础设施对象存储流,以及MySQL HeatWave兼容性检查和修改。使用MySQL Shell加载转储实用程序,可以轻松地将转储导入到MySQL Server实例或MySQL HeatWave数据库系统中。MySQL Shell的安装说明可在此处找到。
mysqlpump 功能包括:
- 对数据库以及数据库内的对象进行并行处理,以加快转储过程
- 更好地控制要转储哪些数据库和数据库对象(表、存储程序、用户账户)
- 将用户账户转储为账户管理语句(
CREATE USER
、GRANT
),而不是转储为插入到mysql
系统数据库中的语句。 - 生成压缩输出的能力
- 进度指示器(数值为估算值)
- 对于转储文件重新加载,通过在插入行后添加索引,加快为
InnoDB
表创建二级索引的速度。
注意
mysqlpump 使用MySQL 5.7引入的MySQL功能,因此需搭配MySQL 5.7或更高版本使用。
mysqlpump 至少需要对要转储的表具有 SELECT
权限,对要转储的视图具有 SHOW VIEW
权限,对要转储的触发器具有 TRIGGER
权限,并且如果未使用 --single-transaction
选项,则需要 LOCK TABLES
权限。转储用户定义需要对 mysql
系统数据库具有 SELECT
权限。某些选项可能如选项说明中所述需要其他权限。
要重新加载转储文件,您必须拥有执行其中包含的语句所需的权限,例如对这些语句创建的对象具有相应的CREATE
权限。
注意
在Windows上使用PowerShell并进行输出重定向所生成的转储文件采用UTF - 16编码:
mysqlpump [options] > dump.sql
然而,UTF - 16不允许作为连接字符集(请参阅 第12.4节,“连接字符集和排序规则”),因此转储文件无法正确加载。要解决此问题,请使用 --result-file
选项,该选项以ASCII格式创建输出:
mysqlpump [options] --result-file=dump.sql
mysqlpump调用语法
默认情况下,mysqlpump 会转储所有数据库(mysqlpump 限制 中注明了某些例外情况)。要显式指定此行为,请使用 --all-databases
选项:
mysqlpump --all-databases
要转储单个数据库或该数据库中的某些表,请在命令行中指定数据库名称,也可以选择在其后指定表名:
mysqlpump db_name
mysqlpump db_name tbl_name1 tbl_name2 ...
要将所有名称参数视为数据库名,请使用 --databases 选项:
mysqlpump --databases db_name1 db_name2 ...
默认情况下,mysqlpump 不会转储用户账户定义,即使转储包含授权表的mysql
系统数据库也是如此。要以CREATE USER
和GRANT
语句的形式将授权表内容转储为逻辑定义,请使用--users
选项并禁止转储所有数据库:
mysqlpump --exclude-databases=% --users
在上述命令中,%
是一个通配符,用于匹配 [
--exclude-databases](https://dev.mysql.com/doc/refman/8.0/en/mysqlpump.html#option_mysqlpump_exclude-databases)
选项的所有数据库名称。
mysqlpump 支持多个用于包含或排除数据库、表、存储程序和用户定义的选项。请参阅 mysqlpump对象选择。
要重新加载转储文件,请执行其中包含的语句。例如,使用 mysql 客户端:
mysqlpump [options] > dump.sql
mysql < dump.sql
以下讨论提供了更多mysqlpump的使用示例。
要查看 mysqlpump 支持的选项列表,请发出命令 mysqlpump --help。
mysqlpump选项摘要
mysqlpump 支持以下选项,可以在命令行中指定,也可以在选项文件的[mysqlpump]
和 [client]
组中指定。(在 MySQL 8.0.20 之前,mysqlpump 读取的是[mysql_dump]
组,而不是[mysqlpump]
组。从 8.0.20 起,[mysql_dump]
仍然可以接受,但已弃用。)有关 MySQL 程序使用的选项文件的信息,请参阅 6.2.2.2 节,“使用选项文件”。
表6.17 mysqlpump选项
mysqlpump选项说明
-
--help
,-?
命令行格式 --help
显示一条帮助消息并退出。
-
命令行格式 --add-drop-database
在每个
CREATE DATABASE
语句之前编写一条DROP DATABASE
语句。注意
在MySQL 8.0中,
mysql
模式被视为系统模式,终端用户无法删除。如果--add-drop-database
与--all-databases
一起使用,或者与--databases
一起使用,且要转储的模式列表中包含mysql
,则转储文件会包含一条DROP DATABASE
mysql``语句,在重新加载转储文件时会导致错误。相反,若要使用
--add-drop-database
,请使用--databases
并带上要转储的模式列表,该列表中不包含mysql
。 -
命令行格式 --add-drop-table
在每条
CREATE TABLE
语句之前编写一条DROP TABLE
语句。 -
命令行格式 --add-drop-user
在每条
CREATE USER
语句之前编写一条DROP USER
语句。 -
命令行格式 --add-locks
在每个表转储内容前后加上
LOCK TABLES
和UNLOCK TABLES
语句。这样在重新加载转储文件时,插入操作会更快。参见10.2.5.1节,“优化INSERT语句”。此选项不适用于并行性,因为来自不同表的
INSERT
语句可能会交错执行,并且在一个表的插入操作结束后执行UNLOCK TABLES
可能会释放仍有插入操作的表上的锁。“--add-locks”和“--single-transaction”互斥。
-
命令行格式 --all-databases
转储所有数据库(存在某些例外情况,详见 mysqlpump 限制)。如果未明确指定其他行为,这是默认行为。
“--all-databases”和“--databases”是互斥的。
注意
有关该选项与
--all-databases
不兼容的信息,请参阅--add-drop-database
的说明。在 MySQL 8.0 之前,使用
--all-databases
选项时,mysqldump
和mysqlpump
的--routines
和--events
选项并非是包含存储程序和事件所必需的:转储内容包括mysql
系统数据库,因此也包括包含存储程序和事件定义的mysql.proc
和mysql.event
表。从 MySQL 8.0 开始,不再使用mysql.event
和mysql.proc
表。相应对象的定义存储在数据字典表中,但这些表不会被转储。要在使用--all-databases
进行的转储中包含存储程序和事件,请显式使用--routines
和--events
选项。 -
命令行格式 --bind-address=ip_address
在具有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口。
-
命令行格式 --character-sets-dir=dir_name
类型 目录名称 安装字符集的目录。请参阅12.15节“字符集配置”。
-
命令行格式 --column-statistics
类型 布尔值 默认值 OFF
在输出中添加
ANALYZE TABLE
语句,以便在重新加载转储文件时为转储表生成直方图统计信息。此选项默认处于禁用状态,因为为大型表生成直方图可能需要很长时间。 -
命令行格式 --complete-insert
编写完整的包含列名的
INSERT
语句。 -
--compress
,-C
| 命令行格式 |
--compress[={OFF|ON}]
|
| :--------- | ----------------------- |
| 已弃用 | |
| 类型 | 布尔值 |
| 默认值 |OFF
|如果可能的话,压缩客户端与服务器之间传输的所有信息。请参阅6.2.8节“连接压缩控制”。
从MySQL 8.0.18版本开始,该选项已被弃用。预计在未来的MySQL版本中将移除该选项。请参阅配置旧版连接压缩。
-
命令行格式 --compress-output=algorithm
类型 枚举 有效值 LZ4``ZLIB
默认情况下,mysqlpump 不会压缩输出。此选项指定使用指定算法进行输出压缩。允许的算法有
LZ4
和ZLIB
。要解压缩压缩后的输出,必须拥有合适的实用程序。如果系统命令lz4和openssl zlib不可用,MySQL发行版包含lz4_decompress和zlib_decompress实用程序,可用于解压缩使用
--compress-output=LZ4
和--compress-output=ZLIB
选项压缩的mysqlpump输出。有关更多信息,请参阅6.8.1节,“lz4_decompress — 解压缩mysqlpump的LZ4压缩输出”和6.8.3节,“zlib_decompress — 解压缩mysqlpump的ZLIB压缩输出”。 -
--compression-algorithms=*
value*
命令行格式 --compression-algorithms=value
引入时间 类型 设置 默认值 uncompressed
有效值 zlib``zstd``uncompressed
与服务器建立连接时允许使用的压缩算法。可用的算法与系统变量
protocol_compression_algorithms
中的算法相同。默认值为uncompressed
。如需更多信息,请参阅6.2.8节,“连接压缩控制”。
此选项是在MySQL 8.0.18中添加的。
-
--databases
,-B
命令行格式 --databases
通常情况下,mysqlpump 将命令行中的第一个名称参数视为数据库名,后续的名称则视为表名。使用此选项时,它会将所有名称参数都视为数据库名。在每个新数据库之前,输出中会包含
CREATE DATABASE
语句。“--all-databases”和“--databases”是互斥的。
注意
有关该选项与
--databases
不兼容的信息,请参阅--add-drop-database
的说明。 -
--debug[=debug_options\]
,-#<br /> [debug_options]
命令行格式 --debug[=debug_options]
类型 字符串 默认值 d:t:O,/tmp/mysqlpump.trace
编写调试日志。典型的
debug_options
字符串为d:t:o,file_name
。默认值为d:t:O,/tmp/mysqlpump.trace
。此选项仅在MySQL使用
WITH_DEBUG
进行构建时可用。Oracle提供的MySQL发行版二进制文件未使用此选项构建。 -
命令行格式 --debug-check
类型 布尔值 默认值 FALSE
程序退出时打印一些调试信息。
只有在使用
WITH_DEBUG
编译MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件并非使用此选项编译。 -
--debug-info
,-T
命令行格式 --debug-info
类型 布尔值 默认值 FALSE
程序退出时打印调试信息以及内存和CPU使用情况统计信息。
只有在使用
WITH_DEBUG
构建MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件未使用此选项构建。 -
命令行格式 --default-auth=plugin
类型 字符串 关于使用哪个客户端身份验证插件的提示。请参阅 8.2.17节,“可插拔身份验证”。
-
命令行格式 --default-character-set=charset_name
类型 字符串 默认值 utf8
使用
charset_name
作为默认字符集。请参阅 第 12.15 节,“字符集配置”。如果未指定字符集,mysqlpump 将使用utf8mb4
。 -
命令行格式 --default-parallelism=N
类型 整数 默认值 2
每个并行处理队列的默认线程数。默认值为2。
--parallel-schemas
选项也会影响并行性,可用于覆盖默认的线程数。有关更多信息,请参阅mysqlpump并行处理。使用
--default-parallelism=0
且不使用--parallel-schemas
选项时,mysqlpump 作为单线程进程运行,不会创建队列。启用并行处理后,不同数据库的输出可能会交错显示。
-
--defaults-extra-file=*
file_name*
命令行格式 --defaults-extra-file=file_name
类型 文件名 在全局选项文件之后读取此选项文件,但(在Unix系统上)在用户选项文件之前读取。如果该文件不存在或以其他方式无法访问,则会发生错误。如果
file_name
不是绝对路径名,则会相对于当前目录进行解释。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-file=file_name
类型 文件名 仅使用给定的选项文件。如果该文件不存在或以其他方式无法访问,则会发生错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录的路径。异常:即使使用
--defaults-file
,客户端程序也会读取.mylogin.cnf
。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-group-suffix=str
类型 字符串 不仅读取常规的选项组,还读取具有常规名称且后缀为
str
的组。例如,mysqlpump 通常会读取[client]
和[mysqlpump]
组。如果此选项指定为--defaults-group-suffix=_other
,mysqlpump 还会读取[client_other]
和[mysqlpump_other]
组。有关此选项和其他选项文件选项的更多信息,请参阅 6.2.2.3 节“影响选项文件处理的命令行选项”。
-
命令行格式 --defer-table-indexes
类型 布尔值 默认值 TRUE
在转储输出中,为每个表推迟索引创建,直到其行数据加载完毕。这适用于所有存储引擎,但对于
InnoDB
只适用于二级索引。此选项默认启用;使用
--skip-defer-table-indexes
将其禁用。 -
命令行格式 --events
类型 布尔值 默认值 TRUE
在输出中包含已转储数据库的事件调度器事件。事件转储需要这些数据库的
EVENT
权限。使用
--events
生成的输出包含CREATE EVENT
语句,用于创建事件。此选项默认启用;使用
--skip-events
将其禁用。 -
命令行格式 --exclude-databases=db_list
类型 字符串 不要转储
*
db_list*
中的数据库,该列表包含一个或多个以逗号分隔的数据库名称。此选项可多次使用,效果累加。有关更多信息,请参阅[mysqlpump对象选择](https://dev.mysql.com/doc/refman/8.0/en/mysqlpump.html#mysqlpump-filtering)
。 -
命令行格式 --exclude-events=event_list
类型 字符串 不要转储
*
event_list`*中的数据库,它是一个由一个或多个逗号分隔的事件名称组成的列表。此选项的多个实例是累加的。有关更多信息,请参阅mysqlpump对象选择。 -
命令行格式 --exclude-routines=routine_list
类型 字符串 不要转储
*
routine_list`*中的事件,它是一个由一个或多个逗号分隔的例程(存储过程或函数)名称组成的列表。此选项的多个实例是累加的。有关更多信息,请参阅mysqlpump对象选择。 -
命令行格式 --exclude-tables=table_list
类型 字符串 不要转储
table_list
中的表,table_list是一个由一个或多个逗号分隔的表名组成的列表。此选项的多个实例是累加的。有关更多信息,请参阅mysqlpump对象选择。 -
命令行格式 --exclude-triggers=trigger_list
类型 字符串 不要转储
trigger_list
中的触发器,它是一个或多个由逗号分隔的触发器名称列表。此选项的多个实例是累加的。有关更多信息,请参阅mysqlpump对象选择。 -
命令行格式 --exclude-users=user_list
类型 字符串 请勿转储
user_list
中的用户账户,该列表包含一个或多个以逗号分隔的账户名。此选项可多次使用,效果累加。更多信息,请参阅mysqlpump对象选择。 -
命令行格式 --extended-insert=N
使用多行语法编写
[
INSERT](https://dev.mysql.com/doc/refman/8.0/en/insert.html)
语句,该语法包含多个VALUES
列表。这样可以生成更小的转储文件,并在重新加载文件时加快插入速度。 -
命令行格式 --get-server-public-key
类型 布尔值 向服务器请求基于RSA密钥对的密码交换所需的公钥。此选项适用于使用
caching_sha2_password
身份验证插件进行身份验证的客户端。对于该插件,除非收到请求,否则服务器不会发送公钥。对于不使用该插件进行身份验证的账户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。如果给出
--server-public-key-path=file_name
且指定了一个有效的公钥文件,则它优先于--get-server-public-key
。有关
caching_sha2_password
插件的信息,请参阅8.4.1.2节,“缓存SHA-2可插拔身份验证”。 -
命令行格式 --hex-blob
使用十六进制表示法转储二进制列(例如,
'abc'
变为0x616263
)。受影响的数据类型有BINARY
、VARBINARY
、BLOB
类型、BIT
、所有空间数据类型,以及与binary
字符集 一起使用时的其他非二进制数据类型。 -
--host=host_name
,-h host_name
从指定主机的 MySQL 服务器转储数据。 --host=host_name,-h host_name命令行格式 --host
转储给定主机上MySQL服务器的数据。
-
命令行格式 --include-databases=db_list
类型 字符串 转储
db_list
中的数据库,该列表包含一个或多个以逗号分隔的数据库名。转储内容包括指定数据库中的所有对象。此选项可多次使用,其效果会累加。更多信息,请参阅mysqlpump对象选择。 -
命令行格式 --include-events=event_list
类型 字符串 转储
event_list
中的事件,该列表包含一个或多个以逗号分隔的事件名称。此选项可多次使用,效果累加。有关更多信息,请参阅 mysqlpump 对象选择。 -
--include-routines=*
routine_list*
命令行格式 --include-routines=routine_list
类型 字符串 转储
routine_list
中的例程,该列表包含一个或多个以逗号分隔的例程(存储过程或函数)名称。此选项可多次使用,其作用会累加。有关更多信息,请参阅mysqlpump对象选择。 -
命令行格式 --include-tables=table_list
类型 字符串 转储
table_list
中的表,table_list 是一个由一个或多个逗号分隔的表名组成的列表。此选项的多个实例是累加的。有关更多信息,请参阅 mysqlpump 对象选择。 -
命令行格式 --include-triggers=trigger_list
类型 字符串 转储
trigger_list
中的触发器,该列表包含一个或多个以逗号分隔的触发器名称。此选项的多个实例是累加的。有关更多信息,请参阅mysqlpump对象选择。 -
命令行格式 --include-users=user_list
类型 字符串 转储
user_list
中的用户账户,该列表包含一个或多个用逗号分隔的用户名。此选项可多次使用,其效果会累加。有关更多信息,请参阅 mysqlpump 对象选择。 -
--insert-ignore:写入INSERT IGNORE语句而非INSERT语句。
命令行格式 --insert-ignore
编写
INSERT IGNORE
语句而非INSERT
语句。 -
命令行格式 --log-error-file=file_name
类型 文件名 通过将警告和错误追加到指定文件中来记录它们。如果未给出此选项,mysqlpump 会将警告和错误写入标准错误输出。
-
命令行格式 --login-path=name
类型 字符串 从
.mylogin.cnf
登录路径文件中指定的登录路径读取选项。“登录路径”是一个选项组,其中包含指定要连接到哪个MySQL服务器以及以哪个账户进行身份验证的选项。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参阅6.6.7节,“mysql_config_editor — MySQL配置实用程序”。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --max-allowed-packet=N
类型 数值型 默认值 25165824
客户端/服务器通信缓冲区的最大大小。默认值为24MB,最大值为1GB。
-
命令行格式 --net-buffer-length=N
类型 数值型 默认值 1047552
客户端/服务器通信缓冲区的初始大小。在创建多行
INSERT
语句时(例如使用--extended-insert
选项),mysqlpump 创建的行长度最大为N
字节。如果使用此选项增大该值,请确保 MySQL 服务器的net_buffer_length
系统变量的值至少与此值一样大。 -
命令行格式 --no-create-db
抑制任何可能会包含在输出中的
CREATE DATABASE
语句。 -
--no-create-info
,-t
:抑制可能会包含在输出中的任何CREATE DATABASE语句。 --no-create-info,-t 不编写创建每个转储表的CREATE TABLE语句。 --no-defaults:不读取任何选项文件。如果程序由于从选项文件中读取未知选项而启动失败,可以使用--no-defaults来阻止读取这些选项。 例外情况是,无论如何都会读取.mylogin.cnf文件(如果它存在)。这允许以比在命令行上更安全的方式指定密码,即使使用了--no-defaults。要创建.mylogin.cnf,请使用mysql_config_editor实用程序。请参阅第6.6.7节,“mysql_config_editor - MySQL配置实用程序”。 有关此选项和其他选项文件选项的更多信息,请参阅第6.2.2.3节,“影响选项文件处理的命令行选项”。 --parallel-schemas=[N:]db_list: 类型 字符串命令行格式 --no-create-info
不要编写用于创建每个转储表的
CREATE TABLE
语句。 -
命令行格式 --no-defaults
不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,可以使用
--no-defaults
来阻止读取这些选项。例外情况是,无论如何都会读取
.mylogin.cnf
文件(如果它存在)。这使得即使使用--no-defaults
时,也能以比在命令行上更安全的方式指定密码。要创建.mylogin.cnf
,请使用 mysql_config_editor 实用程序。请参阅 6.6.7节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项及其他选项文件选项的更多信息,请参阅 6.2.2.3 节“影响选项文件处理的命令行选项”。
-
--parallel-schemas=[*
N*:\]*
db_list*
命令行格式 --parallel-schemas=[N:]schema_list
类型 字符串 为处理
*
db_list*
中的数据库创建一个队列,db_list
是一个包含一个或多个以逗号分隔的数据库名称的列表。如果指定了*
N*
,则该队列使用*
N*
个线程。如果未指定*
N*
,则由[
--default-parallelism](https://dev.mysql.com/doc/refman/8.0/en/mysqlpump.html#option_mysqlpump_default-parallelism)
选项确定队列线程数。此选项的多个实例会创建多个队列。mysqlpump 还会创建一个默认队列,用于未在任何
--parallel-schemas
选项中指定的数据库,以及在命令选项选择时转储用户定义。有关更多信息,请参阅 mysqlpump 并行处理。 -
--password[=password\]
,-p[password]
命令行格式 --password[=password]
类型 字符串 用于连接服务器的MySQL账户密码。密码值是可选的。如果未提供,mysqlpump 会提示输入密码。如果提供了密码,在
--password=
或-p
与随后的密码之间不得有空格。如果未指定密码选项,默认不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中输入密码,请使用选项文件。请参阅8.1.2.1节,“密码安全的最终用户指南”。
要明确指定没有密码且mysqlpump不应提示输入密码,请使用
--skip-password
选项。 -
用于连接服务器的MySQL账户的多因素身份验证因素1的密码。密码值是可选的。如果未提供,mysqlpump 会提示输入密码。如果提供了密码,
--password1=
与其后的密码之间不得有空格。如果未指定密码选项,默认不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中输入密码,请使用选项文件。请参阅 8.1.2.1节,“用户密码安全指南”。
要明确指定没有密码且mysqlpump不应提示输入密码,请使用
--skip-password1
选项。--password1
与--password
同义,--skip-password1
与--skip-password
也是如此。 -
--password2[=*
pass_val*\] 用于连接服务器的 MySQL 账户的多因素身份验证因子 2 的密码。此选项的语义与--password1的语义类似;详情请参阅该选项的说明。
用于连接服务器的MySQL账户的多因素身份验证因素2的密码。此选项的语义与
--password1
的语义类似;详情请参阅该选项的说明。 -
--password3[=*
pass_val*\] 用于连接服务器的MySQL账户的多因素身份验证因素3的密码。此选项的语义与--password1的语义类似;详情请参阅该选项的说明。
用于连接服务器的MySQL账户的多因素身份验证因子3的密码。此选项的语义与
--password1
的语义类似;详细信息请参阅该选项的说明。 -
--plugin-dir=*
dir_name*:指定插件目录为dir_name
命令行格式 --plugin-dir=dir_name
类型 目录名称 用于查找插件的目录。如果使用
--default-auth
选项指定身份验证插件,但mysqlpump找不到该插件,请指定此选项。请参阅8.2.17节,“可插拔身份验证”。 -
--port=port_num
,-P port_num
命令行格式 --port=port_num
类型 数值型 默认值 3306
对于TCP/IP连接,要使用的端口号。
-
命令行格式 --print-defaults
打印程序名称以及它从选项文件中获取的所有选项。
有关此选项及其他选项文件选项的更多信息,请参阅 6.2.2.3 节“影响选项文件处理的命令行选项”。
-
命令行格式 --protocol=type
类型 字符串 默认值 [see text]
有效取值 TCP``SOCKET``PIPE``MEMORY
用于连接服务器的传输协议。当其他连接参数通常导致使用的协议并非您想要的协议时,此参数很有用。有关允许值的详细信息,请参阅6.2.7节“连接传输协议”。
-
命令行格式 --replace
-
命令行格式 --result-file=file_name
类型 文件名 直接输出到指定名称的文件。即使在生成转储时出现错误,也会创建结果文件并覆盖其先前的内容。
在Windows系统上应使用此选项,以防止换行符
\n
被转换为\r\n
回车/换行序列。 -
命令行格式 --routines
类型 布尔值 默认值 TRUE
在输出中包含转储数据库的存储程序(过程和函数)。此选项需要全局
SELECT
权限。使用
--routines
生成的输出包含CREATE PROCEDURE
和CREATE FUNCTION
语句来创建例程。此选项默认启用;使用
--skip-routines
将其禁用。 -
--server-public-key-path=*
file_name* --服务器公钥路径=文件名
命令行格式 --server-public-key-path=file_name
类型 文件名 包含服务器进行基于RSA密钥对的密码交换所需公钥的客户端副本的PEM格式文件的路径名。此选项适用于使用
sha256_password
或caching_sha2_password
身份验证插件进行身份验证的客户端。对于不使用这些插件之一进行身份验证的账户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。如果给出
--server-public-key-path=file_name
且指定了一个有效的公钥文件,则它优先于--get-server-public-key
。对于
sha256_password
,只有在MySQL是使用OpenSSL构建时,此选项才适用。有关
sha256_password
和caching_sha2_password
插件的信息,请参阅 8.4.1.3 节“SHA-256 可插拔身份验证” 以及 8.4.1.2 节“缓存 SHA-2 可插拔身份验证”。 -
命令行格式 --set-charset
将
SET NAMES default_character_set
写入输出。此选项默认启用。若要禁用它并取消
SET NAMES
语句,请使用--skip-set-charset
。 -
--set-gtid-purged=*
value*
命令行格式 --set-gtid-purged=value
类型 枚举 默认值 AUTO
有效值 OFF``ON``AUTO
此选项通过指示是否在输出中添加
SET @@GLOBAL.gtid_purged
语句,来实现对写入转储文件的全局事务 ID (GTID) 信息的控制。此选项还可能导致在重新加载转储文件时,向输出写入一条禁用二进制日志记录的语句。下表显示了允许的选项值。默认值为
AUTO
。值 含义 OFF
不要在输出中添加 SET
语句。ON
在输出中添加一条 SET
语句。如果服务器上未启用GTID,则会出现错误。AUTO
如果服务器上启用了全局事务标识符(GTID),则在输出中添加一条 SET
语句。当重新加载转储文件时,
--set-gtid-purged
选项对二进制日志记录有以下影响:--set-gtid-purged=OFF
:SET<br /> @@SESSION.SQL_LOG_BIN=0;
不会添加到输出中。- --set-gtid-purged=ON:SET@@SESSION.SQL_LOG_BIN=0; 会被添加到输出中。
--set-gtid-purged=AUTO
:如果要备份的服务器上启用了GTID(即,如果AUTO
的计算结果为ON
),则会在输出中添加SET<br /> @@SESSION.SQL_LOG_BIN=0;
。
-
命令行格式 --single-transaction
此选项将事务隔离模式设置为
REPEATABLE READ
,并在转储数据之前向服务器发送一条START TRANSACTION
SQL语句。它仅对诸如InnoDB
之类的事务表有用,因为这样它可以在发出START TRANSACTION
时转储数据库的一致性状态,而不会阻塞任何应用程序。使用此选项时,您应记住,只有
InnoDB
表会以一致状态转储。例如,使用此选项时转储的任何MyISAM
或MEMORY
表可能仍会改变状态。在
--single-transaction
转储过程中,为确保转储文件有效(表内容和二进制日志坐标正确),其他连接不应使用以下语句:ALTER TABLE
、CREATE TABLE
、DROP TABLE
、RENAME TABLE
、TRUNCATE TABLE
。一致性读操作与这些语句并非隔离,因此在要转储的表上使用这些语句,可能会导致SELECT
为检索表内容而执行的SELECT操作获取到不正确的内容或失败。“--add-locks”和“--single-transaction”互斥。
-
命令行格式 --skip-definer
类型 布尔值 默认值 FALSE
从视图和存储程序的
CREATE
语句中省略DEFINER
和SQL<br /> SECURITY
子句。重新加载转储文件时,会创建使用默认DEFINER
和SQL<br /> SECURITY
值的对象。请参阅第 27.6 节,“存储对象访问控制”。 -
命令行格式 --skip-dump-rows
类型 布尔值 默认值 FALSE
不要转储表行。
-
命令行格式 --skip-generated-invisible-primary-key
引入 类型 布尔值 默认值 FALSE
此选项从 MySQL 8.0.30 开始可用,它会导致生成的不可见主键(GIPK)不包含在转储中。有关 GIPK 和 GIPK 模式的详细信息,请参阅 15.1.20.11 节,“生成的不可见主键”。
-
--socket=path
,-S path
| 命令行格式 |
--socket={file_name|pipe_name}
|
| :--------- | -------------------------------- |
| 类型 | 字符串 |对于到
localhost
的连接,要使用的 Unix 套接字文件,或者在 Windows 上,要使用的命名管道的名称。在Windows系统上,只有在启用了
named_pipe
系统变量以支持命名管道连接的情况下启动服务器,此选项才会生效。此外,建立连接的用户必须是named_pipe_full_access_group
系统变量指定的Windows组的成员。 -
--ssl*
以
--ssl
开头的选项用于指定是否使用加密连接到服务器,并指明在何处查找 SSL 密钥和证书。请参阅 加密连接的命令选项。 -
| 命令行格式 |
--ssl-fips-mode={OFF|ON|STRICT}
|
| :--------- | --------------------------------- |
| 已弃用 | |
| 类型 | 枚举 |
| 默认值 |OFF
|
| 有效取值 |OFF``ON``STRICT
|控制是否在客户端启用FIPS模式。
--ssl-fips-mode
选项与其他--ssl-xxx
选项的不同之处在于,它并非用于建立加密连接,而是用于影响允许哪些加密操作。请参阅8.8节“FIPS支持”。这些“--ssl-fips-mode”值是允许的:
OFF
:禁用FIPS模式。ON
:启用FIPS模式。STRICT
:启用“严格”FIPS模式。
注意
如果OpenSSL FIPS对象模块不可用,则
--ssl-fips-mode
唯一允许的值为OFF
。在这种情况下,将--ssl-fips-mode
设置为ON
或STRICT
会导致客户端在启动时发出警告,并以非FIPS模式运行。从 MySQL 8.0.34 开始,此选项已被弃用。预计它将在未来版本的 MySQL 中移除。
-
--tls-ciphersuites=*
ciphersuite_list*
命令行格式 --tls-ciphersuites=ciphersuite_list
引入 类型 字符串 使用TLSv1.3的加密连接允许使用的密码套件。该值是一个或多个以冒号分隔的密码套件名称列表。此选项可指定的密码套件取决于用于编译MySQL的SSL库。详情请参阅第8.3.2节“加密连接TLS协议和密码”。
此选项是在MySQL 8.0.16中添加的。
-
命令行格式 --tls-version=protocol_list
类型 字符串 默认值(≥ 8.0.16) TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
(OpenSSL 1.1.1或更高版本)TLSv1,TLSv1.1,TLSv1.2
(其他情况)默认值(≤ 8.0.15) TLSv1,TLSv1.1,TLSv1.2
用于加密连接的允许的TLS协议。该值是一个由一个或多个以逗号分隔的协议名称组成的列表。此选项可指定的协议取决于编译MySQL时使用的SSL库。详情请参阅 8.3.2节,“加密连接TLS协议和密码”。
-
命令行格式 --triggers
类型 布尔值 默认值 TRUE
在输出中包含每个转储表的触发器。
此选项默认启用;使用
--skip-triggers
将其禁用。 -
命令行格式 --tz-utc
此选项支持在不同时区的服务器之间转储和重新加载
TIMESTAMP
列。mysqlpump 会将其连接时区设置为 UTC,并在转储文件中添加SET<br /> TIME_ZONE='+00:00'
。如果不使用此选项,TIMESTAMP
列将在源服务器和目标服务器的本地时区中转储和重新加载,这可能会导致在服务器处于不同时区时值发生变化。--tz-utc
还可以防止因夏令时导致的值变化。此选项默认启用;使用
--skip-tz-utc
将其禁用。 -
--user=user_name
,-u user_name
命令行格式 --user=user_name
类型 字符串 用于连接服务器的MySQL账户的用户名。
如果您正在将
Rewriter
插件与MySQL 8.0.31或更高版本配合使用,则应向该用户授予SKIP_QUERY_REWRITE
权限。 -
命令行格式 --users
类型 布尔值 默认值 FALSE
以
CREATE USER
和GRANT
语句的形式,将用户账户转储为逻辑定义。用户定义存储在
mysql
系统数据库的授权表中。默认情况下,mysqlpump 在mysql
数据库转储中不包含授权表。要将授权表的内容作为逻辑定义转储,请使用--users
选项并禁止所有数据库转储:mysqlpump --exclude-databases=% --users
-
--version
,-V
--版本,-V命令行格式 --version
显示版本信息并退出。
-
命令行格式 --watch-progress
类型 布尔值 默认值 TRUE
定期显示进度指示器,该指示器提供有关已完成的和总的表、行及其他对象数量的信息。
此选项默认启用;使用
--skip-watch-progress
将其禁用。 -
命令行格式 --zstd-compression-level=#
引入;推出 类型 整数 用于与使用
zstd
压缩算法的服务器建立连接时所使用的压缩级别。允许的级别范围是 1 到 22,值越大表示压缩级别越高。默认的zstd
压缩级别为 3。此压缩级别设置对不使用zstd
压缩的连接无效。有关更多信息,请参阅6.2.8节,“连接压缩控制”。
此选项在MySQL 8.0.18中添加。
mysqlpump对象选择
mysqlpump 有一组包含和排除选项,可用于筛选多种对象类型,并灵活控制要转储哪些对象:
--include-databases
和--exclude-databases
适用于数据库及其内部的所有对象。--include-tables
和--exclude-tables
应用于表。这些选项也会影响与表相关联的触发器,除非给出特定于触发器的选项。- “--include-triggers”和“--exclude-triggers”应用于触发器。
--include-routines
和--exclude-routines
适用于存储过程和函数。如果一个例程选项与某个存储过程名称匹配,那么它也会匹配同名的存储函数。--include-events
和--exclude-events
应用于事件调度程序事件。- “--include-users”和“--exclude-users”适用于用户账户。
任何包含或排除选项都可以多次给出。效果是累加的。这些选项的顺序无关紧要。
每个包含和排除选项的值都是一个由逗号分隔的相应对象类型名称的列表。例如:
--exclude-databases=test,world
--include-tables=customer,invoice
对象名称中允许使用通配符:
%
匹配零个或多个字符的任意序列。_
匹配任意单个字符。
例如,--include-tables=t%,__tmp
匹配所有以 t
开头的表名以及所有以 tmp
结尾的五个字符的表名。
对于用户而言,未指定主机部分的名称将被解释为隐含主机为 %
。例如,u1
和 u1@%
是等效的。这与 MySQL 中普遍适用的等效规则相同(参见 8.2.4 节,“指定账户名称”)。
包含和排除选项的交互方式如下:
- 默认情况下,在不使用包含或排除选项时,mysqlpump 会转储所有数据库(mysqlpump 限制中提到的某些例外情况除外)。
- 如果提供了包含选项但没有提供排除选项,则仅转储指定要包含的对象。
- 如果在没有包含选项的情况下给出了排除选项,那么除了被指定排除的对象外,所有对象都会被转储。
- 如果给出了包含和排除选项,所有被指定为排除且未被指定为包含的对象将不会被转储。其他所有对象都将被转储。
如果要转储多个数据库,可以通过在对象名称前加上数据库名称,来指定特定数据库中的表、触发器和例程。以下命令转储数据库 db1
和 db2
,但排除表 db1.t1
和 db2.t2
:
mysqlpump --include-databases=db1,db2 --exclude-tables=db1.t1,db2.t2
以下选项提供了指定要转储哪些数据库的其他方法:
-
“--all-databases”选项转储所有数据库(mysqlpump限制中有某些例外情况说明)。它等同于根本不指定任何对象选项(默认的mysqlpump操作是转储所有内容)。
--include-databases=%
类似于--all-databases
,但它会选择所有数据库进行转储,即使是那些在--all-databases
中被排除的数据库。 -
“--databases”选项会使“mysqlpump”将所有名称参数视为要转储的数据库名称。它等同于一个列出相同数据库的“--include-databases”选项。
mysqlpump并行处理
mysqlpump 可以使用并行处理来实现并发操作。你可以在数据库之间(同时转储多个数据库)以及数据库内部(同时从给定数据库中转储多个对象)选择并发方式。
默认情况下,mysqlpump 使用两个线程设置一个队列。你可以创建额外的队列,并控制分配给每个队列(包括默认队列)的线程数:
-
--default-parallelism=N
指定每个队列使用的默认线程数。如果没有此选项,N
为 2。默认队列始终使用默认数量的线程。除非另行指定,否则其他队列也使用默认数量的线程。
-
--parallel-schemas=[N:\]db_list
为转储db_list
中指定名称的数据库设置一个处理队列,并可选择指定该队列使用的线程数。db_list
是一个由逗号分隔的数据库名称列表。如果选项参数以N:
开头,则队列使用N
个线程。否则,由--default-parallelism
选项确定队列线程数。多次使用
--parallel-schemas
选项会创建多个队列。数据库列表中的名称允许包含与筛选选项所支持的相同的
%
和_
通配符(请参阅mysqlpump对象选择)。
mysqlpump 使用默认队列来处理任何未通过--parallel-schemas
选项显式指定的数据库,并在命令选项选择时转储用户定义。
一般来说,在使用多个队列时,mysqlpump 会在队列处理的数据库集之间使用并行处理,以便同时转储多个数据库。对于使用多个线程的队列,mysqlpump 会在数据库内部使用并行处理,以便同时从给定数据库中转储多个对象。不过也可能会出现例外情况;例如,mysqlpump 从服务器获取数据库中的对象列表时,可能会阻塞队列。
启用并行处理后,来自不同数据库的输出可能会交错。例如,并行转储的多个表中的 INSERT
语句可能会交错;这些语句不会按任何特定顺序写入。这不会影响重新加载,因为输出语句会按要求使用数据库名称限定对象名称,或者在前面加上 USE
语句。
并行处理的粒度为单个数据库对象。例如,不能使用多个线程并行转储单个表。
示例:
mysqlpump --parallel-schemas=db1,db2 --parallel-schemas=db3
mysqlpump 会设置一个队列来处理db1
和 db2
,另一个队列来处理 db3
,还会设置一个默认队列来处理所有其他数据库。所有队列都使用两个线程。
mysqlpump --parallel-schemas=db1,db2 --parallel-schemas=db3
--default-parallelism=4
这与前面的示例相同,只是所有队列都使用四个线程。
mysqlpump --parallel-schemas=5:db1,db2 --parallel-schemas=3:db3
db1
和db2
的队列使用五个线程,db3
的队列使用三个线程,默认队列使用默认的两个线程。
作为一种特殊情况,使用--default-parallelism=0
且不使用--parallel-schemas
选项时,mysqlpump 作为单线程进程运行,并且不会创建队列。
mysqlpump限制
默认情况下,[**mysqlpump**](https://dev.mysql.com/doc/refman/8.0/en/mysqlpump.html)
不会转储 performance_schema
、ndbinfo
或 sys
模式。要转储其中任何一个,请在命令行中显式指定它们。你也可以使用 [
--databases](https://dev.mysql.com/doc/refman/8.0/en/mysqlpump.html#option_mysqlpump_databases)
或 [
--include-databases](https://dev.mysql.com/doc/refman/8.0/en/mysqlpump.html#option_mysqlpump_include-databases)
选项指定它们。
mysqlpump不会转储INFORMATION_SCHEMA模式。
mysqlpump
不会转储 InnoDB
的 CREATETABLESPACE
语句。
mysqlpump 以逻辑形式转储用户账户,使用 CREATE USER
和 GRANT
语句(例如,当你使用 --include-users
或 --users
选项时)。因此,默认情况下,mysql
系统数据库的转储不包括包含用户定义的授权表:user
、db
、tables_priv
、columns_priv
、procs_priv
或 proxies_priv
。要转储任何授权表,请指定 mysql
数据库,后跟表名:
mysqlpump mysql user db ...
6.5.7 mysqlshow — 显示数据库、表和列信息
mysqlshow
客户端可用于快速查看存在哪些数据库、其包含的表,或者某个表的列或索引。
mysqlshow
为多条 SQL SHOW
语句提供了命令行接口。请参见 15.7.7 节,“SHOW 语句”。使用这些语句也可以直接获取相同的信息。例如,可以从 mysql
客户端程序中发出这些语句。
像这样调用 mysqlshow:
mysqlshow [options] [db_name [tbl_name [col_name]]]
- 如果未指定数据库,则显示数据库名称列表。
- 如果未指定表,则显示数据库中所有匹配的表。
- 如果未指定列,则会显示表中所有匹配的列和列类型。
输出仅显示您拥有某些权限的数据库、表或列的名称。
如果最后一个参数包含 shell 或 SQL 通配符(*
、?
、%
或 _
),则仅显示与通配符匹配的名称。如果数据库名称包含下划线,则应使用反斜杠转义(某些 Unix shell 需要两个反斜杠),以获取正确的表或列列表。*
和 ?
字符会转换为 SQL %
和 _
通配符。当您尝试显示名称中带有 _
的表的列时,这可能会导致一些混淆,因为在这种情况下,mysqlshow 仅显示与模式匹配的表名。通过在命令行上最后单独添加一个额外的 %
即可轻松解决此问题。
mysqlshow 支持以下选项,可以在命令行中指定,也可以在选项文件的[mysqlshow]
和 [client]
组中指定。有关 MySQL 程序使用的选项文件的信息,请参阅 6.2.2.2 节,“使用选项文件”。
表6.18 mysqlshow选项
-
--help
,-?
命令行格式 --help
显示帮助信息并退出。
-
命令行格式 --bind-address=ip_address
在拥有多个网络接口的计算机上,使用此选项可选择用于连接到MySQL服务器的接口。
-
命令行格式 --character-sets-dir=path
类型 字符串 默认值 [none]
安装字符集的目录。请参阅12.15节“字符集配置”。
-
--compress
,-C
| 命令行格式 |
--compress[={OFF|ON}]
|
| :--------- | ----------------------- |
| 已弃用 | |
| 类型 | 布尔值 |
| 默认值 |OFF
|如果可能,压缩客户端与服务器之间发送的所有信息。请参阅6.2.8节 “连接压缩控制”。
从 MySQL 8.0.18 开始,此选项已弃用。预计它将在未来的 MySQL 版本中移除。请参阅配置旧版连接压缩。
-
--compression-algorithms=*
value*
命令行格式 --compression-algorithms=value
引入 类型 设置 默认值 uncompressed
有效取值 zlib``zstd``uncompressed
连接到服务器时允许使用的压缩算法。可用的算法与
protocol_compression_algorithms
系统变量的算法相同。默认值为uncompressed
。有关更多信息,请参阅6.2.8节,“连接压缩控制”。
此选项是在MySQL 8.0.18中添加的。
-
命令行格式 --count
显示每个表的行数。对于非
MyISAM
表,此操作可能会很慢。 -
--debug[=debug_options\]
,-#<br /> [debug_options]
命令行格式 --debug[=debug_options]
类型 字符串 默认值 d:t:o
编写一条调试日志。典型的
debug_options
字符串为d:t:o,file_name
。默认值为d:t:o
。此选项仅在MySQL是使用
WITH_DEBUG
构建时可用。Oracle提供的MySQL发行版二进制文件并非使用此选项构建。 -
命令行格式 --debug-check
类型 布尔值 默认值 FALSE
程序退出时打印一些调试信息。
此选项仅在MySQL是使用
WITH_DEBUG
构建时可用。Oracle提供的MySQL发行版二进制文件并非使用此选项构建。 -
--debug-info 程序退出时打印调试信息、内存和CPU统计信息
命令行格式 --debug-info
类型 布尔值 默认值 FALSE
程序退出时,打印调试信息以及内存和CPU使用情况统计数据。
此选项仅在MySQL是使用
WITH_DEBUG
构建时可用。Oracle提供的MySQL发行版二进制文件并非使用此选项构建。 -
命令行格式 --default-character-set=charset_name
类型 字符串 使用
charset_name
作为默认字符集。请参见 12.15节,“字符集配置”。 -
命令行格式 --default-auth=plugin
类型 字符串 关于使用哪个客户端身份验证插件的提示。请参阅 8.2.17节,“可插拔身份验证”。
-
--defaults-extra-file=*
file_name*
命令行格式 --defaults-extra-file=file_name
类型 文件名 在全局选项文件之后读取此选项文件,但(在Unix系统上)在用户选项文件之前读取。如果该文件不存在或以其他方式无法访问,则会发生错误。如果
file_name
不是绝对路径名,则会相对于当前目录进行解释。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-file=file_name
类型 文件名 仅使用给定的选项文件。如果该文件不存在或以其他方式无法访问,则会发生错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录的路径。异常:即使使用
--defaults-file
,客户端程序也会读取.mylogin.cnf
。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-group-suffix=str
类型 字符串 不仅读取常规的选项组,还读取具有常规名称且后缀为
str
的组。例如,mysqlshow通常读取[client]
和[mysqlshow]
组。如果此选项指定为--defaults-group-suffix=_other
,mysqlshow还会读取[client_other]
和[mysqlshow_other]
组。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --enable-cleartext-plugin
类型 布尔值 默认值 FALSE
启用
mysql_clear_password
明文身份验证插件。(请参阅8.4.1.4节,“客户端明文可插拔身份验证”。) -
命令行格式 --get-server-public-key
类型 布尔值 向服务器请求其用于基于密钥对的密码交换的RSA公钥。此选项适用于使用通过
caching_sha2_password
身份验证插件进行身份验证的账户连接到服务器的客户端。对于此类账户的连接,除非收到请求,否则服务器不会将公钥发送给客户端。对于不使用该插件进行身份验证的账户,此选项将被忽略。如果不需要基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。如果指定了
--server-public-key-path=file_name
且该选项指定了一个有效的公钥文件,则它优先于--get-server-public-key
。有关
caching_sha2_password
插件的信息,请参阅8.4.1.2节,“缓存SHA-2可插拔身份验证”。 -
--host=host_name
,-h host_name
命令行格式 --host=host_name
类型 字符串 默认值 localhost
连接到给定主机上的 MySQL 服务器。
-
--keys
,-k
命令行格式 --keys
显示表索引。
-
命令行格式 --login-path=name
类型 字符串 从
.mylogin.cnf
登录路径文件中指定的登录路径读取选项。“登录路径”是一个选项组,其中包含指定要连接到哪个MySQL服务器以及以哪个账户进行身份验证的选项。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参阅6.6.7节,“mysql_config_editor - MySQL配置实用程序”。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --no-defaults
不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,可以使用
--no-defaults
来防止读取这些选项。例外情况是,无论如何都会读取
.mylogin.cnf
文件(如果该文件存在)。这样即使使用了--no-defaults
,也能够以一种比在命令行上指定密码更安全的方式来指定密码。要创建.mylogin.cnf
,请使用 mysql_config_editor 实用程序。请参阅 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
--password[=password\]
,-p[password]
命令行格式 --password[=password]
类型 字符串 用于连接服务器的MySQL账户密码。密码值是可选的。如果未提供,mysqlshow 会提示输入密码。如果提供了密码,在
--password=
或-p
与后面跟随的密码之间不能有空格。如果未指定密码选项,默认不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中提供密码,请使用选项文件。请参阅8.1.2.1节,“密码安全的最终用户指南”。
要明确指定没有密码且mysqlshow不应提示输入密码,请使用
--skip-password
选项。 -
用于连接服务器的MySQL账户的多因素身份验证因素1的密码。密码值是可选的。如果未提供,mysqlshow 会提示输入密码。如果提供了密码,在
--password1=
与后面跟随的密码之间必须没有空格 。如果未指定密码选项,默认不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中输入密码,请使用选项文件。请参阅8.1.2.1节,“密码安全的最终用户指南”。
要显式指定无密码且mysqlshow不应提示输入密码,请使用
--skip-password1
选项。--password1
和--password
是同义词,--skip-password1
和--skip-password
也是同义词。 -
用于连接服务器的MySQL账户的多因素身份验证因素2的密码。此选项的语义与
--password1
的语义类似;详细信息请参阅该选项的说明。 -
用于连接服务器的MySQL账户的多因素身份验证因素3的密码。此选项的语义与
--password1
的语义类似;详细信息请参阅该选项的说明。 -
--pipe
,-W
命令行格式 --pipe
类型 字符串 在 Windows 上,使用命名管道连接到服务器。此选项仅在服务器启动时启用了
named_pipe
系统变量以支持命名管道连接的情况下才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的 Windows 组的成员。 -
命令行格式 --plugin-dir=dir_name
类型 目录名称 用于查找插件的目录。如果使用
--default-auth
选项指定身份验证插件,但mysqlshow未找到该插件,请指定此选项。请参阅8.2.17节 “可插拔身份验证”。 -
--port=port_num
,-P port_num
命令行格式 --port=port_num
类型 数值的 默认值 3306
对于TCP/IP连接,要使用的端口号。
-
命令行格式 --print-defaults
打印程序名称以及从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --protocol=type
类型 字符串 默认值 [see text]
有效取值 TCP``SOCKET``PIPE``MEMORY
用于连接服务器的传输协议。当其他连接参数通常导致使用的协议并非您想要的协议时,此参数很有用。有关允许值的详细信息,请参阅6.2.7节“连接传输协议”。
-
--server-public-key-path=*
file_name*
命令行格式 --server-public-key-path=file_name
类型 文件名 包含服务器进行基于RSA密钥对的密码交换所需公钥的客户端副本的PEM格式文件的路径名。此选项适用于使用
sha256_password
或caching_sha2_password
身份验证插件进行身份验证的客户端。对于不使用这些插件之一进行身份验证的账户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。如果指定了
--server-public-key-path=file_name
且该选项指定了一个有效的公钥文件,则它优先于--get-server-public-key
。对于
sha256_password
,只有在MySQL是使用OpenSSL构建时,此选项才适用。有关
sha256_password
和caching_sha2_password
插件的信息,请参阅 8.4.1.3 节“SHA-256 可插拔身份验证” 以及 8.4.1.2 节“缓存 SHA-2 可插拔身份验证”。 -
命令行格式 --shared-memory-base-name=name
特定于平台 Windows操作系统 在Windows上,使用共享内存连接到本地服务器时要使用的共享内存名称。默认值为
MYSQL
。共享内存名称区分大小写。此选项仅在服务器启动时启用了
shared_memory
系统变量以支持共享内存连接的情况下适用。 -
命令行格式 --show-table-type
显示一个指示表类型的列,如
SHOW FULL TABLES
中所示。类型为BASE TABLE
或VIEW
。 -
--socket=path
,-S path
| 命令行格式 |
--socket={file_name|pipe_name}
|
| :--------- | -------------------------------- |
| 类型 | 字符串 |对于连接到
localhost
,要使用的Unix套接字文件,或者在Windows上,要使用的命名管道的名称。在Windows系统上,只有在启用了
named_pipe
系统变量以支持命名管道连接的情况下启动服务器,此选项才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的Windows组的成员。 -
--ssl*
以
--ssl
开头的选项用于指定是否使用加密连接到服务器,并指明在何处查找SSL密钥和证书。请参阅 加密连接的命令选项。 -
| 命令行格式 |
--ssl-fips-mode={OFF|ON|STRICT}
|
| :--------- | --------------------------------- |
| 已弃用 | |
| 类型 | 枚举 |
| 默认值 |OFF
|
| 有效取值 |OFF``ON``STRICT
|控制是否在客户端启用FIPS模式。
--ssl-fips-mode
选项与其他--ssl-xxx
选项的不同之处在于,它并非用于建立加密连接,而是用于影响允许进行哪些加密操作。请参阅 8.8节“FIPS支持”。这些“--ssl-fips-mode”值是允许的:
- OFF:禁用FIPS模式。
- 开启:启用FIPS模式。
STRICT
:启用“严格”FIPS 模式。
注意
如果OpenSSL FIPS对象模块不可用,则
--ssl-fips-mode
唯一允许的值为OFF
。在这种情况下,将--ssl-fips-mode
设置为ON
或STRICT
会导致客户端在启动时发出警告并以非FIPS模式运行。从 MySQL 8.0.34 开始,此选项已被弃用。预计它将在未来版本的 MySQL 中移除。
-
--status
,-i
命令行格式 --status
显示每个表的额外信息。
-
命令行格式 --tls-ciphersuites=ciphersuite_list
引入 类型 字符串 使用TLSv1.3进行加密连接时允许使用的密码套件。该值是由一个或多个以冒号分隔的密码套件名称组成的列表。此选项可指定的密码套件取决于编译MySQL时使用的SSL库。详情请参阅第8.3.2节“加密连接TLS协议和密码”。
此选项是在 MySQL 8.0.16 中添加的。
-
命令行格式 --tls-version=protocol_list
类型 字符串 默认值(≥ 8.0.16) TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
(OpenSSL 1.1.1 或更高版本)(其他情况)TLSv1、TLSv1.1、TLSv1.2**默认值(≤ 8.0.15) TLSv1,TLSv1.1,TLSv1.2
用于加密连接的允许的TLS协议。该值是一个由一个或多个以逗号分隔的协议名称组成的列表。此选项可指定的协议取决于用于编译MySQL的SSL库。详情请参阅8.3.2节,“加密连接TLS协议和密码”。
-
--user=user_name
,-u user_name
命令行格式 --user=user_name,
类型 字符串 用于连接服务器的MySQL账户的用户名。
-
--verbose
,-v
命令行格式 --verbose
详细模式。打印有关程序操作的更多信息。此选项可多次使用以增加信息量。
-
--version
,-V
显示版本信息并退出。命令行格式 --version
显示版本信息并退出。
-
命令行格式 --zstd-compression-level=#
引入 类型 整数 用于与服务器建立连接时使用
zstd
压缩算法的压缩级别。允许的级别范围是1到22,值越大表示压缩程度越高。默认的zstd
压缩级别为3。压缩级别设置对不使用zstd
压缩的连接没有影响。有关更多信息,请参阅6.2.8节,“连接压缩控制”。
此选项是在MySQL 8.0.18中添加的。
6.5.8 mysqlslap - 负载模拟客户端
mysqlslap 是一个诊断程序,旨在模拟多个客户端对 MySQL 服务器的负载,并报告每个阶段的耗时。其运行效果就像有多个客户端在访问服务器一样。
像这样调用 mysqlslap:
mysqlslap [options]
诸如 --create
或 --query
等一些选项,可让您指定一个包含 SQL 语句的字符串,或者指定一个包含语句的文件。如果指定一个文件,默认情况下,该文件每行必须只包含一条语句。(也就是说,隐式语句分隔符是换行符。)使用 --delimiter
选项可指定不同的分隔符,这样您就可以指定跨多行的语句,或者在单行上放置多条语句。文件中不能包含注释;mysqlslap 无法识别注释。
“mysqlslap运行分为三个阶段:”
- 创建用于测试的模式、表以及(可选)任何存储程序或数据。此阶段使用单个客户端连接。
- 运行负载测试。此阶段可以使用多个客户端连接。
- 清理(断开连接,若指定则删除表)。此阶段使用单个客户端连接。
示例:
提供你自己的创建和查询SQL语句,有50个客户端进行查询,每个客户端执行200次选择操作(在一行中输入命令):
mysqlslap --delimiter=";"
--create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)"
--query="SELECT * FROM a" --concurrency=50 --iterations=200
让 mysqlslap 使用一个包含两列 INT
类型和三列 VARCHAR
类型的表构建查询 SQL 语句。使用五个客户端,每个客户端查询 20 次。不要创建表或插入数据(即使用上一次测试的模式和数据):
mysqlslap --concurrency=5 --iterations=20
--number-int-cols=2 --number-char-cols=3
--auto-generate-sql
告诉程序从指定文件中加载创建、插入和查询SQL语句,其中create.sql
文件包含多个以';'
分隔的表创建语句以及多个以';'
分隔的插入语句。--query
文件应包含多个以';'
分隔的查询语句。运行所有加载语句,然后使用五个客户端(每个客户端运行五次)运行查询文件中的所有查询:
mysqlslap --concurrency=5
--iterations=5 --query=query.sql --create=create.sql
--delimiter=";"
mysqlslap 支持以下选项,这些选项可以在命令行中指定,也可以在选项文件的[mysqlslap]
和 [client]
组中指定。有关 MySQL 程序使用的选项文件的信息,请参阅 6.2.2.2 节,“使用选项文件”。
表6.19 mysqlslap选项
-
--help
,-?
(等同于)--help,-? 显示帮助信息并退出。命令行格式 --help
显示帮助信息并退出。
-
命令行格式 --auto-generate-sql
类型 布尔值 默认值 FALSE
当文件中未提供SQL语句或未使用命令选项时,自动生成SQL语句。
-
命令行格式 --auto-generate-sql-add-autoincrement
类型 布尔值 默认值 FALSE
为自动生成的表添加一个
AUTO_INCREMENT
列。 -
--auto-generate-sql-execute-number=*
N*
命令行格式 --auto-generate-sql-execute-number=#
类型 数值的 指定自动生成多少个查询。
-
命令行格式 --auto-generate-sql-guid-primary
类型 布尔值 默认值 FALSE
为自动生成的表添加基于GUID的主键。
-
命令行格式 --auto-generate-sql-load-type=type
类型 枚举 默认值 mixed
有效取值 read``write``key``update``mixed
指定测试负载类型。允许的值为
read
(扫描表)、write
(插入到表中)、key
(读取主键)、update
(更新主键)或mixed
(一半插入、一半扫描选择)。默认值为mixed
。 -
--auto-generate-sql-secondary-indexes=*
N*
命令行格式 --auto-generate-sql-secondary-indexes=#
类型 数值型 默认值 0
指定要为自动生成的表添加多少个二级索引。默认情况下,不添加任何二级索引。
-
--auto-generate-sql-unique-query-number=*
N*
命令行格式 --auto-generate-sql-unique-query-number=#
类型 数值型 默认值 10
为自动测试生成多少个不同的查询。例如,如果你运行一个
key
测试,该测试执行1000次选择操作,你可以使用此选项并将值设为1000以运行1000个唯一的查询,或者将值设为50以执行50次不同的选择操作。默认值为10。 -
--auto-generate-sql-unique-write-number=*
N*
命令行格式 --auto-generate-sql-unique-write-number=#
类型 数值型 默认值 10
对于
--auto-generate-sql-write-number
要生成多少个不同的查询。默认值为10。 -
--auto-generate-sql-write-number=*
N*
命令行格式 --auto-generate-sql-write-number=#
类型 数字的 默认值 100
要执行多少行插入操作。默认值为100。
-
命令行格式 --commit=#
类型 数字的 默认值 0
提交前要执行多少条语句。默认值为0(不进行提交)。
-
--compress
,-C
| 命令行格式 |
--compress[={OFF|ON}]
|
| :--------- | ----------------------- |
| 已弃用 | |
| 类型 | 布尔值 |
| 默认值 |OFF
|如果可能的话,压缩客户端与服务器之间发送的所有信息。请参阅6.2.8节 “连接压缩控制”。
从MySQL 8.0.18版本起,该选项已被弃用。预计它将在MySQL的未来版本中移除。请参阅配置旧版连接压缩。
-
--compression-algorithms=*
value*
命令行格式 --compression-algorithms=value
引入版本 类型 设置 默认值 uncompressed
有效取值 zlib``zstd``uncompressed
连接到服务器时允许使用的压缩算法。可用的算法与系统变量
protocol_compression_algorithms
中的相同。默认值为uncompressed
。有关更多信息,请参见6.2.8节,“连接压缩控制”。
此选项在MySQL 8.0.18中添加。
-
--concurrency=N
,-c N
命令行格式 --concurrency=#
类型 数值 要模拟的并行客户端数量。
-
命令行格式 --create=value
类型 字符串 包含用于创建表的语句的文件或字符串。
-
命令行格式 --create-schema=value
类型 字符串 运行测试所使用的模式。
注意
如果还给出了
--auto-generate-sql
选项,mysqlslap 会在测试运行结束时删除模式。为避免这种情况,也可使用--no-drop
选项。 -
命令行格式 --csv=[file]
类型 文件名 以逗号分隔值格式生成输出。输出将写入指定文件,如果未指定文件,则输出到标准输出。
-
--debug[=debug_options\]
,-#<br /> [debug_options]
命令行格式 --debug[=debug_options]
类型 字符串 默认值 d:t:o,/tmp/mysqlslap.trace
编写调试日志。典型的
debug_options
字符串为d:t:o,file_name
。默认值为d:t:o,/tmp/mysqlslap.trace
。只有在使用
WITH_DEBUG
构建MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件并非使用此选项构建。 -
命令行格式 --debug-check
类型 布尔值 默认值 FALSE
程序退出时打印一些调试信息。
此选项仅在MySQL是使用
WITH_DEBUG
构建时可用。Oracle提供的MySQL发行版二进制文件未使用此选项构建。 -
--debug-info
,-T
命令行格式 --debug-info
类型 布尔值 默认值 FALSE
程序退出时,打印调试信息以及内存和CPU使用情况统计信息。
只有在使用
WITH_DEBUG
构建MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件未使用此选项构建。 -
命令行格式 --default-auth=plugin
类型 字符串 关于使用哪个客户端身份验证插件的提示。请参阅8.2.17节,“可插拔身份验证”。
-
--defaults-extra-file=*
file_name*
命令行格式 --defaults-extra-file=file_name
类型 文件名 在全局选项文件之后但(在Unix系统上)在用户选项文件之前读取此选项文件。如果该文件不存在或以其他方式无法访问,则会出现错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录的路径。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-file=file_name
类型 文件名 仅使用给定的选项文件。如果该文件不存在或以其他方式无法访问,则会出现错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录的路径。异常:即使使用
--defaults-file
,客户端程序仍会读取.mylogin.cnf
。有关此选项及其他选项文件选项的更多信息,请参阅 6.2.2.3 节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-group-suffix=str
类型 字符串 不仅读取常规的选项组,还读取具有常规名称且后缀为
str
的组。例如,mysqlslap 通常读取[client]
和[mysqlslap]
组。如果此选项设置为--defaults-group-suffix=_other
,mysqlslap 还会读取[client_other]
和[mysqlslap_other]
组。有关此选项和其他选项文件选项的更多信息,请参阅 6.2.2.3 节“影响选项文件处理的命令行选项”。
-
--delimiter=str
,-F str
命令行格式 --delimiter=str
类型 字符串 在文件中或使用命令选项提供的SQL语句中要使用的分隔符。
-
命令行格式 --detach=#
类型 数值型 默认值 0
在每
N
条语句之后分离(关闭并重新打开)每个连接。默认值为0(不分离连接)。 -
命令行格式 --enable-cleartext-plugin
类型 布尔值 默认值 FALSE
启用
mysql_clear_password
明文身份验证插件。(请参阅8.4.1.4节,“客户端明文可插拔身份验证”。) -
--engine=engine_name
,-e engine_name
命令行格式 --engine=engine_name
类型 字符串 用于创建表的存储引擎。
-
命令行格式 --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 服务器。
-
--iterations=N
,-i N
运行测试的次数。命令行格式 --iterations=#
类型 数值型 运行测试的次数。
-
命令行格式 --login-path=name
类型 字符串 从
.mylogin.cnf
登录路径文件中指定的登录路径读取选项。“登录路径”是一个选项组,其中包含的选项用于指定要连接到哪个MySQL服务器以及以哪个账户进行身份验证。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参阅6.6.7节,“mysql_config_editor - MySQL配置实用程序”。有关此选项和其他选项文件选项的更多信息,请参阅 6.2.2.3 节“影响选项文件处理的命令行选项”。
-
命令行格式 --no-drop
类型 布尔值 默认值 FALSE
防止在测试运行期间 mysqlslap 删除它创建的任何模式。
-
命令行格式 --no-defaults
不要读取任何选项文件。如果程序因从选项文件中读取未知选项而启动失败,可以使用
--no-defaults
来防止读取这些选项。例外情况是,无论在何种情况下,都会读取
.mylogin.cnf
文件(如果它存在)。这使得即使在使用--no-defaults
时,也能以比在命令行上更安全的方式指定密码。要创建.mylogin.cnf
,请使用 mysql_config_editor 实用程序。请参阅 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项及其他选项文件选项的更多信息,请参阅 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
--number-char-cols=N
,-x N
命令行格式 --number-char-cols=#
类型 数值型 如果指定了
--auto-generate-sql
,要使用的VARCHAR
列的数量。 -
--number-int-cols=N
,-y N
命令行格式 --number-int-cols=#
类型 数值型 如果指定了
--auto-generate-sql
,要使用的INT
列数。 -
命令行格式 --number-of-queries=#
类型 数值型 将每个客户端的查询数量限制在大约这个数目。查询计数会考虑语句分隔符。例如,如果按如下方式调用 mysqlslap,则会识别
;
分隔符,这样查询字符串的每个实例都计为两个查询。因此,会插入 5 行(而不是 10 行)。mysqlslap --delimiter=";" --number-of-queries=10 --query="use test;insert into t values(null)"
-
命令行格式 --only-print
类型 布尔值 默认值 FALSE
不要连接到数据库。mysqlslap仅打印它本来会执行的操作。
-
--password[=password\]
,-p[password]
--密码[=密码],-p[密码]命令行格式 --password[=password]
类型 字符串 用于连接服务器的MySQL账户的密码。密码值是可选的。如果未提供,mysqlslap 会提示输入。如果提供了,在
--password=
或-p
与随后的密码之间 不得有空格。如果未指定密码选项,默认不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中提供密码,请使用选项文件。请参阅 8.1.2.1节,“密码安全的最终用户指南”。
要明确指定没有密码且mysqlslap不应提示输入密码,请使用
--skip-password
选项。 -
用于连接服务器的MySQL账户的多因素身份验证因素1的密码。密码值是可选的。如果未提供,mysqlslap 会提示输入。如果提供了,
--password1=
与其后的密码之间 不得有空格。如果未指定密码选项,默认不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中输入密码,请使用选项文件。请参阅8.1.2.1节,“用户密码安全指南”。
要显式指定没有密码且mysqlslap不应提示输入密码,请使用
--skip-password1
选项。--password1
与--password
同义,--skip-password1
与--skip-password
亦是如此。 -
--password2[=*
pass_val*\]:用于连接服务器的MySQL账户多因素身份验证因子2的密码。此选项的语义与--password1的语义类似;详情请参阅该选项的说明。
用于连接服务器的MySQL账户的多因素身份验证因素2的密码。此选项的语义与
--password1
的语义类似;详情请参阅该选项的说明。 -
用于连接服务器的MySQL账户的多因素身份验证因素3的密码。此选项的语义与
--password1
的语义类似;详情请参阅该选项的说明。 -
--pipe
,-W
命令行格式 --pipe
类型 字符串 在Windows上,使用命名管道连接到服务器。此选项仅在服务器启动时启用了
named_pipe
系统变量以支持命名管道连接的情况下适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的Windows组的成员。 -
命令行格式 --plugin-dir=dir_name
类型 目录名称 用于查找插件的目录。如果使用
--default-auth
选项指定身份验证插件,但mysqlslap找不到该插件,请指定此选项。请参阅8.2.17节,“可插拔身份验证”。 -
--port=port_num
,-P port_num
命令行格式 --port=port_num
类型 数值型 默认值 3306
对于TCP/IP连接,要使用的端口号。
-
命令行格式 --post-query=value
类型 字符串 包含测试完成后要执行的语句的文件或字符串。此执行不计入计时。
-
命令行格式 --post-system=str
类型 字符串 测试完成后,使用
system()
执行的字符串。此执行不计入计时。 -
命令行格式 --pre-query=value
类型 字符串 运行测试前要执行的语句所在的文件或字符串。此执行不计入时间统计。
-
命令行格式 --pre-system=str
类型 字符串 在运行测试之前使用
system()
执行的字符串。此执行不计入计时。 -
命令行格式 --print-defaults
打印程序名称以及它从选项文件中获取的所有选项。
有关此选项及其他选项文件选项的更多信息,请参阅 6.2.2.3 节,“影响选项文件处理的命令行选项”。
-
命令行格式 --protocol=type
类型 字符串 默认值 [see text]
有效取值 TCP``SOCKET``PIPE``MEMORY
用于连接服务器的传输协议。当其他连接参数通常导致使用的协议并非您想要的协议时,此参数很有用。有关允许值的详细信息,请参阅 6.2.7节“连接传输协议”。
-
--query=value
,-q value
命令行格式 --query=value
类型 字符串 包含用于检索数据的
SELECT
语句的文件或字符串。 -
--server-public-key-path=*
file_name*
命令行格式 --server-public-key-path=file_name
类型 文件名 包含服务器基于RSA密钥对的密码交换所需公钥的客户端副本的PEM格式文件的路径名。此选项适用于使用
sha256_password
或caching_sha2_password
身份验证插件进行身份验证的客户端。对于不使用其中一个插件进行身份验证的账户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。如果给出
--server-public-key-path=file_name
且指定了一个有效的公钥文件,则它优先于--get-server-public-key
。对于
sha256_password
,只有在MySQL是使用OpenSSL构建时,此选项才适用。有关
sha256_password
和caching_sha2_password
插件的信息,请参阅8.4.1.3节,“SHA-256可插拔身份验证”和8.4.1.2节,“缓存SHA-2可插拔身份验证”。 -
命令行格式 --shared-memory-base-name=name
特定平台 Windows:“Windows操作系统” 在Windows上,通过共享内存连接到本地服务器时使用的共享内存名称。默认值为
MYSQL
。共享内存名称区分大小写。此选项仅在服务器启动时启用了系统变量
shared_memory
以支持共享内存连接的情况下才适用。 -
--silent
,-s
安静模式。无输出。命令行格式 --silent
静默模式。无输出。
-
--socket=path
,-S path
对于到 localhost 的连接,要使用的 Unix 套接字文件,或者在 Windows 上,要使用的命名管道的名称。 在 Windows 上,只有在服务器启用了 named_pipe 系统变量以支持命名管道连接时,此选项才适用。此外,进行连接的用户必须是 named_pipe_full_access_group 系统变量指定的 Windows 组的成员。| 命令行格式 |
--socket={file_name|pipe_name}
|
| :--------- | -------------------------------- |
| 类型 | 字符串 |对于与
localhost
的连接,要使用的Unix套接字文件,或者在Windows上,要使用的命名管道的名称。在Windows系统上,只有在服务器启动时启用了
named_pipe
系统变量以支持命名管道连接的情况下,此选项才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的Windows组的成员。 -
命令行格式 --sql-mode=mode
类型 字符串 设置客户端会话的SQL模式。
-
--ssl*
以
--ssl
开头的选项用于指定是否使用加密连接到服务器,并指明在何处查找SSL密钥和证书。请参阅 加密连接的命令选项。 -
| 命令行格式 |
--ssl-fips-mode={OFF|ON|STRICT}
|
| :--------- | --------------------------------- |
| 已弃用 | |
| 类型 | 枚举 |
| 默认值 |OFF
|
| 有效值 |OFF``ON``STRICT
|控制是否在客户端启用FIPS模式。
--ssl-fips-mode
选项与其他--ssl-xxx
选项的不同之处在于,它并非用于建立加密连接,而是用于影响允许进行哪些加密操作。请参阅8.8节“FIPS支持”。这些
--ssl-fips-mode
值是允许的:OFF
:禁用FIPS模式。ON
:启用FIPS模式。STRICT
:启用“严格”FIPS模式。
注意
如果OpenSSL FIPS对象模块不可用,则
--ssl-fips-mode
唯一允许的值是OFF
。在这种情况下,将--ssl-fips-mode
设置为ON
或STRICT
会导致客户端在启动时生成警告并以非FIPS模式运行。从MySQL 8.0.34开始,此选项已弃用。预计它将在未来版本的MySQL中移除。
-
--tls-ciphersuites=*
ciphersuite_list*
命令行格式 --tls-ciphersuites=ciphersuite_list
引入 类型 字符串 用于使用TLSv1.3的加密连接的可允许密码套件。该值是一个或多个以冒号分隔的密码套件名称的列表。可用于此选项的密码套件取决于编译MySQL时使用的SSL库。有关详细信息,请参阅8.3.2节,“加密连接TLS协议和密码”。
此选项是在 MySQL 8.0.16 中添加的。
-
命令行格式 --tls-version=protocol_list
类型 字符串 默认值(≥ 8.0.16) TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
(OpenSSL 1.1.1 或更高版本)TLSv1、TLSv1.1、TLSv1.2(其他情况)默认值(≤ 8.0.15) TLSv1,TLSv1.1,TLSv1.2
用于加密连接的允许的TLS协议。该值是一个由一个或多个以逗号分隔的协议名称组成的列表。此选项可指定的协议取决于用于编译MySQL的SSL库。详情请参阅 8.3.2节,“加密连接TLS协议和密码”。
-
--user=user_name
,-u user_name
命令行格式 --user=user_name,
类型 字符串 用于连接服务器的MySQL账户的用户名。
-
--verbose
,-v
命令行格式 --verbose
详细模式。打印更多关于程序执行情况的信息。此选项可多次使用以增加信息量。
-
--version
,-V
显示版本信息并退出。命令行格式 --version
显示版本信息并退出。
-
命令行格式 --zstd-compression-level=#
引入的 类型 整数 用于与服务器建立连接时使用
zstd
压缩算法的压缩级别。允许的级别范围是1到22,数值越大表示压缩程度越高。默认的zstd
压缩级别为3。压缩级别设置对不使用zstd
压缩的连接无效。有关更多信息,请参阅6.2.8节,“连接压缩控制”。
此选项是在MySQL 8.0.18中添加的。
6.6 管理与实用程序
- 6.6.1 ibd2sdi — InnoDB表空间SDI提取实用程序
- 6.6.2 innochecksum — 离线InnoDB文件校验和实用程序
- 6.6.3 myisam_ftdump — 显示全文索引信息
- 6.6.4 myisamchk——MyISAM表维护实用程序
- 6.6.5 myisamlog — 显示MyISAM日志文件内容
- 6.6.6 myisampack — 生成压缩的只读 MyISAM 表
- 6.6.7 mysql_config_editor — MySQL配置实用程序
- 6.6.8 mysql_migrate_keyring — 密钥环密钥迁移实用程序
- 6.6.9 mysqlbinlog — 处理二进制日志文件的实用程序
- 6.6.10 mysqldumpslow — 汇总慢查询日志文件
本节介绍管理程序以及执行各种实用操作的程序。
6.6.1 ibd2sdi — InnoDB表空间SDI提取实用程序
ibd2sdi 是一个用于从 InnoDB
表空间文件中提取 序列化字典信息(SDI)的实用工具。SDI 数据存在于所有持久化的 InnoDB
表空间文件中。
ibd2sdi 可以在单表文件表空间文件(*.ibd
文件)、通用表空间文件(*.ibd
文件)、系统表空间文件(ibdata*
文件)以及数据字典表空间(mysql.ibd
)上运行。它不支持用于临时表空间或回滚表空间。
ibd2sdi 可在运行时或服务器离线时使用。在 DDL 操作、ROLLBACK
操作以及与 SDI 相关的撤销日志清除操作期间,可能会有一小段时间 ibd2sdi 无法读取存储在表空间中的 SDI 数据。
ibd2sdi 对指定表空间中的 SDI 执行未提交读操作。不会访问重做日志和撤销日志。
像这样调用 ibd2sdi 实用程序:
ibd2sdi [options] file_name1 [file_name2 file_name3 ...]
ibd2sdi 支持类似 InnoDB
系统表空间这样的多文件表空间,但它一次不能在多个表空间上运行。对于多文件表空间,请指定每个文件:
ibd2sdi ibdata1 ibdata2
多文件表空间的文件必须按页码升序指定。如果两个连续的文件具有相同的空间ID,则后一个文件必须以前一个文件的最后一个页码 + 1 作为起始页码。
ibd2sdi 以 JSON
格式输出SDI(包含id、type和data字段)。
ibd2sdi选项
ibd2sdi 支持以下选项:
-
--help
,-h
:显示帮助信息命令行格式 --help
类型 布尔值 默认值 false
显示帮助信息并退出。例如:
Usage: ./ibd2sdi [-v] [-c <strict-check>] [-d <dump file name>] [-n] filename1 [filenames] See http://dev.mysql.com/doc/refman/8.0/en/ibd2sdi.html for usage hints. -h, --help Display this help and exit. -v, --version Display version information and exit. -#, --debug[=name] Output debug log. See http://dev.mysql.com/doc/refman/8.0/en/dbug-package.html -d, --dump-file=name Dump the tablespace SDI into the file passed by user. Without the filename, it will default to stdout -s, --skip-data Skip retrieving data from SDI records. Retrieve only id and type. -i, --id=# Retrieve the SDI record matching the id passed by user. -t, --type=# Retrieve the SDI records matching the type passed by user. -c, --strict-check=name Specify the strict checksum algorithm by the user. Allowed values are innodb, crc32, none. -n, --no-check Ignore the checksum verification. -p, --pretty Pretty format the SDI output.If false, SDI would be not human readable but it will be of less size (Defaults to on; use --skip-pretty to disable.) Variables (--variable-name=value) and boolean options {FALSE|TRUE} Value (after reading options) --------------------------------- ---------------------------------------- debug (No default value) dump-file (No default value) skip-data FALSE id 0 type 0 strict-check crc32 no-check FALSE pretty TRUE
-
--version
,-v
命令行格式 --version
类型 布尔值 默认值 false
显示版本信息并退出。例如:
ibd2sdi Ver 8.0.3-dmr for Linux on x86_64 (Source distribution)
-
--debug[=debug_options\]
,-#<br /> [debug_options]
命令行格式 --debug=options
类型 字符串 默认值 [none]
打印调试日志。有关调试选项,请参阅第7.9.4节“DBUG 包”。
ibd2sdi --debug=d:t /tmp/ibd2sdi.trace
此选项仅在MySQL是使用
WITH_DEBUG
构建时才可用。Oracle提供的MySQL发行版二进制文件并非使用此选项构建。 -
--dump-file=
,-d
命令行格式 --dump-file=file
类型 文件名 默认值 [none]
将序列化字典信息 (SDI) 转储到指定的转储文件中。如果未指定转储文件,则将表空间 SDI 转储到
stdout
。ibd2sdi --dump-file=file_name ../data/test/t1.ibd
-
--skip-data
,-s
命令行格式 --skip-data
类型 布尔值 默认值 false
跳过从序列化字典信息 (SDI) 中检索
data
字段值,仅检索id
和type
字段值,这些是 SDI 记录的主键。$> ibd2sdi --skip-data ../data/test/t1.ibd ["ibd2sdi" , { "type": 1, "id": 330 } , { "type": 2, "id": 7 } ]
-
--id=#
,-i #
命令行格式 --id=#
类型 整数 默认值 0
检索与指定表或表空间对象 ID 匹配的序列化字典信息 (SDI)。对象 ID 对于对象类型是唯一的。表和表空间对象 ID 也可以在
id
和mysql.tables
数据字典表的 id 列中找到。有关数据字典表的信息,请参阅 第 16.1 节,“数据字典架构”。$> ibd2sdi --id=7 ../data/test/t1.ibd ["ibd2sdi" , { "type": 2, "id": 7, "object": { "mysqld_version_id": 80003, "dd_version": 80003, "sdi_version": 1, "dd_object_type": "Tablespace", "dd_object": { "name": "test/t1", "comment": "", "options": "", "se_private_data": "flags=16417;id=2;server_version=80003;space_version=1;", "engine": "InnoDB", "files": [ { "ordinal_position": 1, "filename": "./test/t1.ibd", "se_private_data": "id=2;" } ] } } } ]
-
--type=#
,-t #
命令行格式 --type=#
类型 枚举 默认值 0
有效值 1``2
检索与指定对象类型匹配的序列化字典信息 (SDI)。为表(type=1)和表空间(type=2)对象提供 SDI。
此示例展示了
test
数据库中表空间ts1
的输出:$> ibd2sdi --type=2 ../data/test/ts1.ibd ["ibd2sdi" , { "type": 2, "id": 7, "object": { "mysqld_version_id": 80003, "dd_version": 80003, "sdi_version": 1, "dd_object_type": "Tablespace", "dd_object": { "name": "test/ts1", "comment": "", "options": "", "se_private_data": "flags=16417;id=2;server_version=80003;space_version=1;", "engine": "InnoDB", "files": [ { "ordinal_position": 1, "filename": "./test/ts1.ibd", "se_private_data": "id=2;" } ] } } } ]
由于InnoDB处理默认值元数据的方式,即使未使用
DEFAULT
定义,给定表列在ibd2sdi
输出中的默认值也可能存在且非空。考虑在名为i
的数据库中使用以下语句创建的两个表:CREATE TABLE t1 (c VARCHAR(16) NOT NULL); CREATE TABLE t2 (c VARCHAR(16) NOT NULL DEFAULT "Sakila");
使用 ibd2sdi,我们可以看到,列
c
的default_value
不为空,实际上在两个表中都被填充到了一定长度,如下所示:$> ibd2sdi ../data/i/t1.ibd | grep -m1 '\"default_value\"' | cut -b34- | sed -e s/,// "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAA=" $> ibd2sdi ../data/i/t2.ibd | grep -m1 '\"default_value\"' | cut -b34- | sed -e s/,// "BlNha2lsYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAA="
使用像 jq 这样支持 JSON 的工具检查 ibd2sdi 的输出可能会更容易,如下所示:
$> ibd2sdi ../data/i/t1.ibd | jq '.[1]["object"]["dd_object"]["columns"][0]["default_value"]' "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAA=" $> ibd2sdi ../data/i/t2.ibd | jq '.[1]["object"]["dd_object"]["columns"][0]["default_value"]' "BlNha2lsYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAA="
有关更多信息,请参阅《MySQL内部原理文档》。
-
命令行格式 --strict-check=algorithm
类型 枚举 默认值 crc32
有效取值 crc32``innodb``none
指定一种严格的校验和算法,用于验证读取页面的校验和。选项包括
innodb
、crc32
和none
。在这个示例中,指定了严格版的
innodb
校验和算法:ibd2sdi --strict-check=innodb ../data/test/t1.ibd
在此示例中,指定了严格版本的
crc32
校验和算法:ibd2sdi -c crc32 ../data/test/t1.ibd
如果未指定
--strict-check
选项,则针对非严格的innodb
、crc32
和none
校验和执行验证。 -
--no-check
,-n
命令行格式 --no-check
类型 布尔值 默认值 false
跳过对已读取页面的校验和验证。
ibd2sdi --no-check ../data/test/t1.ibd
-
--pretty
,-p
(表示)以JSON美化打印格式输出SDI数据。默认启用。如果禁用,SDI将不可读,但大小会更小。使用 --skip-pretty 来禁用。 上一页 主页 向上 下一页 (原内容中“--pretty,-p”部分在语境中更像是一种指令说明,没有完全对应确切的中文翻译,所以按原样保留,在后续翻译中结合语境解释其含义。)命令行格式 --pretty
类型 布尔值 默认值 false
以JSON 漂亮打印格式输出SDI 数据。默认启用。如果禁用,SDI 数据将不可读,但占用空间更小。使用
--skip-pretty
禁用。ibd2sdi --skip-pretty ../data/test/t1.ibd
6.6.2 innochecksum——离线InnoDB文件校验和实用程序
innochecksum 用于打印 InnoDB
文件的校验和。该工具读取 InnoDB
表空间文件,计算每个页面的校验和,将计算出的校验和与存储的校验和进行比较,并报告不匹配情况,这表明页面已损坏。它最初是为了在停电后加快验证表空间文件的完整性而开发的,但也可在文件复制后使用。由于校验和不匹配会导致 InnoDB
故意关闭正在运行的服务器,因此使用此工具可能比等待生产服务器遇到损坏的页面更为可取。
innochecksum 不能用于服务器已打开的表空间文件。对于此类文件,应使用 CHECK TABLE
来检查表空间内的表。尝试在服务器已打开的表空间上运行 innochecksum 会导致“无法锁定文件”错误。
如果发现校验和不匹配,请从备份中恢复表空间,或者启动服务器并尝试使用 mysqldump 对表空间内的表进行备份。
像这样调用 innochecksum:
innochecksum [options] file_name
innochecksum选项
innochecksum 支持以下选项。对于涉及页码的选项,页码从 0 开始计数。
-
--help
,-?
命令行格式 --help
类型 布尔值 默认值 false
显示命令行帮助。示例用法:
innochecksum --help
-
--info
,-I
命令行格式 --info
类型 布尔值 默认值 false
“
--help
的同义词。显示命令行帮助。示例用法:”innochecksum --info
-
--version
,-V
命令行格式 --version
类型 布尔值 默认值 false
显示版本信息。示例用法:
innochecksum --version
-
--verbose
,-v
命令行格式 --verbose
类型 布尔值 默认值 false
详细模式;每五秒向日志文件打印一个进度指示器。为了打印进度指示器,必须使用
--log option
指定日志文件。要开启verbose
模式,请运行:innochecksum --verbose
要关闭详细模式,请运行:
innochecksum --verbose=FALSE
--verbose
选项和--log
选项可以同时指定。例如:innochecksum --verbose --log=/var/lib/mysql/test/logtest.txt
要在日志文件中查找进度指示器信息,可以执行以下搜索:
cat ./logtest.txt | grep -i "okay"
日志文件中的进度指示器信息与以下内容类似:
page 1663 okay: 2.863% done page 8447 okay: 14.537% done page 13695 okay: 23.568% done page 18815 okay: 32.379% done page 23039 okay: 39.648% done page 28351 okay: 48.789% done page 33023 okay: 56.828% done page 37951 okay: 65.308% done page 44095 okay: 75.881% done page 49407 okay: 85.022% done page 54463 okay: 93.722% done ...
-
--count
,-c
命令行格式 --count
类型 基本名称 默认值 true
打印文件中的页数并退出。示例用法:
innochecksum --count ../data/test/tab1.ibd
-
--start-page=num
,-s num
命令行格式 --start-page=#
类型 数字的 默认值 0
从这个页码开始。示例用法:
innochecksum --start-page=600 ../data/test/tab1.ibd
或者:
innochecksum -s 600 ../data/test/tab1.ibd
-
--end-page=num
,-e num
命令行格式 --end-page=#
类型 数字的 默认值 0
最小值 0
最大值 18446744073709551615
在此页码结束。示例用法:
innochecksum --end-page=700 ../data/test/tab1.ibd
或:
innochecksum --p 700 ../data/test/tab1.ibd
-
--page=num
,-p num
命令行格式 --page=#
类型 整数 默认值 0
仅检查此页码。示例用法:
innochecksum --page=701 ../data/test/tab1.ibd
-
命令行格式 --strict-check=algorithm
类型 枚举 默认值 crc32
有效值 innodb``crc32``none
指定一种严格的校验和算法。选项包括
innodb
、crc32
和none
。在这个示例中,指定了
innodb
校验和算法:innochecksum --strict-check=innodb ../data/test/tab1.ibd
在这个示例中,指定了
crc32
校验和算法:innochecksum -C crc32 ../data/test/tab1.ibd
适用以下条件:
- 如果未指定
--strict-check
选项,innochecksum 将根据innodb
、crc32
和none
进行验证。 - 如果指定
none
选项,则只允许由none
生成的校验和。 - 如果指定了
innodb
选项,则只允许由innodb
生成的校验和。 - 如果指定了
crc32
选项,则只允许使用crc32
生成的校验和。
- 如果未指定
-
--no-check
,-n
命令行格式 --no-check
类型 布尔值 默认值 false
重写校验和时忽略校验和验证。此选项只能与innochecksum
--write
选项一起使用。如果未指定--write
选项,innochecksum将终止。在这个示例中,重写了InnoDB校验和,以替换无效的校验和:
innochecksum --no-check --write innodb ../data/test/tab1.ibd
-
命令行格式 --allow-mismatches=#
类型 整数 默认值 0
最小值 0
最大值 18446744073709551615
在innochecksum终止之前允许的校验和不匹配的最大数量。默认设置为0。如果
--allow-mismatches=
N
,其中N>=0
,则允许N
个不匹配,并且innochecksum 在出现第N+1
个不匹配时终止。当--allow-mismatches
设置为0时,innochecksum 在首次出现校验和不匹配时终止。在这个示例中,重写现有的
innodb
校验和,将--allow-mismatches
设置为1。innochecksum --allow-mismatches=1 --write innodb ../data/test/tab1.ibd
当
--allow-mismatches
设置为1时,如果在一份1000页的文件中,第600页和第700页出现不匹配情况,那么0 - 599页以及601 - 699页的校验和将被更新。由于--allow-mismatches
设置为1,校验和能够容忍第一次不匹配,并在第二次不匹配时终止,第600页以及700 - 999页保持不变。 -
--write=name
,-w num
命令行格式 --write=algorithm
类型 枚举 默认值 crc32
有效值 innodb``crc32``none
重写校验和。重写无效校验和时,必须将
--no-check
选项与--write
选项一起使用。--no-check
选项会告知innochecksum忽略对无效校验和的验证。如果当前校验和有效,则无需指定--no-check
选项。使用
--write
选项时必须指定算法。--write
选项的可能值为:- innodb:使用源自 InnoDB 的原始算法在软件中计算得出的校验和。
crc32
:使用crc32
算法计算得出的校验和,可能借助硬件完成。none
:一个常量数字。
--write
选项会将整个页面重写到磁盘。如果新的校验和与现有校验和相同,为了尽量减少I/O操作,新的校验和不会写入磁盘。使用
--write
选项时,innochecksum
会获取一个排他锁。在这个示例中,为
tab1.ibd
写入了一个crc32
校验和:innochecksum -w crc32 ../data/test/tab1.ibd
在这个示例中,重写一个
crc32
校验和以替换无效的crc32
校验和:innochecksum --no-check --write crc32 ../data/test/tab1.ibd
-
命令行格式 --page-type-summary
类型 布尔值 默认值 false
显示表空间中每种页类型的计数。示例用法:
innochecksum --page-type-summary ../data/test/tab1.ibd
--page-type-summary
的示例输出:File::../data/test/tab1.ibd ================PAGE TYPE SUMMARY============== #PAGE_COUNT PAGE_TYPE =============================================== 2 Index page 0 Undo log page 1 Inode page 0 Insert buffer free list page 2 Freshly allocated page 1 Insert buffer bitmap 0 System page 0 Transaction system page 1 File Space Header 0 Extent descriptor page 0 BLOB page 0 Compressed BLOB page 0 Other type of page =============================================== Additional information: Undo page type: 0 insert, 0 update, 0 other Undo page state: 0 active, 0 cached, 0 to_free, 0 to_purge, 0 prepared, 0 other
-
命令行格式 --page-type-dump=name
类型 字符串 默认值 [none]
将表空间中每个页面的页面类型信息输出到
stderr
或stdout
。示例用法:innochecksum --page-type-dump=/tmp/a.txt ../data/test/tab1.ibd
-
--log
,-l
命令行格式 --log=path
类型 文件名 默认值 [none]
innochecksum工具的日志输出。必须提供日志文件名。日志输出包含每个表空间页的校验和值。对于未压缩的表,还会提供日志序列号(LSN)值。
--log
替代了早期版本中可用的--debug
选项。使用示例:innochecksum --log=/tmp/log.txt ../data/test/tab1.ibd
或:
innochecksum -l /tmp/log.txt ../data/test/tab1.ibd
-
“-”选项。
指定
-
选项从标准输入读取。如果在预期“从标准输入读取”时缺少-
选项,innochecksum 将打印 innochecksum 使用信息,表明省略了“-”选项。示例用法:cat t1.ibd | innochecksum -
在这个例子中,innochecksum 将
crc32
校验和算法写入a.ibd
,而不改变原始的t1.ibd
文件。cat t1.ibd | innochecksum --write=crc32 - > a.ibd
在多个用户定义的表空间文件上运行innochecksum
以下示例展示了如何在多个用户定义的表空间文件(.ibd文件)上运行innochecksum。
对“test”数据库中所有表空间(.ibd)文件运行innochecksum:
innochecksum ./data/test/*.ibd
对所有文件名以“t”开头的表空间文件(.ibd文件)运行 innochecksum:
innochecksum ./data/test/t*.ibd
对data
目录下的所有表空间文件(.ibd
文件)运行innochecksum:
innochecksum ./data/*/*.ibd
注意
在Windows操作系统上,不支持对多个用户定义的表空间文件运行innochecksum,因为诸如cmd.exe之类的Windows外壳程序不支持通配符模式扩展。在Windows系统上,必须针对每个用户定义的表空间文件单独运行innochecksum。例如:
innochecksum.exe t1.ibd
innochecksum.exe t2.ibd
innochecksum.exe t3.ibd
在多个系统表空间文件上运行innochecksum
默认情况下,只有一个 InnoDB
系统表空间文件(ibdata1
),但可以使用 innodb_data_file_path
选项定义系统表空间的多个文件。在以下示例中,使用 innodb_data_file_path
选项定义了系统表空间的三个文件:ibdata1
、ibdata2
和 ibdata3
。
./bin/mysqld --no-defaults --innodb-data-file-path="ibdata1:10M;ibdata2:10M;ibdata3:10M:autoextend"
这三个文件(ibdata1
、ibdata2
和 ibdata3
)构成一个逻辑系统表空间。要在构成一个逻辑系统表空间的多个文件上运行innochecksum,innochecksum需要使用 -
选项从标准输入读取表空间文件,这相当于将多个文件连接起来创建一个单独的文件。对于上面提供的示例,将使用以下 innochecksum 命令:
cat ibdata* | innochecksum -
有关“-”选项的更多信息,请参阅 innochecksum 选项信息。
注意
在Windows操作系统上,不支持对同一表空间中的多个文件运行innochecksum,因为诸如cmd.exe之类的Windows shell不支持通配符模式扩展。在Windows系统上,必须针对每个系统表空间文件单独运行innochecksum。例如:
innochecksum.exe ibdata1
innochecksum.exe ibdata2
innochecksum.exe ibdata3
6.6.3 myisam_ftdump — 显示全文索引信息
myisam_ftdump 显示有关 FULLTEXT
索引在 MyISAM
表中的信息。它直接读取 MyISAM
索引文件,因此必须在表所在的服务器主机上运行。在使用 myisam_ftdump 之前,如果服务器正在运行,请确保首先发出 FLUSH TABLES
语句。
myisam_ftdump 会扫描并转储整个索引,速度并不是特别快。另一方面,单词的分布变化不频繁,所以不需要经常运行。
像这样调用myisam_ftdump:
myisam_ftdump [options] tbl_name index_num
tbl_name
参数应为 MyISAM
表的名称。你也可以通过指定索引文件(后缀为 .MYI
的文件)来指定表。如果你不在表文件所在的目录中调用 myisam_ftdump,则表名或索引文件名前面必须加上表所在数据库目录的路径名。索引编号从 0 开始。
示例:假设test
数据库包含一个名为mytexttable
的表,其定义如下:
CREATE TABLE mytexttable
(
id INT NOT NULL,
txt TEXT NOT NULL,
PRIMARY KEY (id),
FULLTEXT (txt)
) ENGINE=MyISAM;
`id` 上的索引是索引0,`txt` 上的`FULLTEXT`索引是索引1。如果您的工作目录是`test`数据库目录,请按如下方式调用[**myisam_ftdump**](https://dev.mysql.com/doc/refman/8.0/en/myisam-ftdump.html):
myisam_ftdump mytexttable 1
如果test
数据库目录的路径名是/usr/local/mysql/data/test
,你也可以使用该路径名指定表名参数。如果你不在数据库目录中调用myisam_ftdump,这会很有用:
myisam_ftdump /usr/local/mysql/data/test/mytexttable 1
你可以在类Unix系统上使用 myisam_ftdump 按出现频率顺序生成索引项列表,如下所示:
myisam_ftdump -c mytexttable 1 | sort -r
在Windows系统上,使用:
myisam_ftdump -c mytexttable 1 | sort /R
myisam_ftdump 支持以下选项:
-
--help
,-h
-?
(注:这里的内容为命令参数,一般不翻译,直接保留英文原文更便于理解和使用,若一定要翻译,可译为:--帮助,-h -? )命令行格式 --help
显示帮助信息并退出。
-
--count
,-c
命令行格式 --count
计算每个单词的统计信息(计数和全局权重)。
-
--dump
,-d
(注:这里因无确切语境信息明确“--dump”和“-d”具体含义,保留原英文形式更合适,如在特定领域有固定译法,可根据实际情况调整)命令行格式 --dump
转储索引,包括数据偏移量和单词权重。
-
--length
,-l
(注:这里按原样保留,因为无确切语义可翻译,推测可能是特定命令行参数的表示形式,在计算机领域中这类特定格式常保留英文原文)命令行格式 --length
报告长度分布。
-
--stats
,-s
(转储索引,包括数据偏移量和单词权重。) --length,-l (命令行格式:报告长度分布。) --stats,-s (命令行格式:报告全局索引统计信息。如果未指定其他操作,这是默认操作。) --verbose,-v (命令行格式:详细模式。打印有关程序执行操作的更多输出。) (注:原内容中“--stats,-s”等只是命令参数形式,未明确具体翻译方向,所以保留原样放在对应语境解释前,你可根据实际需求明确具体翻译要求。)命令行格式 命令行格式 命令行格式 命令行格式 --stats
报告全局索引统计信息。如果未指定其他操作,这是默认操作。
-
--verbose
,-v
命令行格式 --verbose
详细模式。打印更多关于程序执行情况的输出。
6.6.4 myisamchk——MyISAM表维护实用程序
- 6.6.4.1 myisamchk通用选项
- 6.6.4.2 myisamchk检查选项
- 6.6.4.3 myisamchk修复选项
- 6.6.4.4 myisamchk的其他选项
- 6.6.4.5 使用myisamchk获取表信息
- 6.6.4.6 myisamchk的内存使用情况
myisamchk
实用程序可获取有关数据库表的信息,或者对其进行检查、修复或优化。myisamchk
适用于 MyISAM
表(即具有用于存储数据和索引的 .MYD
和 .MYI
文件的表)。
你还可以使用 CHECK TABLE
和 REPAIR TABLE
语句来检查和修复 MyISAM
表。请参见 第15.7.3.2节,“CHECK TABLE 语句” 和 第15.7.3.5节,“REPAIR TABLE 语句”。
不支持对分区表使用myisamchk。
注意
在执行表修复操作之前,最好对表进行备份;在某些情况下,该操作可能会导致数据丢失。可能的原因包括但不限于文件系统错误。
像这样调用 myisamchk:
myisamchk [options] tbl_name ...
这些options
用于指定您希望myisamchk执行的操作。后续章节将对这些选项进行说明。您还可以通过调用myisamchk --help获取选项列表。
如果不指定任何选项,myisamchk 会将检查表 “yourtable” 作为默认操作。若要获取更多信息,或让 myisamchk 采取纠正措施,请按以下讨论中的说明指定选项。
tbl_name
是你想要检查或修复的数据库表。如果你在数据库目录以外的地方运行 myisamchk,则必须指定数据库目录的路径,因为 myisamchk 不知道数据库位于何处。实际上,myisamchk 并不在乎你正在处理的文件是否位于数据库目录中。你可以将与数据库表对应的文件复制到其他位置,并在那里对它们执行恢复操作。
如果你愿意,可以在 myisamchk 命令行中指定多个表名。也可以通过指定表的索引文件(即具有 .MYI 后缀的文件)来指定表。这使你能够使用模式 *.MYI 指定目录中的所有表。例如,如果你位于数据库目录中,可以像这样检查该目录中的所有 MyISAM 表:
myisamchk *.MYI
如果您不在数据库目录中,可以通过指定目录路径来查看该目录下的所有表:
myisamchk /path/to/database_dir/*.MYI
你甚至可以通过在MySQL数据目录的路径中指定通配符,来检查所有数据库中的所有表:
myisamchk /path/to/datadir/*/*.MYI
快速检查所有MyISAM
表的推荐方法是:
myisamchk --silent --fast /path/to/datadir/*/*.MYI
如果您想检查所有 MyISAM
表并修复任何损坏的表,可以使用以下命令:
myisamchk --silent --force --fast --update-state \
--key_buffer_size=64M --myisam_sort_buffer_size=64M \
--read_buffer_size=1M --write_buffer_size=1M \
/path/to/datadir/*/*.MYI
此命令假定您有超过 64MB 的可用空间。有关使用myisamchk进行内存分配的更多信息,请参阅6.6.4.6 节,“myisamchk 的内存使用”。
有关使用 myisamchk 的更多信息,请参阅9.6节,“MyISAM表维护与崩溃恢复”。
重要事项
在运行 myisamchk 时,你必须确保没有其他程序正在使用这些表。最有效的方法是在运行 myisamchk 时关闭 MySQL 服务器,或者锁定 myisamchk 正在使用的所有表。
否则,运行myisamchk时,可能会显示以下错误信息:
warning: clients are using or haven't closed the table properly
这意味着您正在尝试检查一个已被其他程序(例如 mysqld 服务器)更新的表,该程序尚未关闭文件,或者在未正确关闭文件的情况下终止,这有时可能会导致一个或多个 MyISAM
表损坏。
如果mysqld正在运行,则必须使用FLUSH TABLES
强制它刷新仍缓存在内存中的所有表修改。然后,在运行myisamchk时,应确保无人正在使用这些表。
不过,避免这个问题最简单的方法是使用CHECK TABLE
而不是myisamchk来检查表。参见第15.7.3.2节,“CHECK TABLE语句”。
myisamchk 支持以下选项,这些选项可以在命令行中指定,也可以在选项文件的[myisamchk]
组中指定。有关 MySQL 程序使用的选项文件的信息,请参阅6.2.2.2 节,“使用选项文件”。
表6.20 myisamchk选项
选项名称 | 描述 |
---|---|
--分析 | 分析键值的分布情况 |
--备份 | 将.MYD文件备份为file_name-time.BAK |
--按块搜索 | 找到给定偏移量处的块所属的记录 |
--字符集目录 | 可以找到字符集的目录 |
--检查 | 检查表中是否存在错误 |
--仅检查已更改的内容 | 仅检查自上次检查以来发生更改的表 |
--纠正校验和 | 修正表的校验和信息 |
--数据文件长度 | 数据文件的最大长度(数据文件已满时重新创建数据文件的情况) |
--调试 | 写入调试日志 |
--decode_bits:解码比特 | 解码比特位 |
--defaults-extra-file:除常规选项文件外,读取指定名称的选项文件 | 除了常规选项文件外,还读取指定名称的选项文件 |
--仅读取指定的选项文件 | 仅读取指定名称的选项文件 |
--默认值组后缀 | 选项组后缀值 |
--描述 | 打印一些关于表的描述性信息 |
--extend-check 执行非常全面的表检查或修复操作,尝试从数据文件中恢复每一个可能的行 | 进行非常彻底的表检查或修复,尝试从数据文件中恢复每一个可能的行 |
--快速检查 | 仅检查未正常关闭的表 |
--强制 | 如果myisamchk发现表中有任何错误,则自动执行修复操作 |
--强制 | 覆盖旧的临时文件。与 -r 或 -o 选项一起使用 |
--ft_max_word_len 全文索引的最大单词长度 | 全文索引的最大单词长度 |
--ft_min_word_len | 全文索引的最小词长 |
--ft_stopword_file:使用此文件中的停用词,而非内置列表中的停用词 | 使用此文件中的停用词,而非内置列表 |
--显示帮助信息并退出 | 显示帮助信息并退出 |
--help 显示帮助信息并退出 --help | 显示帮助信息并退出 |
--信息 | 打印有关所检查表的信息统计信息 |
--键缓冲区大小 | MyISAM表索引块所用缓冲区的大小 |
--keys-used:一个位值,指示要更新哪些索引 | 一个指示要更新哪些索引的位值 |
--max-record-length:如果 myisamchk 无法分配内存来保存大于给定长度的行,则跳过这些行 | 如果 myisamchk 无法分配内存来容纳长度超过给定长度的行,则跳过这些行 |
--中等检查 | 执行一项比 --extend-check 操作更快的检查 |
--myisam_block_size:MyISAM索引页使用的块大小 --myisam_sort_buffer_size:执行REPAIR操作或使用CREATE INDEX或ALTER TABLE创建索引时,对索引进行排序时分配的缓冲区 --no-defaults:不读取选项文件 --parallel-recover:使用与 -r 和 -n 相同的技术,但使用不同的线程并行创建所有键(测试版) --print-defaults:打印默认值 | MyISAM索引页要使用的块大小 |
--myisam_sort_buffer_size:执行REPAIR操作,或使用CREATE INDEX或ALTER TABLE创建索引时,在对索引进行排序时分配的缓冲区 | 执行REPAIR操作时对索引进行排序,或使用CREATE INDEX或ALTER TABLE创建索引时所分配的缓冲区。 |
--不使用默认值 | 不读取选项文件 |
--并行恢复 | 使用与 -r 和 -n 相同的技术,但使用不同的线程并行创建所有密钥(测试版) |
--打印默认值 | 打印默认选项 |
--快速 实现更快的修复,不修改数据文件 | 通过不修改数据文件实现更快的修复 |
--读取缓冲区大小 | 每个执行顺序扫描的线程会为其扫描的每个表分配一个此大小的缓冲区 |
--只读 | 不要将表标记为已检查 |
--修复 | 执行一种修复操作,该操作几乎可以解决任何问题,但不包括唯一键不唯一的情况。 |
--安全恢复 | 使用一种旧的恢复方法进行修复,该方法按顺序读取所有行,并根据找到的行更新所有索引树。 |
--设置自动递增 | 强制新记录的自动递增编号从给定值开始 |
--设置排序规则 | Specify the collation to use for sorting table indexes |
--silent:静默模式 | 静默模式 |
--排序缓冲区大小 | 执行REPAIR操作时对索引进行排序,或使用CREATE INDEX或ALTER TABLE创建索引时所分配的缓冲区。 |
--按索引排序 | 按从高到低的顺序对索引树块进行排序 |
--按键块排序 | 排序键块 |
--按记录排序 | 根据特定索引对记录进行排序 |
--sort-recover 强制 myisamchk 使用排序来解析键,即使临时文件会非常大 | 强制myisamchk使用排序来解析键,即使临时文件可能非常大 |
--stats_method 指定MyISAM索引统计信息收集代码应如何处理NULL值 --stats_method 指定MyISAM索引统计信息收集代码应如何处理NULL值 | 指定MyISAM索引统计信息收集代码应如何处理NULL值 |
--tmpdir | 用于存储临时文件的目录 |
--拆包 | 解包使用myisampack打包的表 |
--更新状态 | 将信息存储在.MYI文件中,以指示检查表的时间以及表是否崩溃。 |
--罗嗦 | 详细模式 |
--版本 | 显示版本信息并退出 |
--等待,等待锁定的表解锁,而不是终止程序。 | 等待锁定的表解锁,而不是终止 |
--写入缓冲区大小 | 写入缓冲区大小 |
6.6.4.1 myisamchk通用选项
本节所述的选项可用于由 myisamchk 执行的任何类型的表维护操作。本节之后的各节描述仅适用于特定操作(如表检查或修复)的选项。
-
--help
,-?
(显示帮助信息并退出。选项按操作类型分组。) --help,-? (显示帮助信息并退出。选项按操作类型分组。) --HELP,-H (显示帮助信息并退出。选项以单个列表形式呈现。) --debug=debug_options,-# debug_options (无对应中文释义,保留原英文表述)命令行格式 --help
显示帮助信息并退出。选项按操作类型分组。
-
--HELP,-H
命令行格式 --HELP
显示帮助信息并退出。选项以单个列表形式呈现。
-
--debug=debug_options
,-# debug_options
命令行格式 --debug[=debug_options]
类型 字符串 默认值 d:t:o,/tmp/myisamchk.trace
编写调试日志。典型的
debug_options
字符串为d:t:o,file_name
。默认值为d:t:o,/tmp/myisamchk.trace
。只有在使用
WITH_DEBUG
编译MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件未使用此选项进行编译。 -
--defaults-extra-file=*
file_name*
命令行格式 --defaults-extra-file=file_name
类型 文件名 在全局选项文件之后但(在Unix系统上)在用户选项文件之前读取此选项文件。如果该文件不存在或以其他方式无法访问,则会出错。如果
file_name
不是绝对路径名,则会相对于当前目录进行解释。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-file=file_name
类型 文件名 仅使用给定的选项文件。如果该文件不存在或以其他方式无法访问,则会出现错误。如果
file_name
不是绝对路径名,则会相对于当前目录进行解释。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 命令行格式 命令行格式 --defaults-group-suffix=str
类型 字符串 不仅读取常规选项组,还读取具有常规名称且后缀为
str
的组。例如,myisamchk通常读取[myisamchk]
组。如果将此选项指定为--defaults-group-suffix=_other
,myisamchk还会读取[myisamchk_other]
组。有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --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
打印程序名称以及它从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
--silent
,-s
--安静模式,-s 注:结合语境推测,这里“--silent”和“-s”应该是表示“安静模式”相关的命令行参数,翻译时适当补充说明以符合语境理解。命令行格式 --silent
静默模式。仅在发生错误时输出内容。你可以使用两次
-s
(即-ss
)让 myisamchk 极其安静。 -
--verbose
,-v
命令行格式 --verbose
详细模式。打印更多关于程序执行情况的信息。此选项可与
-d
和-e
一同使用。多次使用-v
(如-vv
、-vvv
)可获得更多输出。 -
--version
,-V
显示版本信息并退出。命令行格式 --version
显示版本信息并退出。
-
--wait
,-w
命令行格式 --wait
类型 布尔值 默认值 false
如果表被锁定,不要以错误终止,而是等待表解锁后再继续。如果在禁用外部锁定的情况下运行 mysqld,则该表只能由另一个 myisamchk 命令锁定。
您还可以使用--var_name=value
的语法设置以下变量:
变量 | 默认值 |
---|---|
decode_bits |
|
ft_max_word_len |
版本相关的 |
ft_min_word_len |
|
ft_stopword_file |
内置列表 |
key_buffer_size |
|
myisam_block_size |
|
myisam_sort_key_blocks |
|
read_buffer_size |
|
sort_buffer_size |
|
sort_key_blocks |
|
stats_method |
空值不相等 |
write_buffer_size |
可以使用 myisamchk --help 查看可能的 myisamchk 变量及其默认值:
当通过对键进行排序来修复键时,会使用 myisam_sort_buffer_size
,这是使用 --recover
时的常见情况。sort_buffer_size
是 myisam_sort_buffer_size
的已弃用同义词。
key_buffer_size
用于使用 --extend-check
检查表时,或逐行向表中插入键来修复键时(如执行普通插入操作时)。在以下情况下会通过键缓冲区进行修复:
- 你使用
--safe-recover
。 - 对键进行排序所需的临时文件大小,会比直接创建键文件时所需临时文件大小的两倍还大。如果您有较大的
CHAR
、VARCHAR
或TEXT
列键值,通常就会出现这种情况,因为排序操作在进行过程中需要存储完整的键值。如果您有足够的临时空间,并且可以强制使用myisamchk
通过排序进行修复,那么可以使用--sort-recover
选项。
通过键缓冲区进行修复比使用排序占用的磁盘空间要少得多,但速度也要慢得多。
如果你希望修复速度更快,将 key_buffer_size
和 myisam_sort_buffer_size
变量设置为可用内存的25% 左右。你可以将这两个变量都设置为较大的值,因为它们每次只会使用其中一个。
myisam_block_size 是用于索引块的大小。
当给出--analyze
选项时,stats_method
会影响在收集索引统计信息时如何处理NULL
值。它的作用类似于myisam_stats_method
系统变量。有关更多信息,请参阅第 7.1.8 节,“服务器系统变量” 中 myisam_stats_method
的说明,以及第 10.3.8 节,“InnoDB 和 MyISAM 索引统计信息收集”。
ft_min_word_len
和 ft_max_word_len
分别表示 FULLTEXT
索引的最小和最大词长度。ft_stopword_file
用于指定停用词文件。在以下情况下需要设置这些参数。
如果使用myisamchk执行修改表索引的操作(例如修复或分析),除非另行指定,否则将使用最小和最大词长以及停用词文件的默认全文参数值重建FULLTEXT
索引。这可能导致查询失败。
出现此问题是因为这些参数仅服务器知晓。它们并未存储在 MyISAM
索引文件中。如果已在服务器中修改了最小或最大词长,或停用词文件,为避免出现问题,请为 myisamchk 指定与用于 mysqld 相同的 ft_min_word_len
、ft_max_word_len
和 ft_stopword_file
值。例如,如果已将最小词长设置为 3,可以使用 myisamchk 按如下方式修复表:
myisamchk --recover --ft_min_word_len=3 tbl_name.MYI
为确保 myisamchk 和服务器对全文参数使用相同的值,你可以在选项文件的 [mysqld]
和 [myisamchk]
部分中都设置每个参数:
[mysqld]
ft_min_word_len=3
[myisamchk]
ft_min_word_len=3
除了使用 myisamchk 外,还可以使用 REPAIR TABLE
、ANALYZE TABLE
、OPTIMIZE TABLE
或 ALTER TABLE
。这些语句由服务器执行,服务器知道要使用的正确全文参数值。
6.6.4.2 myisamchk检查选项
myisamchk 支持以下用于表检查操作的选项:
-
--check
,-c
--检查,-c命令行格式 --check
检查表格是否有错误。如果未明确指定选择操作类型的选项,这将是默认操作。
-
--仅检查已更改的内容,-C
命令行格式 --check-only-changed
只检查自上次检查以来发生更改的表。
-
命令行格式 --extend-check
非常彻底地检查表。如果表有很多索引,这个操作会相当慢。此选项只应在极端情况下使用。通常,myisamchk 或 myisamchk --medium-check 应该能够确定表中是否存在任何错误。
如果您正在使用
--extend-check
且有充足的内存,将key_buffer_size
变量设置为较大的值有助于加快修复操作的运行速度。另请参阅表修复选项下列出的此选项的说明。
有关输出格式的说明,请参阅6.6.4.5节,“使用myisamchk获取表信息”。
-
--fast
,-F
命令行格式 --fast
只检查未正确关闭的表。
-
--force
,-f
--强制,-f命令行格式 --force
如果myisamchk在表中发现任何错误,则自动执行修复操作。修复类型与使用
--recover
或-r
选项指定的类型相同。 -
--信息,-i
命令行格式 --information
打印关于所检查表的信息统计数据。
-
--medium-check
,-m
进行比--extend-check操作更快的检查。这只能发现所有错误的99.99%,但在大多数情况下应该足够了。命令行格式 --medium-check
执行一项比
--extend-check
操作更快的检查。这只能发现所有错误中的99.99%,但在大多数情况下这应该足够好了。 -
--read-only
,-T
命令行格式 --read-only
不要将表标记为已检查。如果您使用myisamchk检查某个正被其他不使用锁定机制的应用程序使用的表,这种情况下此操作很有用,例如在禁用外部锁定运行时的mysqld。
-
命令行格式 --update-state
将信息存储在
.MYI
文件中,以表明表的检查时间以及表是否崩溃。要充分利用--check-only-changed
选项,应使用此功能。但是,如果 mysqld 服务器正在使用该表,并且在禁用外部锁定的情况下运行该服务器,则不应使用此选项。
6.6.4.3 myisamchk修复选项
myisamchk
支持以下用于表修复操作(在给出诸如 --recover
或 --safe-recover
等选项时执行的操作)的选项:
-
--backup
,-B
--备份,-B命令行格式 --backup
将
.MYD
文件备份为file_name-time.BAK
-
命令行格式 --character-sets-dir=path
类型 字符串 默认值 [none]
安装字符集的目录。请参阅12.15节“字符集配置”。
-
命令行格式 命令行格式 --correct-checksum
修正表的校验和信息。
-
--data-file-length=len
,-D len
命令行格式 命令行格式 --data-file-length=len
类型 数字的 数据文件的最大长度(当数据文件 “已满” 时重新创建数据文件的情况)。
-
--extend-check
,-e
: --extend-check(-e):执行修复操作,尝试从数据文件中恢复每一个可能的行。通常情况下,这也会发现很多垃圾行。除非你别无选择,否则不要使用此选项。有关此选项在表检查选项下的描述,请参阅相关内容。关于输出格式的说明,请参阅第6.6.4.5节,“使用myisamchk获取表信息”。 (这里“--extend-check”可直译为“--扩展检查” ,“-e” 是该选项的缩写,在实际文档中常保留英文表述)命令行格式 --extend-check
执行一次修复操作,尝试从数据文件中恢复每一个可能的行。通常情况下,这也会找到大量的无效行。除非你别无他法,否则不要使用此选项。
另请参阅表检查选项下对此选项的说明。
有关输出格式的说明,请参见6.6.4.5节“使用myisamchk获取表信息”。
-
--force
,-f
: --强制,-f --extend-check,-e: --扩展检查,-e --force,-f: --强制,-f --keys-used=val,-k val: --使用的键=值,-k 值命令行格式 --force
覆盖旧的中间文件(名称类似
tbl_name.TMD
的文件),而不是中止操作。 -
--keys-used=val
,-k val
命令行格式 --keys-used=val
类型 数值型 对于 myisamchk,选项值是一个位值,用于指示要更新哪些索引。选项值的每个二进制位对应一个表索引,其中第一个索引为第 0 位。选项值为 0 表示禁用所有索引的更新,这可用于实现更快的插入操作。已停用的索引可以通过使用 myisamchk -r 重新激活。
-
命令行格式 --max-record-length=len
类型 数值型 如果myisamchk无法分配内存来容纳大于给定长度的行,则跳过这些行。
-
命令行格式 --parallel-recover
注意
此选项在MySQL 8.0.28中已弃用,并在MySQL 8.0.30中移除。
使用与
-r
和-n
相同的技术,但使用不同的线程并行创建所有密钥。这是测试版代码。使用风险自负! -
--quick
,-q
命令行格式 --quick
通过仅修改索引文件而非数据文件来实现更快的修复。如果出现重复键,你可以指定此选项两次,以强制 myisamchk 修改原始数据文件。
-
--修复, -r
命令行格式 --recover
执行修复操作,它几乎可以解决任何问题,但唯一键不唯一的情况除外(对于
MyISAM
表,这种错误极不可能发生)。如果要恢复表,应首先尝试此选项。仅当 myisamchk 报告无法使用--recover
恢复表时,才应尝试--safe-recover
。(在不太可能出现的情况下,即--recover
失败时,数据文件仍保持完整。)如果内存充足,你应该增大
myisam_sort_buffer_size
的值。 -
命令行格式 --safe-recover
使用一种旧的恢复方法进行修复,该方法按顺序读取所有行,并根据找到的行更新所有索引树。这比
--recover
慢一个数量级,但可以处理--recover
无法处理的几种极不可能出现的情况。这种恢复方法使用的磁盘空间也比--recover
少得多。通常,应首先使用--recover
进行修复,只有在--recover
失败时,才使用--safe-recover
。如果内存充足,应该增大
key_buffer_size
的值。 -
命令行格式 --set-collation=name
类型 字符串 指定用于对表索引进行排序的排序规则。字符集名称由排序规则名称的第一部分暗示。
-
--sort-recover
,-n
强制 myisamchk 使用排序来解析键,即使临时文件会非常大。命令行格式 --sort-recover
强制 myisamchk 使用排序来解析键,即使临时文件会非常大。
-
--tmpdir=dir_name
,-t dir_name
命令行格式 --tmpdir=dir_name
类型 目录名 用于存储临时文件的目录路径。如果未设置此选项,myisamchk 将使用
TMPDIR
环境变量的值。--tmpdir
可以设置为一个目录路径列表,创建临时文件时会按循环方式依次使用这些路径。在 Unix 上,目录名之间的分隔符是冒号(:
),在 Windows 上则是分号(;
)。 -
--unpack
,-u
命令行格式 --unpack
解包一个使用 myisampack 打包的表。
6.6.4.4 其他myisamchk选项
myisamchk 支持除表检查和修复之外的以下操作选项:
-
--analyze
,-a
命令行格式 --analyze
分析键值的分布情况。这能让连接优化器更好地选择连接表的顺序以及应使用的索引,从而提高连接性能。要获取有关键分布的信息,请使用 myisamchk --description--verbose *
tbl_name
* 命令或SHOW INDEX FROM<br /> tbl_name
语句。 -
--block-search=offset
,-b offset
命令行格式 --block-search=offset
类型 数值的 找到给定偏移量处的块所属的记录。
-
命令行格式 --description
打印一些关于表的描述性信息。指定一次或两次
--verbose
选项可生成更多信息。请参阅 6.6.4.5 节,“使用 myisamchk 获取表信息”。 -
--set-auto-increment[=value\]
,-A[value]
强制新记录的
AUTO_INCREMENT
编号从给定值开始(如果已有AUTO_INCREMENT
值这么大的现有记录,则从更高的值开始)。如果未指定value
,则新记录的AUTO_INCREMENT
编号从表中当前的最大值加一开始。 -
--sort-index
,-S
命令行格式 --sort-index
按从高到低的顺序对索引树块进行排序。这将优化查找操作,并使使用索引的表扫描速度更快。
-
--sort-records=N
,-R N
根据特定索引对记录进行排序。这会使数据更加本地化,并且可能加快使用此索引的基于范围的SELECT和ORDER BY操作的速度。(首次使用此选项对表进行排序时,速度可能非常慢。)要确定表的索引编号,请使用SHOW INDEX,它会以myisamchk看到的相同顺序显示表的索引。索引从1开始编号。 如果键未压缩(PACK_KEYS=0),它们的长度相同,因此当myisamchk对记录进行排序和移动时,它只需覆盖索引中的记录偏移量。如果键已压缩(PACK_KEYS=1),myisamchk必须首先解压缩键块,然后重新创建索引并再次压缩键块。(在这种情况下,重新创建索引比为每个索引更新偏移量要快。)命令行格式 --sort-records=#
类型 数值的 根据特定索引对记录进行排序。这会使您的数据更具局部性,并且可能加快使用此索引的基于范围的
SELECT
和ORDER<br /> BY
操作。(首次使用此选项对表进行排序时,速度可能非常慢。)要确定表的索引编号,请使用SHOW INDEX
,它会按照 myisamchk 查看表索引的相同顺序显示这些索引。索引从 1 开始编号。如果键未压缩(
PACK_KEYS=0
),它们具有相同的长度,因此当myisamchk对记录进行排序和移动时,它只需覆盖索引中的记录偏移量。如果键已压缩(PACK_KEYS=1
),myisamchk必须首先解压缩键块,然后重新创建索引并再次压缩键块。(在这种情况下,重新创建索引比更新每个索引的偏移量要快。)
6.6.4.5 使用myisamchk获取表信息
要获取 MyISAM
表的描述或相关统计信息,请使用此处所示的命令。这些命令的输出将在本节后面进行解释。
-
以“描述模式”运行myisamchk ,生成表的描述信息。如果在禁用外部锁定的情况下启动MySQL服务器,myisamchk 可能会在运行时对正在更新的表报告错误。不过,由于myisamchk 在描述模式下不会更改表,因此不存在破坏数据的风险。
-
添加
-v
会以详细模式运行 myisamchk,这样它会生成更多关于表的信息。再次添加-v
会生成更多信息。 -
仅显示表中最重要的信息。此操作速度较慢,因为它必须读取整个表。
-
这类似于
-eis
,但会告诉你正在执行的操作。
*
tbl_name*
参数可以是 MyISAM
表的名称,也可以是其索引文件的名称,如 6.6.4节,“myisamchk - MyISAM表维护实用程序” 中所述。可以给出多个 *
tbl_name*
参数。
假设存在一个名为 person
的表,其结构如下。(这里包含了 MAX_ROWS
表选项,以便在后续展示的 myisamchk 示例输出中,某些值会更小,更易于适配输出格式。)
CREATE TABLE person
(
id INT NOT NULL AUTO_INCREMENT,
last_name VARCHAR(20) NOT NULL,
first_name VARCHAR(20) NOT NULL,
birth DATE,
death DATE,
PRIMARY KEY (id),
INDEX (last_name, first_name),
INDEX (birth)
) MAX_ROWS = 1000000 ENGINE=MYISAM;
假设该表还具有以下数据和索引文件大小:
-rw-rw---- 1 mysql mysql 9347072 Aug 19 11:47 person.MYD
-rw-rw---- 1 mysql mysql 6066176 Aug 19 11:47 person.MYI
myisamchk -dvv输出示例:
MyISAM file: person
Record format: Packed
Character set: utf8mb4_0900_ai_ci (255)
File-version: 1
Creation time: 2017-03-30 21:21:30
Status: checked,analyzed,optimized keys,sorted index pages
Auto increment key: 1 Last value: 306688
Data records: 306688 Deleted blocks: 0
Datafile parts: 306688 Deleted data: 0
Datafile pointer (bytes): 4 Keyfile pointer (bytes): 3
Datafile length: 9347072 Keyfile length: 6066176
Max datafile length: 4294967294 Max keyfile length: 17179868159
Recordlength: 54
table description:
Key Start Len Index Type Rec/key Root Blocksize
1 2 4 unique long 1 1024
2 6 80 multip. varchar prefix 0 1024
87 80 varchar 0
3 168 3 multip. uint24 NULL 0 1024
Field Start Length Nullpos Nullbit Type
1 1 1
2 2 4 no zeros
3 6 81 varchar
4 87 81 varchar
5 168 3 1 1 no zeros
6 171 3 1 2 no zeros
此处给出了myisamchk所生成的各类信息的说明。“键文件”指的是索引文件。“记录”和“行”是同义词,“字段”和“列”也是同义词。
表描述的初始部分包含以下值:
-
MyISAM file
MyISAM(索引)文件的名称。
-
Record format
用于存储表行的格式。前面的示例使用
Fixed length
。其他可能的值是Compressed
和Packed
。(Packed
对应于SHOW TABLE STATUS
报告的Dynamic
。) -
Chararacter set
表默认字符集。
-
File-version
MyISAM格式版本。始终为1。
-
Creation time
数据文件的创建时间。
-
Recover time
索引/数据文件上次重建的时间。
-
Status
表状态标志。可能的值有
crashed
、open
、changed
、analyzed
、optimized keys
和sorted index<br /> pages
。 -
Auto increment key
,Last<br /> value
与表的
AUTO_INCREMENT
列相关联的关键数字,以及该列最近生成的值。如果不存在此类列,则不会显示这些字段。 -
Data records
表中的行数。
-
Deleted blocks
有多少已删除的块仍保留着空间。您可以优化表以尽量减少这种空间。请参阅9.6.4节,“MyISAM表优化”。
-
Datafile parts
对于动态行格式,这表示存在多少个数据块。对于没有碎片化行的优化表,此值与
Data records
相同。 -
Deleted data
有多少字节已删除但未回收的数据。你可以优化表以尽量减少该空间占用。请参阅第9.6.4节 “MyISAM表优化”。
-
Datafile pointer
数据文件指针的大小,以字节为单位。通常为2、3、4或5字节。大多数表使用2字节来管理,但这在MySQL中尚无法控制。对于固定表,这是一个行地址。对于动态表,这是一个字节地址。
-
Keyfile pointer
索引文件指针的大小,以字节为单位。通常为1、2或3字节。大多数表使用2字节进行管理,但这由MySQL自动计算。它始终是一个块地址。
-
Max datafile length
表数据文件最大能达到多少字节。
-
Max keyfile length
表索引文件最大能达到多少字节。
-
Recordlength
每行占用多少空间,以字节为单位。
输出的table description
部分包含表中所有键的列表。对于每个键,myisamchk会显示一些底层信息:
-
Key
此键的编号。此值仅针对键的第一列显示。如果缺少此值,则该行对应于多列键的第二列或后续列。对于示例中所示的表,第二个索引有两条
table description
行。这表明它是一个由两部分组成的多部分索引。 -
Start
索引的这一部分在该行中的起始位置。
-
Len
该索引部分的长度。对于紧凑格式存储的数字,这通常应为列的完整长度。对于字符串,它可能比索引列的完整长度短,因为你可以对字符串列的前缀进行索引。多部分键的总长度是所有键部分的
Len
值之和。 -
Index
键值是否可以在索引中多次存在。可能的值为
unique
或multip.
(多个)。 -
Type
该索引部分的数据类型。这是一种
MyISAM
数据类型,可能的值为packed
、stripped
或empty
。 -
Root
根索引块的地址。
-
Blocksize
每个索引块的大小。默认情况下为1024,但在从源代码构建MySQL时,该值可在编译时更改。
-
Rec/key
这是优化器使用的一个统计值。它表明该索引每个值有多少行。唯一索引的值始终为1。使用 myisamchk - a 加载(或大幅更改)表后,此值可能会更新。如果根本未更新此值,则会给出默认值30。
输出的最后一部分提供了关于每列的信息:
-
Field
列号。
-
Start
表行内列的字节位置。
-
Length
列的长度(以字节为单位)。
-
Nullpos
,Nullbit
对于可为
NULL
的列,MyISAM
会在一个字节中以标志位的形式存储NULL
值。根据可空列的数量,可能会使用一个或多个字节来实现此目的。Nullpos
和Nullbit
值(如果非空)指示哪个字节和位包含该标志,该标志用于表明列是否为NULL
。存储
NULL
标志所用字节的位置和数量显示在field1那一行。这就是为什么person
表虽然只有五列,但却有六行Field
。 -
Type
数据类型。该值可能包含以下任何描述符:
-
constant
所有行的值都相同。
-
no endspace
不要存储末尾空格。
-
no endspace, not_always
不要存储尾部空格,并且不要对所有值进行尾部空格压缩。
-
no endspace, no empty
不要存储尾部空格。不要存储空值。
-
table-lookup
该列已转换为
ENUM
。 -
zerofill(*
N*)
值中最重要的
N
字节始终为 0,且不存储。 -
no zeros
不要存储零值。
-
always zero
零值使用一位进行存储。
-
-
Huff tree
与该列关联的哈夫曼树的编号。
-
Bits
霍夫曼树中使用的位数。
如果表是用myisampack压缩的,则会显示Huff tree
和Bits
字段。有关此信息的示例,请参见6.6.6节,“myisampack — 生成压缩的只读MyISAM表”。
myisamchk -eiv 的输出示例:
Checking MyISAM file: person
Data records: 306688 Deleted blocks: 0
- check file-size
- check record delete-chain
No recordlinks
- check key delete-chain
block_size 1024:
- check index reference
- check data record references index: 1
Key: 1: Keyblocks used: 98% Packed: 0% Max levels: 3
- check data record references index: 2
Key: 2: Keyblocks used: 99% Packed: 97% Max levels: 3
- check data record references index: 3
Key: 3: Keyblocks used: 98% Packed: -14% Max levels: 3
Total: Keyblocks used: 98% Packed: 89%
- check records and index references
*** LOTS OF ROW NUMBERS DELETED ***
Records: 306688 M.recordlength: 25 Packed: 83%
Recordspace used: 97% Empty space: 2% Blocks/Record: 1.00
Record blocks: 306688 Delete blocks: 0
Record data: 7934464 Deleted data: 0
Lost space: 256512 Linkdata: 1156096
User time 43.08, System time 1.68
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 0, Physical pagefaults 0, Swaps 0
Blocks in 0 out 7, Messages in 0 out 0, Signals 0
Voluntary context switches 0, Involuntary context switches 0
Maximum memory usage: 1046926 bytes (1023k)
myisamchk -eiv 的输出包含以下信息:
-
Data records
表中的行数。
-
Deleted blocks
有多少已删除的块仍保留着空间。你可以优化表以尽量减少此空间。请参阅9.6.4节,“MyISAM表优化”。
-
Key
关键数字。
-
Keyblocks used
已使用的关键块占比是多少。当使用 myisamchk 刚重组完一个表时,该值会非常高(非常接近理论最大值)。
-
Packed
MySQL 尝试压缩具有公共后缀的键值。这仅适用于
CHAR
和VARCHAR
列上的索引。对于最左边部分相似的长索引字符串,这可以显著减少所使用的空间。在前面的示例中,第二个键的长度为40字节,实现了97%的空间缩减。 -
Max levels
此键的B树深度。具有长键值的大表会得到较高的值。
-
Records
该表中有多少行。
-
M.recordlength
平均行长度。对于具有固定行长的表,这就是确切的行长,因为所有行的长度都相同。
-
Packed
MySQL 会去除字符串末尾的空格。
Packed
值表示这样做所实现的节省百分比。 -
Recordspace used
数据文件的使用比例是多少。
-
Empty space
数据文件有百分之多少未被使用。
-
Blocks/Record
每行平均块数(即,一个碎片化的行由多少个链接组成)。对于固定格式的表,该值始终为1.0。此值应尽可能接近1.0。如果该值变得太大,可以重新组织表。请参阅 9.6.4节,“MyISAM表优化”。
-
Recordblocks
使用了多少个数据块(链接)。对于固定格式的表,这个值与行数相同。
-
Deleteblocks
有多少个块(链接)被删除。
-
Recorddata
数据文件中使用了多少字节。
-
Deleted data
数据文件中有多少字节被删除(未使用)。
-
Lost space
如果一行更新为较短的长度,会丢失一些空间。这是以字节为单位的所有此类损失的总和。
-
Linkdata
当使用动态表格格式时,行片段通过指针(每个指针4到7字节)链接。
Linkdata
是所有此类指针所使用的存储总量。
6.6.4.6 myisamchk内存使用情况
运行myisamchk时,内存分配很重要。myisamchk使用的内存不会超过为其内存相关变量设置的值。如果要在非常大的表上使用 myisamchk,首先应该确定希望它使用多少内存。默认情况下,仅使用约3MB的内存来执行修复操作。通过使用更大的值,可以使 myisamchk 运行得更快。例如,如果有超过512MB的可用内存,可以使用如下选项(除了可能指定的任何其他选项):
myisamchk --myisam_sort_buffer_size=256M \
--key_buffer_size=512M \
--read_buffer_size=64M \
--write_buffer_size=64M ...
在大多数情况下,使用--myisam_sort_buffer_size=16M
可能就足够了。
请注意,myisamchk 使用 TMPDIR
中的临时文件。如果 TMPDIR
指向内存文件系统,则很容易出现内存不足错误。如果发生这种情况,请使用 --tmpdir=dir_name
选项运行 myisamchk,以指定位于具有更多空间的文件系统上的目录。
执行修复操作时,myisamchk还需要大量磁盘空间:
-
数据文件大小的两倍(原始文件和一个副本)。如果使用
--quick
进行修复,则不需要这么大空间;在这种情况下,仅重新创建索引文件。 此空间必须与原始数据文件位于同一文件系统上,因为副本与原始文件在同一目录中创建。 -
用于替换旧索引文件的新索引文件的空间。旧索引文件在修复操作开始时被截断,因此您通常可以忽略此空间。此空间必须与原始数据文件位于同一文件系统上。
-
使用
--recover
或--sort-recover
时(但使用--safe-recover
时除外),您需要磁盘空间进行排序。此空间在临时目录中分配(由TMPDIR
或--tmpdir=dir_name
指定)。所需空间量由以下公式得出:(largest_key + row_pointer_length) * number_of_rows * 2
你可以使用myisamchk -dv*
tbl_name
* 检查键的长度和row_pointer_length
(请参见6.6.4.5节,“使用myisamchk获取表信息”)。row_pointer_length
和number_of_rows
值是表描述中的Datafile pointer
和Data<br /> records
值。要确定largest_key
值,请检查表描述中的Key
行。Len
列指示每个键部分的字节数。对于多列索引,键大小是所有键部分的Len
值的总和。
如果在修复过程中遇到磁盘空间问题,你可以尝试使用--safe-recover
,而不是--recover
。
6.6.5 myisamlog — 显示MyISAM日志文件内容
myisamlog 处理 MyISAM
日志文件的内容。要创建此类文件,请使用 --log-isam=log_file
选项启动服务器。
像这样调用 myisamlog:
myisamlog [options] [file_name [tbl_name] ...]
默认操作是更新(-u
)。如果执行恢复操作(-r
),则会完成所有写入操作以及可能的更新和删除操作,并且仅统计错误。如果未给出log_file
参数,默认日志文件名是myisam.log
。如果在命令行中指定了表名,则仅更新这些表。
myisamlog 支持以下选项:
-
显示帮助信息并退出。
显示帮助信息并退出。
-
-c *
N*
仅执行
N
条命令。 -
-f *
N*
指定打开文件的最大数量。
-
-F *
filepath/*
指定文件路径时,路径末尾需加上斜杠。
-
-i
退出前显示额外信息。
-
-o *
offset*
指定起始偏移量。
-
-p *
N*
从路径中移除
N
组件。 -
-r
执行恢复操作。
-
-R *
record_pos_file record_pos*
指定记录位置文件和记录位置。
-
-u
执行更新操作。
-
-v
详细模式。打印更多关于程序操作的输出信息。此选项可多次使用,以生成越来越多的输出。
-
-w *
write_file*
指定写入文件。
-
-V
显示版本信息。
6.6.6 myisampack — 生成压缩的只读MyISAM表
myisampack
实用程序用于压缩MyISAM
表。myisampack
的工作原理是分别压缩表中的每一列。通常,myisampack
可将数据文件压缩40%到70%。
当稍后使用该表时,服务器会将解压缩列所需的信息读入内存。这样在访问单个行时,性能会有显著提升,因为此时只需精确解压缩一行数据。
MySQL 尽可能使用 mmap()
对压缩表执行内存映射。如果 mmap() 不起作用,MySQL 将回退到常规的文件读写操作。
请注意以下几点:
- 如果mysqld服务器在禁用外部锁定的情况下被调用,那么在打包过程中,如果表可能被服务器更新,调用myisampack不是一个好主意。最安全的做法是在服务器停止时压缩表。
- 打包表格后,该表格将变为只读。这通常是有意为之(例如在光盘上访问打包表格时)。
- myisampack不支持分区表。
像这样调用 myisampack:
myisampack [options] file_name ...
每个文件名参数都应该是一个索引(.MYI
)文件的名称。如果您不在数据库目录中,则应该指定文件的路径名。省略 .MYI
扩展名是允许的。
使用 myisampack 压缩表后,使用 myisamchk -rq 重建其索引。6.6.4节,“myisamchk - MyISAM表维护实用程序”。
myisampack 支持以下选项。它还会读取选项文件,并支持在 6.2.2.3 节“影响选项文件处理的命令行选项” 中所述的处理这些文件的选项。
-
--help
,-?
命令行格式 --help
显示帮助信息并退出。
-
--backup
,-b
(命令行格式) 使用名称tbl_name.OLD对每个表的数据文件进行备份。命令行格式 --backup
使用名称
tbl_name.OLD
为每个表的数据文件创建备份。 -
--character-sets-dir=*
dir_name*
命令行格式 --character-sets-dir=dir_name
类型 目录名称 安装字符集的目录。请参阅12.15节“字符集配置”。
-
--debug[=debug_options\]
,-#<br /> [debug_options]
命令行格式 --debug[=debug_options]
类型 字符串 默认值 d:t:o
编写一条调试日志。典型的
debug_options
字符串为d:t:o,file_name
。默认值为d:t:o
。只有在使用
WITH_DEBUG
构建MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件并非使用此选项构建。 -
--force
,-f
(选项)“--force”,“-f”命令行格式 --force
即使生成的压缩表比原始表大,或者之前调用 myisampack 生成的临时文件已存在,也要对表进行压缩。(myisampack 在压缩表时会在数据库目录中创建一个名为
tbl_name.TMD
的临时文件。如果终止 myisampack,.TMD
文件可能不会被删除。)通常情况下,如果 myisampack 发现tbl_name.TMD
已存在,就会报错退出。使用--force
选项,无论如何 myisampack 都会对表进行压缩。 -
--join=big_tbl_name
,-j big_tbl_name
命令行格式 --join=big_tbl_name
类型 字符串 将命令行中指定名称的所有表合并为一个打包表
big_tbl_name
。所有要合并的表 必须 具有相同的结构(相同的列名和类型、相同的索引等)。在连接操作之前,
big_tbl_name
不得存在。命令行中指定要合并到big_tbl_name
的所有源表必须存在。源表仅用于连接操作读取,不会被修改。 -
--silent
,-s
""" (该部分内容为命令行参数相关表述,结合语境可译为) """ --silent,-s:安静模式。仅在发生错误时输出内容。命令行格式 --silent
静默模式。仅在发生错误时输出内容。
-
--test
,-t
不实际打包表,仅测试打包操作。命令行格式 --test
不要实际打包表,只测试打包操作。
-
--tmpdir=dir_name
,-T dir_name
命令行格式 --tmpdir=dir_name
类型 目录名 将指定目录用作myisampack创建临时文件的位置。
-
--verbose
,-v
命令行格式 --verbose
详细模式。记录有关打包操作进度及其结果的信息。
-
--version
,-V
显示版本信息并退出。命令行格式 --version
显示版本信息并退出。
-
--wait
,-w
如果表正在使用,则等待并重试。如果mysqld服务器在禁用外部锁定的情况下被调用,那么在压缩过程中,如果表可能被服务器更新,调用myisampack并不是一个好主意。命令行格式 --wait
如果表正在使用中,请等待并重试。如果mysqld服务器在禁用外部锁定的情况下调用,那么如果在压缩过程中服务器可能会更新该表,则调用myisampack不是一个好主意。
以下命令序列展示了一个典型的表压缩过程:
$> ls -l station.*
-rw-rw-r-- 1 jones my 994128 Apr 17 19:00 station.MYD
-rw-rw-r-- 1 jones my 53248 Apr 17 19:00 station.MYI
$> myisamchk -dvv station
MyISAM file: station
Isam-version: 2
Creation time: 1996-03-13 10:08:58
Recover time: 1997-02-02 3:06:43
Data records: 1192 Deleted blocks: 0
Datafile parts: 1192 Deleted data: 0
Datafile pointer (bytes): 2 Keyfile pointer (bytes): 2
Max datafile length: 54657023 Max keyfile length: 33554431
Recordlength: 834
Record format: Fixed length
table description:
Key Start Len Index Type Root Blocksize Rec/key
1 2 4 unique unsigned long 1024 1024 1
2 32 30 multip. text 10240 1024 1
Field Start Length Type
1 1 1
2 2 4
3 6 4
4 10 1
5 11 20
6 31 1
7 32 30
8 62 35
9 97 35
10 132 35
11 167 4
12 171 16
13 187 35
14 222 4
15 226 16
16 242 20
17 262 20
18 282 20
19 302 30
20 332 4
21 336 4
22 340 1
23 341 8
24 349 8
25 357 8
26 365 2
27 367 2
28 369 4
29 373 4
30 377 1
31 378 2
32 380 8
33 388 4
34 392 4
35 396 4
36 400 4
37 404 1
38 405 4
39 409 4
40 413 4
41 417 4
42 421 4
43 425 4
44 429 20
45 449 30
46 479 1
47 480 1
48 481 79
49 560 79
50 639 79
51 718 79
52 797 8
53 805 1
54 806 1
55 807 20
56 827 4
57 831 4
$> myisampack station.MYI
Compressing station.MYI: (1192 records)
- Calculating statistics
normal: 20 empty-space: 16 empty-zero: 12 empty-fill: 11
pre-space: 0 end-space: 12 table-lookups: 5 zero: 7
Original trees: 57 After join: 17
- Compressing file
87.14%
Remember to run myisamchk -rq on compressed tables
$> myisamchk -rq station
- check record delete-chain
- recovering (with sort) MyISAM-table 'station'
Data records: 1192
- Fixing index 1
- Fixing index 2
$> mysqladmin -uroot flush-tables
$> ls -l station.*
-rw-rw-r-- 1 jones my 127874 Apr 17 19:00 station.MYD
-rw-rw-r-- 1 jones my 55296 Apr 17 19:04 station.MYI
$> myisamchk -dvv station
MyISAM file: station
Isam-version: 2
Creation time: 1996-03-13 10:08:58
Recover time: 1997-04-17 19:04:26
Data records: 1192 Deleted blocks: 0
Datafile parts: 1192 Deleted data: 0
Datafile pointer (bytes): 3 Keyfile pointer (bytes): 1
Max datafile length: 16777215 Max keyfile length: 131071
Recordlength: 834
Record format: Compressed
table description:
Key Start Len Index Type Root Blocksize Rec/key
1 2 4 unique unsigned long 10240 1024 1
2 32 30 multip. text 54272 1024 1
Field Start Length Type Huff tree Bits
1 1 1 constant 1 0
2 2 4 zerofill(1) 2 9
3 6 4 no zeros, zerofill(1) 2 9
4 10 1 3 9
5 11 20 table-lookup 4 0
6 31 1 3 9
7 32 30 no endspace, not_always 5 9
8 62 35 no endspace, not_always, no empty 6 9
9 97 35 no empty 7 9
10 132 35 no endspace, not_always, no empty 6 9
11 167 4 zerofill(1) 2 9
12 171 16 no endspace, not_always, no empty 5 9
13 187 35 no endspace, not_always, no empty 6 9
14 222 4 zerofill(1) 2 9
15 226 16 no endspace, not_always, no empty 5 9
16 242 20 no endspace, not_always 8 9
17 262 20 no endspace, no empty 8 9
18 282 20 no endspace, no empty 5 9
19 302 30 no endspace, no empty 6 9
20 332 4 always zero 2 9
21 336 4 always zero 2 9
22 340 1 3 9
23 341 8 table-lookup 9 0
24 349 8 table-lookup 10 0
25 357 8 always zero 2 9
26 365 2 2 9
27 367 2 no zeros, zerofill(1) 2 9
28 369 4 no zeros, zerofill(1) 2 9
29 373 4 table-lookup 11 0
30 377 1 3 9
31 378 2 no zeros, zerofill(1) 2 9
32 380 8 no zeros 2 9
33 388 4 always zero 2 9
34 392 4 table-lookup 12 0
35 396 4 no zeros, zerofill(1) 13 9
36 400 4 no zeros, zerofill(1) 2 9
37 404 1 2 9
38 405 4 no zeros 2 9
39 409 4 always zero 2 9
40 413 4 no zeros 2 9
41 417 4 always zero 2 9
42 421 4 no zeros 2 9
43 425 4 always zero 2 9
44 429 20 no empty 3 9
45 449 30 no empty 3 9
46 479 1 14 4
47 480 1 14 4
48 481 79 no endspace, no empty 15 9
49 560 79 no empty 2 9
50 639 79 no empty 2 9
51 718 79 no endspace 16 9
52 797 8 no empty 2 9
53 805 1 17 1
54 806 1 3 9
55 807 20 no empty 3 9
56 827 4 no zeros, zerofill(2) 2 9
57 831 4 no zeros, zerofill(1) 2 9
myisampack 显示以下几类信息:
-
normal
未使用额外存储格式的列数。
-
empty-space
仅包含空格值的列数。这些占用一位。
-
empty-zero
仅包含二进制零值的列数。这些占用一位。
-
empty-fill
未占用其类型全字节范围的整数列数量。这些列会被转换为较小的类型。例如,如果
BIGINT
列(八个字节)的所有值都在-128
到127
的范围内,则可以将其存储为TINYINT
列(一个字节)。 -
pre-space
存储时带有前导空格的小数列的数量。在这种情况下,每个值都包含前导空格的数量。
-
end-space
有大量尾部空格的列数。在这种情况下,每个值包含尾部空格数的计数。
-
table-lookup
该列只有少数几个不同的值,在进行哈夫曼压缩之前,这些值被转换为了
ENUM
。 -
zero
所有值都为零的列数。
-
Original trees
霍夫曼树的初始数量。
-
After join
为节省一些头部空间而合并树后剩余的不同哈夫曼树的数量。
表经过压缩后,由 myisamchk -dvv 显示的 Field
行将包含有关每列的更多信息:
-
Type
数据类型。该值可能包含以下任意描述符:
-
constant
所有行的值都相同。
-
no endspace
不要存储末尾空格。
-
no endspace, not_always
对于所有值,不要存储末尾空格,也不要进行末尾空格压缩。
-
no endspace, no empty
不要存储末尾空格。不要存储空值。
-
table-lookup
该列已转换为
ENUM
。 -
zerofill(*
N*)
值中最重要的
N
字节始终为 0,且不存储。 -
no zeros
不要存储零值。
-
always zero
零值使用一位进行存储。
-
-
Huff tree
与该列关联的哈夫曼树的数量。
-
Bits
霍夫曼树中使用的位数。
运行 myisampack 之后,使用 myisamchk 重新创建所有索引。此时,你还可以对索引块进行排序,并创建MySQL优化器更高效工作所需的统计信息:
myisamchk -rq --sort-index --analyze tbl_name.MYI
在将打包好的表安装到MySQL数据库目录后,您应该执行mysqladmin flush - tables,以强制mysqld开始使用新表。
要解压一个压缩表,对 myisamchk 使用 --unpack 选项。
6.6.7 mysql_config_editor — MySQL配置实用程序
mysql_config_editor
实用程序使您能够将身份验证凭据存储在一个经过混淆处理的登录路径文件中,该文件名为.mylogin.cnf
。在Windows系统上,文件位置是%APPDATA%\MySQL
目录,在非Windows系统上则是当前用户的主目录。之后,MySQL客户端程序可以读取该文件,以获取连接到MySQL服务器所需的身份验证凭据。
.mylogin.cnf
登录路径文件的未混淆格式由选项组构成,与其他选项文件类似。.mylogin.cnf
中的每个选项组称为一个“登录路径”,这是一个仅允许特定选项的组:host
、user
、password
、port
和socket
。可以将登录路径选项组视为一组选项,用于指定要连接到哪个MySQL服务器以及使用哪个账户进行身份验证。以下是一个未混淆的示例:
[client]
user = mydefaultname
password = mydefaultpass
host = 127.0.0.1
[mypath]
user = myothername
password = myotherpass
host = localhost
当你调用客户端程序连接到服务器时,客户端会结合使用.mylogin.cnf
和其他选项文件。它的优先级高于其他选项文件,但低于在客户端命令行上显式指定的选项。有关选项文件的使用顺序的信息,请参阅6.2.2.2节,“使用选项文件”。
要指定备用登录路径文件名,请设置MYSQL_TEST_LOGIN_FILE
环境变量。此变量可被mysql_config_editor、标准MySQL客户端(mysql、mysqladmin等)以及mysql-test-run.pl测试实用程序识别。
程序对登录路径文件中的组使用方式如下:
-
如果未指定 --login-path=name 选项来明确指示要使用哪个登录路径,mysql_config_editor 默认对 client 登录路径进行操作。
-
如果没有
--login-path
选项,客户端程序会从登录路径文件中读取与从其他选项文件中读取的相同选项组。考虑以下命令:mysql
默认情况下,mysql 客户端会从其他选项文件中读取
[client]
和[mysql]
组,因此它也会从登录路径文件中读取这些组。 -
使用
[
--login-path](https://dev.mysql.com/doc/refman/8.0/en/option-file-options.html#option_general_login-path)
选项时,客户端程序还会从登录路径文件中读取指定的登录路径。从其他选项文件读取的选项组保持不变。考虑以下命令:mysql --login-path=mypath
mysql客户端会从其他选项文件中读取
[client]
和[mysql]
,并从登录路径文件中读取[client]
、[mysql]
和[mypath]
。 -
即使使用了
--no-defaults
选项,客户端程序也会读取登录路径文件,除非设置了--no-login-paths
。这使得即使存在--no-defaults
选项,也能以比在命令行上更安全的方式指定密码。
mysql_config_editor 对.mylogin.cnf
文件进行模糊处理,使其无法以明文形式读取,并且客户端程序对其进行解密后的内容仅在内存中使用。通过这种方式,密码可以以非明文格式存储在文件中,以后使用时无需在命令行或环境变量中暴露。 mysql_config_editor 提供了一个print
命令来显示登录路径文件的内容,但即使在这种情况下,密码值也会被屏蔽,以确保不会以其他用户可见的方式出现。
mysql_config_editor所使用的混淆处理可防止密码以明文形式出现在.mylogin.cnf
中,通过防止密码意外泄露来提供一定程度的安全性。例如,如果你在屏幕上显示一个常规的未混淆的my.cnf
选项文件,其中包含的任何密码都能被任何人看到。而对于.mylogin.cnf
,情况并非如此,但是所使用的混淆处理不太可能阻止一个有决心的攻击者,并且你不应认为它无法破解。一个能够在你的机器上获得系统管理权限以访问你文件的用户,经过一番努力可以对.mylogin.cnf
文件进行去混淆处理。
登录路径文件必须对当前用户可读可写,且其他用户无法访问。否则,mysql_config_editor 将忽略它,客户端程序也不会使用它。
像这样调用mysql_config_editor:
mysql_config_editor [program_options] command [command_options]
如果登录路径文件不存在,mysql_config_editor 会创建它。
命令参数如下:
program_options
由通用的 mysql_config_editor 选项组成。command
指明要对.mylogin.cnf
登录路径文件执行什么操作。例如,set
会将一个登录路径写入文件,remove
会删除一个登录路径,而print
会显示登录路径的内容。command_options
表示特定于该命令的任何其他选项,例如登录路径名以及要在登录路径中使用的值。
命令名称在程序参数集中的位置很重要。例如,以下这些命令行的参数相同,但产生的结果不同:
mysql_config_editor --help set
mysql_config_editor set --help
第一行命令显示mysql_config_editor的常规帮助消息,并忽略set
命令。第二行命令显示特定于set
命令的帮助消息。
假设你想建立一个client
登录路径,用于定义默认连接参数,并创建一个名为remote
的额外登录路径,用于连接到主机为remote.example.com
的MySQL服务器。你希望按以下方式登录:
- 默认情况下,连接到本地服务器,用户名和密码分别为
localuser
和localpass
- 使用用户名
remoteuser
和密码remotepass
连接到远程服务器
要在.mylogin.cnf
文件中设置登录路径,请使用以下set
命令。每行输入一条命令,并在提示时输入相应的密码:
$> mysql_config_editor set --login-path=client
--host=localhost --user=localuser --password
Enter password: enter password "localpass" here
$> mysql_config_editor set --login-path=remote
--host=remote.example.com --user=remoteuser --password
Enter password: enter password "remotepass" here
mysql_config_editor 默认使用client
登录路径,因此在第一个命令中可以省略--login-path=client
选项,而不改变其效果。
要查看 mysql_config_editor 写入 .mylogin.cnf
文件的内容,请使用 print
命令:
$> mysql_config_editor print --all
[client]
user = localuser
password = *****
host = localhost
[remote]
user = remoteuser
password = *****
host = remote.example.com
print
命令会将每个登录路径显示为一组行,每行以一个组标题开头,该组标题用方括号表示登录路径名称,后面跟着登录路径的选项值。密码值会被屏蔽,不会以明文形式显示。
如果未指定 --all
以显示所有登录路径,也未指定 --login-path=name
以显示命名的登录路径,则 print
命令默认显示 client
登录路径(如果有)。
如前面的示例所示,登录路径文件可以包含多个登录路径。通过这种方式,mysql_config_editor 便于为连接不同的 MySQL 服务器,或使用不同账户连接给定服务器设置多种 “身份”。之后在调用客户端程序时,可以使用 --login-path
选项按名称选择其中任何一个。例如,要连接到远程服务器,使用以下命令:
mysql --login-path=remote
在这里,mysql 会从其他选项文件中读取[client]
和 [mysql]
选项组,并从登录路径文件中读取[client]
、[mysql]
和[remote]
组。
要连接到本地服务器,请使用以下命令:
mysql --login-path=client
由于 mysql 默认会读取 client
和 mysql
登录路径,因此在这种情况下,--login-path
选项不会添加任何内容。该命令与以下命令等效:
mysql
从登录路径文件读取的选项优先于从其他选项文件读取的选项。从登录路径文件中靠后出现的登录路径组读取的选项优先于从文件中靠前出现的组读取的选项。
mysql_config_editor 会按照创建顺序将登录路径添加到登录路径文件中,因此应先创建较为通用的登录路径,后创建较为具体的路径。如果需要在文件中移动某个登录路径,可以先删除它,然后重新创建,将其添加到文件末尾。例如,client
登录路径更为通用,因为所有客户端程序都会读取它,而 mysqldump
登录路径仅由 mysqldump 读取。后指定的选项会覆盖先指定的选项,因此按 client
、mysqldump
的顺序排列登录路径,可使 mysqldump 特定的选项覆盖 client
选项。
当你使用带有mysql_config_editor的set
命令创建登录路径时,无需指定所有可能的选项值(主机名、用户名、密码、端口、套接字)。只有指定的值才会写入路径。后续所需的任何缺失值可在调用客户端路径连接到MySQL服务器时,在其他选项文件或命令行中指定。命令行中指定的任何选项将覆盖登录路径文件或其他选项文件中指定的选项。例如,如果remote
登录路径中的凭证也适用于主机remote2.example.com
,可按如下方式连接到该主机上的服务器:
mysql --login-path=remote --host=remote2.example.com
mysql_config_editor常规选项
mysql_config_editor 支持以下常规选项,这些选项可在命令行中指定的任何命令之前使用。有关特定命令选项的说明,请参阅 mysql_config_editor 命令和特定命令选项。
表6.21 mysql_config_editor通用选项
选项名称 | 描述 |
---|---|
--调试 | 写入调试日志 |
--帮助 | 显示帮助信息并退出 |
--罗嗦 | 详细模式 |
--版本 | 显示版本信息并退出 |
-
--help
,-?
命令行格式 --help
显示常规帮助消息并退出。
要查看特定命令的帮助消息,请按如下方式调用mysql_config_editor,其中
command
是除help
之外的命令:mysql_config_editor command --help
-
--debug[=debug_options\]
,-# debug_options
命令行格式 --debug[=debug_options]
类型 字符串 默认值 d:t:o
编写调试日志。典型的
debug_options
字符串为d:t:o,file_name
。默认值为d:t:o,/tmp/mysql_config_editor.trace
。只有在使用
WITH_DEBUG
构建MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件未使用此选项构建。 -
--verbose
,-v
命令行格式 --verbose
详细模式。打印有关程序操作的更多信息。如果某个操作未产生预期效果,此选项可能有助于诊断问题。
-
--version
,-V
显示版本信息并退出。命令行格式 --version
显示版本信息并退出。
mysql_config_editor命令及命令特定选项
本节介绍了允许使用的mysql_config_editor命令,以及对于每个命令,在命令行中命令名称之后允许使用的特定于该命令的选项。
此外,mysql_config_editor 支持可在任何命令之前使用的常规选项。有关这些选项的说明,请参阅mysql_config_editor 常规选项。
mysql_config_editor 支持以下命令:
-
help
显示通用帮助消息并退出。此命令不接受后续选项。
要查看特定命令的帮助消息,请按如下方式调用mysql_config_editor,其中
command
是除help
之外的命令:mysql_config_editor command --help
-
print [*
options*]
以未混淆的形式打印登录路径文件的内容,但密码显示为
*****
。如果未指定登录路径名称,默认登录路径名称为
client
。如果同时给出--all
和--login-path
,则--all
优先。“print”命令在命令名称之后允许使用以下选项:
-
--help
,-?
显示
print
命令的帮助信息并退出。要查看常规帮助信息,请使用mysql_config_editor --help。
-
--all
打印登录路径文件中所有登录路径的内容。
-
--login-path=name
,-G name
打印指定登录路径的内容。
-
-
remove [*
options*]
从登录路径文件中删除一个登录路径,或者通过删除登录路径中的选项来修改该登录路径。
此命令仅从登录路径中移除通过
--host
、--password
、--port
、--socket
和--user
选项指定的选项。如果未给出这些选项中的任何一个,remove
将移除整个登录路径。例如,此命令仅从mypath
登录路径中移除user
选项,而不是整个mypath
登录路径:mysql_config_editor remove --login-path=mypath --user
此命令将删除整个
mypath
登录路径:mysql_config_editor remove --login-path=mypath
“remove”命令在命令名后可使用以下选项:
-
--help
,-?
显示
remove
命令的帮助信息并退出。要查看常规帮助信息,请使用mysql_config_editor --help。
-
--host
,-h
从登录路径中删除主机名。 --host,-h:从登录路径中移除主机名。从登录路径中删除主机名。
-
--login-path=name
,-G name
要移除或修改的登录路径。如果未提供此选项,默认的登录路径名称为
client
。 -
--password
:--密码,-p
:-p从登录路径中删除密码。
-
--port
,-P
从登录路径中删除TCP/IP端口号。
-
--socket
,-S
:从登录路径中删除Unix套接字文件名。从登录路径中移除Unix套接字文件名。
-
--user
,-u
从登录路径中移除用户名。 --warn,-w 如果命令尝试移除默认登录路径(client)且未指定--login-path=client,则发出警告并提示用户进行确认。此选项默认启用;使用--skip-warn将其禁用。 清空登录路径文件的内容。 reset 命令在命令名称后允许使用以下选项: --help,-? 显示 reset 命令的帮助信息并退出。 要查看常规帮助信息,请使用mysql_config_editor --help。 将登录路径写入登录路径文件。从登录路径中移除用户名。
-
--warn
,-w
如果命令尝试删除默认登录路径(client)且未指定--login-path=client,则发出警告并提示用户进行确认。此选项默认启用;使用--skip-warn将其禁用。如果命令尝试删除默认登录路径(
client
)且未指定--login-path=client
,则警告并提示用户进行确认。此选项默认启用;使用--skip-warn
将其禁用。
-
-
reset [*
options*]
清空登录路径文件的内容。
“reset”命令在命令名后允许使用以下选项:
-
--help
,-?
显示reset命令的帮助信息并退出。显示
reset
命令的帮助信息并退出。要查看常规帮助信息,请使用mysql_config_editor --help。
-
-
set [*
options*]
将登录路径写入登录路径文件。
此命令仅将使用
--host
、--password
、--port
、--socket
和--user
选项指定的选项写入登录路径。如果未给出这些选项中的任何一个,mysql_config_editor 会将登录路径写为一个空组。“set”命令在命令名之后允许使用以下选项:
-
--help
,-?
显示set命令的帮助信息并退出。显示
set
命令的帮助信息并退出。要查看常规帮助信息,请使用mysql_config_editor --help。
-
--host=host_name
,-h host_name
要写入登录路径的主机名。
-
--login-path=name
,-G name
要创建的登录路径。如果未给出此选项,默认的登录路径名称为
client
。 -
--password
,-p
:提示输入要写入登录路径的密码。在mysql_config_editor显示提示后,输入密码并按回车键。为防止其他用户看到密码,mysql_config_editor不会回显密码。提示输入要写入登录路径的密码。在mysql_config_editor显示提示后,输入密码并按回车键。为防止其他用户看到密码,mysql_config_editor不会回显密码。
要指定空密码,请在密码提示处按回车键。写入登录路径文件的最终登录路径包含如下一行内容:
password =
-
--port=port_num
,-P port_num
要写入登录路径的TCP/IP端口号。
-
--socket=file_name
,-S file_name
要写入登录路径的Unix套接字文件名。
-
--user=user_name
,-u user_name
写入登录路径的用户名。
-
--warn
,-w
如果命令尝试覆盖现有登录路径,则发出警告并提示用户进行确认。此选项默认启用;使用--skip-warn将其禁用。如果该命令尝试覆盖现有登录路径,则向用户发出警告并提示其进行确认。此选项默认启用;使用
--skip-warn
将其禁用。
-
6.6.8 mysql_migrate_keyring — 密钥环密钥迁移实用程序
mysql_migrate_keyring实用程序用于在一个密钥环组件与另一个密钥环组件之间迁移密钥。它支持离线和在线迁移。
像这样调用 mysql_migrate_keyring(在一行中输入命令):
mysql_migrate_keyring
--component-dir=dir_name
--source-keyring=name
--destination-keyring=name
[other options]
有关关键迁移的信息以及描述如何使用 mysql_migrate_keyring 和其他方法执行这些迁移的说明,请参阅 8.4.4.14节,“在密钥环密钥库之间迁移密钥”。
mysql_migrate_keyring 支持以下选项,这些选项可以在命令行中指定,也可以在选项文件的[mysql_migrate_keyring]
组中指定。有关 MySQL 程序使用的选项文件的信息,请参阅 6.2.2.2 节,“使用选项文件”。
表6.22 mysql_migrate_keyring选项
-
--help
,-h
(此处文本保留原样,因为未明确“--help”和“-h”在该语境下的特定中文含义,所以保留英文原文,一般在命令行相关语境中,“--help”常译为“显示帮助信息”,“-h”为其缩写,同理)命令行格式 --help
显示帮助信息并退出。
-
命令行格式 --component-dir=dir_name
类型 目录名称 存放密钥环组件的目录。这通常是本地MySQL服务器的
plugin_dir
系统变量的值。注意
对于由mysql_migrate_keyring执行的所有密钥环迁移操作,
--component-dir
、--source-keyring
和--destination-keyring
是必需的。此外,源组件和目标组件必须不同,并且两个组件都必须正确配置,以便mysql_migrate_keyring可以加载并使用它们。 -
--defaults-extra-file=*
file_name*
命令行格式 --defaults-extra-file=file_name
类型 文件名 在全局选项文件之后,但(在Unix系统上)在用户选项文件之前读取此选项文件。如果该文件不存在或以其他方式无法访问,则会出现错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录的路径。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-file=file_name
类型 文件名 仅使用给定的选项文件。如果该文件不存在或以其他方式无法访问,则会出现错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录的路径。异常:即使使用
--defaults-file
,客户端程序仍会读取.mylogin.cnf
。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-group-suffix=str
类型 字符串 不仅读取常规的选项组,还读取名称为常规名称且后缀为
str
的组。例如,mysql_migrate_keyring通常读取[mysql_migrate_keyring]
组。如果此选项设置为--defaults-group-suffix=_other
,mysql_migrate_keyring还会读取[mysql_migrate_keyring_other]
组。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --destination-keyring=name
类型 字符串 用于密钥迁移的目标密钥环组件。该选项值的格式和解释与
--source-keyring
选项的描述相同。注意
对于由mysql_migrate_keyring执行的所有密钥环迁移操作,
--component-dir
、--source-keyring
和--destination-keyring
是必需的。此外,源组件和目标组件必须不同,并且两个组件都必须正确配置,以便mysql_migrate_keyring可以加载并使用它们。 -
命令行格式 --destination-keyring-configuration-dir=dir_name
类型 目录名称 此选项仅在目标密钥环组件全局配置文件包含
"read_local_config": true
(表明组件配置包含在本地配置文件中)时适用。该选项值指定包含该本地文件的目录。 -
命令行格式 --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可插拔身份验证”。 -
--host=host_name
,-h host_name
命令行格式 --host=host_name
类型 字符串 默认值 localhost
当前正在使用某个密钥迁移密钥库的运行服务器的主机位置。迁移始终在本地主机上进行,因此该选项始终指定用于连接到本地服务器的值,如
localhost
、127.0.0.1
、::1
,或者本地主机IP地址或主机名。 -
命令行格式 --login-path=name
类型 字符串 从
.mylogin.cnf
登录路径文件中指定的登录路径读取选项。“登录路径”是一个选项组,其中包含指定要连接到哪个MySQL服务器以及以哪个账户进行身份验证的选项。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参阅6.6.7节,“mysql_config_editor — MySQL配置实用程序”。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --no-defaults
不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,可以使用
--no-defaults
来阻止读取这些文件。例外情况是,无论如何都会读取
.mylogin.cnf
文件(如果该文件存在)。这使得即使在使用--no-defaults
时,也能以比在命令行上更安全的方式指定密码。要创建.mylogin.cnf
,请使用 mysql_config_editor 实用程序。请参阅 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --online-migration
类型 布尔值 默认值 FALSE
当运行的服务器正在使用密钥环时,此选项是必需的。它指示 mysql_migrate_keyring 执行在线密钥迁移。此选项具有以下效果:
- mysql_migrate_keyring 使用指定的任何连接选项连接到服务器;否则将忽略这些选项。
- 在mysql_migrate_keyring连接到服务器后,它会通知服务器暂停密钥环操作。当密钥复制完成后,mysql_migrate_keyring会在断开连接前通知服务器可以恢复密钥环操作。
-
--password[=password\]
,-p[password]
--密码[=密码],-p[密码]命令行格式 --password[=password]
类型 字符串 用于连接正在运行的服务器的MySQL账户密码,该服务器当前正在使用某个密钥迁移密钥库。密码值是可选的。如果未提供,mysql_migrate_keyring 会提示输入。如果提供了密码,在
--password=
或-p
与后面的密码之间不得有空格。如果未指定密码选项,默认不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中输入密码,请使用选项文件。请参阅 8.1.2.1节,“密码安全的最终用户指南”。
要明确指定无密码且mysql_migrate_keyring不应提示输入密码,请使用
--skip-password
选项。 -
--port=port_num
,-P port_num
命令行格式 --port=port_num
类型 数字的 默认值 0
对于TCP/IP连接,连接到当前正在使用某个密钥迁移密钥库的运行服务器的端口号。
-
命令行格式 --print-defaults
打印程序名称以及它从选项文件中获取的所有选项。
有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
--server-public-key-path=*
file_name*
命令行格式 --server-public-key-path=file_name
类型 文件名 包含服务器基于RSA密钥对的密码交换所需公钥的客户端副本的PEM格式文件的路径名。此选项适用于使用
sha256_password
或caching_sha2_password
身份验证插件进行身份验证的客户端。对于不使用这些插件之一进行身份验证的账户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。如果给出
--server-public-key-path=file_name
并指定了一个有效的公钥文件,则它优先于--get-server-public-key
。对于
sha256_password
,只有在使用OpenSSL构建MySQL时,此选项才适用。有关
sha256_password
和caching_sha2_password
插件的信息,请参阅8.4.1.3节,“SHA-256可插拔身份验证”和8.4.1.2节,“缓存SHA-2可插拔身份验证”。 -
--socket=path
,-S path
| 命令行格式 |
--socket={file_name|pipe_name}
|
| :--------- | -------------------------------- |
| 类型 | 字符串 |对于Unix套接字文件或Windows命名管道连接,用于连接到当前正在使用某个密钥迁移密钥库的运行服务器的套接字文件或命名管道。
在Windows系统上,只有在启用
named_pipe
系统变量以支持命名管道连接的情况下启动服务器,此选项才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的Windows组的成员。 -
命令行格式 --source-keyring=name
类型 字符串 用于密钥迁移的源密钥环组件。这是指定的组件库文件名,不带任何特定于平台的扩展名,如
.so
或.dll
。例如,要使用库文件为component_keyring_file.so
的组件,将选项指定为--source-keyring=component_keyring_file
。注意
对于由mysql_migrate_keyring执行的所有密钥环迁移操作,
--component-dir
、--source-keyring
和--destination-keyring
是必需的。此外,源组件和目标组件必须不同,并且两个组件都必须正确配置,以便mysql_migrate_keyring可以加载并使用它们。 -
--source-keyring-configuration-dir=*
dir_name*
命令行格式 --source-keyring-configuration-dir=dir_name
类型 目录名称 此选项仅在源密钥环组件全局配置文件包含
"read_local_config": true
(表明组件配置包含在本地配置文件中)时适用。该选项值指定包含该本地文件的目录。 -
--ssl*
以
--ssl
开头的选项用于指定是否使用加密连接到服务器,并指明在何处查找 SSL 密钥和证书。请参阅 加密连接的命令选项。 -
| 命令行格式 |
--ssl-fips-mode={OFF|ON|STRICT}
|
| :--------- | --------------------------------- |
| 已弃用 | |
| 类型 | 枚举 |
| 默认值 |OFF
|
| 有效值 |OFF``ON``STRICT
|控制是否在客户端启用FIPS模式。
--ssl-fips-mode
选项与其他--ssl-xxx
选项的不同之处在于,它不是用于建立加密连接,而是用于影响允许哪些加密操作。请参阅 8.8节“FIPS支持”。这些“--ssl-fips-mode”值是允许的:
- OFF:禁用FIPS模式。
- 开启:启用FIPS模式。
STRICT
:启用“严格”FIPS模式。
注意
如果OpenSSL FIPS对象模块不可用,则
--ssl-fips-mode
唯一允许的值为OFF
。在这种情况下,将--ssl-fips-mode
设置为ON
或STRICT
会导致客户端在启动时发出警告并以非FIPS模式运行。从 MySQL 8.0.34 开始,此选项已被弃用。预计它将在未来版本的 MySQL 中移除。
-
--tls-ciphersuites=*
ciphersuite_list*
命令行格式 --tls-ciphersuites=ciphersuite_list
类型 字符串 用于使用TLSv1.3的加密连接的可允许密码套件。该值是一个或多个以冒号分隔的密码套件名称的列表。此选项可指定的密码套件取决于用于编译MySQL的SSL库。有关详细信息,请参阅第8.3.2节“加密连接TLS协议和密码”。
-
命令行格式 --tls-version=protocol_list
类型 字符串 默认值 TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
(OpenSSL 1.1.1 或更高版本)TLSv1,TLSv1.1,TLSv1.2
(其他情况)用于加密连接的允许的TLS协议。该值是一个由一个或多个以逗号分隔的协议名称组成的列表。此选项可指定的协议取决于编译MySQL时使用的SSL库。详情请参阅 8.3.2节,“加密连接TLS协议和密码”。
-
--user=user_name
,-u user_name
命令行格式 --user=user_name
类型 字符串 用于连接当前正在使用某个密钥迁移密钥库的运行服务器的MySQL账户的用户名。
-
--verbose
,-v
命令行格式 --verbose
详细模式。生成更多关于程序执行情况的输出。
-
--version
,-V
命令行格式 --version
显示版本信息并退出。
6.6.9 mysqlbinlog——处理二进制日志文件的实用程序
- 6.6.9.1 mysqlbinlog十六进制转储格式
- 6.6.9.2 mysqlbinlog行事件显示
- 6.6.9.3 使用mysqlbinlog备份二进制日志文件
- 6.6.9.4 指定mysqlbinlog服务器ID
服务器的二进制日志由包含 “事件” 的文件组成,这些 “事件” 描述了对数据库内容的修改。服务器以二进制格式写入这些文件。要以文本格式显示其内容,请使用 mysqlbinlog 实用程序。在复制设置中,你还可以使用 mysqlbinlog 来显示从库写入的中继日志文件的内容,因为中继日志与二进制日志的格式相同。二进制日志和中继日志将在 7.4.4 节 “二进制日志” 和 19.2.4 节 “中继日志和复制元数据存储库” 中进一步讨论。
像这样调用 mysqlbinlog:
mysqlbinlog [options] log_file ...
例如,要显示名为 binlog.000003
的二进制日志文件的内容,请使用以下命令:
mysqlbinlog binlog.000003
输出内容包括binlog.000003
中包含的事件。对于基于语句的日志记录,事件信息包括SQL语句、执行该语句的服务器ID、执行语句的时间戳、执行耗时等。对于基于行的日志记录,事件表示的是行更改而非SQL语句。有关日志记录模式的信息,请参见 第19.2.1节,“复制格式”。
事件之前会有头部注释,提供更多信息。例如:
# at 141
#100309 9:28:36 server id 123 end_log_pos 245
Query thread_id=3350 exec_time=11 error_code=0
在第一行中,at
后面的数字表示二进制日志文件中事件的文件偏移量或起始位置。
第二行以日期和时间开头,表示该语句在事件起源的服务器上何时开始。对于复制,此时间戳会传播到副本服务器。server id
是事件起源服务器的 server_id
值。end_log_pos
指示下一个事件从何处开始(即,它是当前事件的结束位置 + 1)。thread_id
指示哪个线程执行了该事件。exec_time
是在复制源服务器上执行事件所花费的时间。在副本上,它是副本上的结束执行时间减去源上的开始执行时间的差值。该差值可作为复制滞后于源的程度的指标。error_code
指示执行事件的结果。零表示未发生错误。
注意
使用事件组时,事件的文件偏移量可能会被分组在一起,事件的注释也可能会被分组在一起。不要将这些分组的事件误认为是空白文件偏移量。
mysqlbinlog
的输出可以重新执行(例如,将其作为 mysql
的输入),以重做日志中的语句。这在服务器意外退出后的恢复操作中很有用。有关其他使用示例,请参阅本节后面以及9.5节,“时间点(增量)恢复”中的讨论。要执行 mysqlbinlog
使用的内部 BINLOG
语句,用户需要 BINLOG_ADMIN
权限(或已弃用的 SUPER
权限),或者 REPLICATION_APPLIER
权限加上执行每个日志事件所需的相应权限。
你可以使用 mysqlbinlog 直接读取二进制日志文件,并将它们应用到本地 MySQL 服务器。你还可以使用--read-from-remote-server
选项从远程服务器读取二进制日志。要读取远程二进制日志,可以给出连接参数选项,以指明如何连接到服务器。这些选项包括 --host
、--password
、--port
、--protocol
、--socket
和 --user
。
从 MySQL 8.0.14 起,二进制日志文件可以加密,当二进制日志文件被加密后,mysqlbinlog 无法直接读取这些文件,但可以使用 --read-from-remote-server
选项从服务器读取。当服务器的 binlog_encryption
系统变量设置为 ON
时,二进制日志文件即被加密。SHOW BINARY LOGS
语句会显示特定二进制日志文件是否已加密。还可以通过加密日志文件文件头起始处的幻数(0xFD62696E
)来区分加密和未加密的二进制日志文件,该幻数与未加密日志文件使用的幻数(0xFE62696E
)不同。请注意,从 MySQL 8.0.14 起,如果尝试直接读取加密的二进制日志文件,mysqlbinlog 会返回适当的错误,但较旧版本的 mysqlbinlog 根本不会将该文件识别为二进制日志文件。有关二进制日志加密的详细信息,请参阅 第 19.3.2 节,“加密二进制日志文件和中继日志文件”。
从MySQL 8.0.20起,二进制日志事务负载可以被压缩,从该版本起的mysqlbinlog会自动解压缩并解码事务负载,并像处理未压缩的事件那样打印它们。较早版本的mysqlbinlog无法读取压缩的事务负载。当服务器的binlog_transaction_compression
系统变量设置为ON
时,事务负载会被压缩,然后作为单个事件(Transaction_payload_event
)写入服务器的二进制日志文件。使用--verbose
选项时,mysqlbinlog会添加注释,说明所使用的压缩算法、最初接收的压缩负载大小以及解压缩后的负载大小。
注意
对于作为压缩事务有效载荷一部分的单个事件,mysqlbinlog 所声明的结束位置(end_log_pos
)与原始压缩有效载荷的结束位置相同。因此,多个解压缩后的事件可以具有相同的结束位置。
如果事务负载已经被压缩,那么mysqlbinlog自身的连接压缩效果会变差,但它仍会对未压缩的事务和头部进行操作。
有关二进制日志事务压缩的更多信息,请参见7.4.4.5节“二进制日志事务压缩”。
当针对大型二进制日志运行 mysqlbinlog 时,要注意文件系统有足够的空间来存放生成的文件。要配置 mysqlbinlog 用于临时文件的目录,请使用 TMPDIR
环境变量。
在执行任何SQL语句之前,[**mysqlbinlog**](https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog.html)
会将 [
pseudo_replica_mode](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_pseudo_replica_mode)
或 [
pseudo_slave_mode](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_pseudo_slave_mode)
的值设置为 true
。此系统变量会影响XA事务的处理、original_commit_timestamp
复制延迟时间戳、[
original_server_version](https://dev.mysql.com/doc/refman/8.0/en/replication-options-source.html#sysvar_original_server_version)
系统变量以及不支持的SQL模式。
mysqlbinlog 支持以下选项,这些选项可以在命令行中指定,也可以在选项文件的[mysqlbinlog]
和 [client]
组中指定。有关 MySQL 程序使用的选项文件的信息,请参见 6.2.2.2 节,“使用选项文件”。
表6.23 mysqlbinlog选项
-
--help
,-?
命令行格式 --help
显示一条帮助信息并退出。
-
命令行格式 --base64-output=value
类型 字符串 默认值 AUTO
有效值 AUTO``NEVER``DECODE-ROWS
此选项决定应在何时显示使用
BINLOG
语句编码为base-64字符串的事件。该选项具有以下允许值(不区分大小写):-
AUTO
(“自动”)或UNSPEC
(“未指定”)会在必要时(即对于格式描述事件和行事件)自动显示BINLOG
语句。如果未给出--base64-output
选项,则效果与--base64-output=AUTO
相同。注意
如果您打算使用mysqlbinlog的输出重新执行二进制日志文件内容,自动
BINLOG
是唯一安全的做法。其他选项值仅用于调试或测试目的,因为它们生成的输出可能不会以可执行形式包含所有事件。 -
NEVER
会导致BINLOG
语句不显示。如果发现必须使用BINLOG
显示的行事件,mysqlbinlog 将以错误状态退出。 -
DECODE-ROWS
向mysqlbinlog 指定,你希望通过同时指定--verbose
选项,将行事件解码并显示为带注释的 SQL 语句。与NEVER
一样,DECODE-ROWS
会抑制BINLOG
语句的显示,但与NEVER
不同的是,如果找到行事件,它不会以错误退出。
有关展示
--base64-output
和--verbose
对行事件输出影响的示例,请参阅 6.6.9.2节,“mysqlbinlog行事件显示”。 -
-
命令行格式 --bind-address=ip_address
在具有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口。
-
--binlog-row-event-max-size=*
N*
命令行格式 --binlog-row-event-max-size=#
类型 数值型 默认值 4294967040
最小值 256
最大值 18446744073709547520
指定基于行的二进制日志事件的最大大小,单位为字节。如果可能,行将被分组为小于此大小的事件。该值应为256的倍数。默认值为4GB。
-
--character-sets-dir=*
dir_name*
命令行格式 --character-sets-dir=dir_name
类型 目录名称 安装字符集的目录。请参阅第12.15节“字符集配置”。
-
| 命令行格式 |
--compress[={OFF|ON}]
|
| :--------- | ----------------------- |
| 引入版本 | |
| 已弃用 | |
| 类型 | 布尔值 |
| 默认值 |OFF
|如果可能,压缩客户端与服务器之间发送的所有信息。请参阅6.2.8节“连接压缩控制”。
此选项是在MySQL 8.0.17中添加的。从MySQL 8.0.18开始已弃用。预计它将在未来版本的MySQL中移除。请参阅配置旧版连接压缩。
-
--compression-algorithms=*
value*
命令行格式 --compression-algorithms=value
引入版本 类型 设置 默认值 uncompressed
有效取值 zlib``zstd``uncompressed
连接到服务器时允许使用的压缩算法。可用算法与
protocol_compression_algorithms
系统变量的算法相同。默认值为uncompressed
。有关更多信息,请参阅6.2.8节,“连接压缩控制”。
此选项是在MySQL 8.0.18中添加的。
-
--connection-server-id=*
server_id*
命令行格式 --connection-server-id=#]
类型 整数 默认值 0 (1)
最小值 0 (1)
最大值 4294967295
--connection-server-id
指定了mysqlbinlog连接到服务器时报告的服务器ID。它可用于避免与副本服务器的ID或另一个mysqlbinlog进程的ID冲突。如果指定了
--read-from-remote-server
选项,mysqlbinlog会报告服务器ID为0,这会通知服务器在发送完最后一个日志文件后断开连接(非阻塞行为)。如果还指定了--stop-never
选项以保持与服务器的连接,mysqlbinlog默认会报告服务器ID为1而不是0,并且如果需要,可以使用--connection-server-id
来替换该服务器ID。请参阅6.6.9.4节,“指定mysqlbinlog服务器ID”。 -
--database=db_name
,-d db_name
--数据库=数据库名,-d 数据库名命令行格式 --database=db_name
类型 字符串 此选项使 mysqlbinlog 输出二进制日志(仅本地日志)中,在
USE
语句将db_name
选为默认数据库期间出现的条目。对于mysqlbinlog的
--database
选项类似于对于mysqld的--binlog-do-db
选项,但只能用于指定一个数据库。如果多次给出--database
,则仅使用最后一个实例。此选项的效果取决于使用的是基于语句的日志格式还是基于行的日志格式,这与
--binlog-do-db
的效果取决于使用的是基于语句的日志记录还是基于行的日志记录的情况相同。基于语句的日志记录。“--database”选项的工作方式如下:
- 虽然
db_name
是默认数据库,但无论语句是修改db_name
中的表还是其他数据库中的表,都会输出这些语句。 - 除非选择
db_name
作为默认数据库,否则即使语句修改了db_name
中的表,也不会输出。 - 对于
CREATE DATABASE
、ALTER DATABASE
和DROP DATABASE
存在一个例外情况。在确定是否输出语句时,正在创建、修改或删除的数据库被视为默认数据库。
假设二进制日志是通过使用基于语句的日志记录执行以下语句创建的:
INSERT INTO test.t1 (i) VALUES(100); INSERT INTO db2.t2 (j) VALUES(200); USE test; INSERT INTO test.t1 (i) VALUES(101); INSERT INTO t1 (i) VALUES(102); INSERT INTO db2.t2 (j) VALUES(201); USE db2; INSERT INTO test.t1 (i) VALUES(103); INSERT INTO db2.t2 (j) VALUES(202); INSERT INTO t2 (j) VALUES(203);
因为没有默认数据库,"""mysqlbinlog --database=test""" 不会输出前两条"""
INSERT
""" 语句。它会输出"""USE test
""" 之后的三条"""INSERT
""" 语句,但不会输出"""USE db2
""" 之后的三条"""INSERT
""" 语句。由于没有默认数据库,mysqlbinlog --database=db2 不会输出前两条
INSERT
语句。它不会输出USE test
之后的三条INSERT
语句,但会输出USE db2
之后的三条INSERT
语句。基于行的日志记录。mysqlbinlog仅输出更改属于
db_name
的表的条目。默认数据库对此没有影响。假设刚刚描述的二进制日志是使用基于行的日志记录而不是基于语句的日志记录创建的。mysqlbinlog--database=test仅输出那些修改test数据库中t1
的条目,无论是否发出了USE
语句,也无论默认数据库是什么。如果服务器在将
binlog_format
设置为MIXED
的情况下运行,并且你希望能够使用带有--database
选项的 mysqlbinlog,则必须确保被修改的表位于通过USE
选择的数据库中。(特别是,不应使用跨数据库更新。)与
--rewrite-db
选项一起使用时,首先应用--rewrite-db
选项;然后应用--database
选项,并使用重写后的数据库名称。在这方面,提供选项的顺序并无影响。 - 虽然
-
--debug[=debug_options\]
,-#<br /> [debug_options]
命令行格式 --debug[=debug_options]
类型 字符串 默认值 d:t:o,/tmp/mysqlbinlog.trace
编写调试日志。典型的
debug_options
字符串为d:t:o,file_name
。默认值为d:t:o,/tmp/mysqlbinlog.trace
。只有在使用
WITH_DEBUG
构建MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件未使用此选项构建。 -
命令行格式 --debug-check
类型 布尔值 默认值 FALSE
程序退出时打印一些调试信息。
只有在使用
WITH_DEBUG
构建MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件未使用此选项构建。 -
--debug-info:程序退出时打印调试信息、内存和 CPU 统计信息
命令行格式 --debug-info
类型 布尔值 默认值 FALSE
程序退出时打印调试信息以及内存和CPU使用情况统计信息。
只有在使用
WITH_DEBUG
编译MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件未使用此选项进行编译。 -
命令行格式 --default-auth=plugin
类型 字符串 关于使用哪个客户端身份验证插件的提示。请参阅8.2.17节“可插拔身份验证”。
-
--defaults-extra-file=*
file_name*
命令行格式 --defaults-extra-file=file_name
类型 文件名 在全局选项文件之后读取此选项文件,但(在Unix系统上)在用户选项文件之前读取。如果该文件不存在或以其他方式无法访问,则会出现错误。如果
file_name
不是绝对路径名,则会相对于当前目录进行解释。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-file=file_name
类型 文件名 仅使用给定的选项文件。如果该文件不存在或以其他方式无法访问,则会发生错误。如果
file_name
不是绝对路径名,则将其解释为相对于当前目录的路径。异常:即使使用
--defaults-file
,客户端程序仍会读取.mylogin.cnf
。有关此选项和其他选项文件选项的更多信息,请参阅 6.2.2.3 节“影响选项文件处理的命令行选项”。
-
命令行格式 --defaults-group-suffix=str
类型 字符串 不仅读取常规的选项组,还读取具有常规名称且后缀为
str
的组。例如,mysqlbinlog通常读取[client]
和[mysqlbinlog]
组。如果此选项指定为--defaults-group-suffix=_other
,mysqlbinlog还会读取[client_other]
和[mysqlbinlog_other]
组。有关此选项及其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
命令行格式 --disable-log-bin
禁用二进制日志记录。如果使用
--to-last-log
选项并将输出发送到同一台MySQL服务器,此操作有助于避免出现无限循环。在意外退出后恢复时,此选项也有助于避免重复记录已记录的语句。此选项会使 mysqlbinlog 在其输出中包含一条
SET sql_log_bin = 0
语句,以禁用对其余输出的二进制日志记录。操作sql_log_bin
系统变量的会话值是受限操作,因此此选项要求您具有足够的权限来设置受限会话变量。请参阅 7.1.9.1节,“系统变量权限”。 -
--exclude-gtids=*
gtid_set*:不显示gtid_set中列出的任何组。
命令行格式 --exclude-gtids=gtid_set
类型 字符串 默认值 `` 不显示
gtid_set
中列出的任何组。 -
--force-if-open
,-F
即使二进制日志文件处于打开状态或未正确关闭(设置了IN_USE标志),也读取这些文件;如果文件以截断的事件结尾,也不报错。命令行格式 --force-if-open
即使二进制日志文件处于打开状态或未正确关闭(设置了
IN_USE
标志),也能读取这些文件;如果文件以截断的事件结尾,也不会失败。IN_USE
标志仅针对服务器当前正在写入的二进制日志设置;如果服务器崩溃,该标志会一直保持设置状态,直到服务器重新启动并恢复二进制日志。如果没有此选项,mysqlbinlog将拒绝处理设置了此标志的文件。由于服务器可能正在写入该文件,因此最后一个事件被截断被视为正常情况。 -
--force-read
,-f
命令行格式 --force-read
使用此选项时,如果mysqlbinlog读取到无法识别的二进制日志事件,它会打印一条警告信息,忽略该事件并继续执行。如果不使用此选项,mysqlbinlog在读取到此类事件时会停止。
-
命令行格式 --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可插拔身份验证”。 -
--hexdump
,-H
--以十六进制转储,-H命令行格式 --hexdump
按照6.6.9.1节“mysqlbinlog十六进制转储格式”中的描述,在注释中显示日志的十六进制转储。十六进制输出有助于复制调试。
-
--host=host_name
,-h host_name
命令行格式 --host=host_name
类型 字符串 默认值 localhost
从给定主机上的MySQL服务器获取二进制日志。
-
命令行格式 --idempotent
类型 布尔值 默认值 true
告诉MySQL服务器在处理更新时使用幂等模式;这会抑制服务器在当前会话处理更新时遇到的任何重复键或键未找到错误。每当需要或有必要将一个或多个二进制日志重放到可能不包含日志所引用的所有数据的MySQL服务器时,此选项可能会很有用。
此选项的生效范围仅包括当前的mysqlbinlog客户端和会话。
-
--include-gtids=*
gtid_set*:仅显示gtid_set中列出的组。
命令行格式 --include-gtids=gtid_set
类型 字符串 默认值 `` 只显示
gtid_set
中列出的组。 -
--local-load=dir_name
,-l dir_name
(对于与LOAD DATA语句对应的数据加载操作,mysqlbinlog从二进制日志事件中提取文件,将它们作为临时文件写入本地文件系统,并写入LOAD DATALOCAL语句以使文件被加载。默认情况下,mysqlbinlog将这些临时文件写入特定于操作系统的目录。--local-load选项可用于显式指定mysqlbinlog应准备本地临时文件的目录。) --local-load=目录名,-l 目录名命令行格式 --local-load=dir_name
类型 目录名称 对于与
LOAD DATA
语句对应的数据加载操作,mysqlbinlog会从二进制日志事件中提取文件,将它们作为临时文件写入本地文件系统,并写入LOAD DATA LOCAL
语句来加载这些文件。默认情况下,mysqlbinlog会将这些临时文件写入特定于操作系统的目录。可以使用--local-load
选项来显式指定mysqlbinlog应准备本地临时文件的目录。由于其他进程可能会将文件写入特定于系统的默认目录,因此建议为 mysqlbinlog 指定 --local-load 选项,以指定数据文件的不同目录,然后在处理 mysqlbinlog 的输出时,通过为 mysql 指定 --load-data-local-dir 选项来指定同一目录。例如:
mysqlbinlog --local-load=/my/local/data ... | mysql --load-data-local-dir=/my/local/data ...
重要的
这些临时文件不会被mysqlbinlog或任何其他MySQL程序自动删除。
-
命令行格式 --login-path=name
类型 字符串 从
.mylogin.cnf
登录路径文件中指定的登录路径读取选项。“登录路径” 是一个选项组,其中包含指定要连接到哪个MySQL服务器以及以哪个账户进行身份验证的选项。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参阅6.6.7节,“mysql_config_editor — MySQL配置实用程序”。有关此选项和其他选项文件选项的更多信息,请参阅 6.2.2.3 节“影响选项文件处理的命令行选项”。
-
命令行格式 --no-defaults
不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,可以使用
--no-defaults
来阻止读取这些选项。例外情况是,无论如何都会读取
.mylogin.cnf
文件(如果该文件存在)。这使得即使使用--no-defaults
选项,也能以比在命令行上更安全的方式指定密码。要创建.mylogin.cnf
,请使用 mysql_config_editor 实用程序。请参阅 6.6.7节,“mysql_config_editor - MySQL配置实用程序”。有关此选项和其他选项文件选项的更多信息,请参阅 6.2.2.3 节“影响选项文件处理的命令行选项”。
-
--offset=N
,-o N
命令行格式 --offset=#
类型 数值型 跳过日志中的前
N
个条目。 -
命令行格式 --open-files-limit=#
类型 数值型 默认值 8
最小值 1
最大值 [platform dependent]
指定要保留的打开文件描述符的数量。
-
--password[=password\]
,-p[password]
命令行格式 --password[=password]
类型 字符串 用于连接服务器的MySQL账户的密码。密码值是可选的。如果未提供,mysqlbinlog 会提示输入密码。如果提供了密码,在
--password=
或-p
与后面跟随的密码之间不得有空格。如果未指定密码选项,默认不发送密码。在命令行中指定密码应被视为不安全的做法。为避免在命令行中提供密码,请使用选项文件。请参阅 8.1.2.1节,“密码安全的最终用户指南”。
要显式指定无密码且mysqlbinlog不应提示输入密码,请使用
--skip-password
选项。 -
命令行格式 --plugin-dir=dir_name
类型 目录名称 用于查找插件的目录。如果使用
--default-auth
选项指定身份验证插件,但mysqlbinlog找不到该插件,则指定此选项。请参见8.2.17节,“可插拔身份验证”。 -
--port=port_num
,-P port_num
命令行格式 --port=port_num
类型 数值型 默认值 3306
用于连接到远程服务器的TCP/IP端口号。
-
命令行格式 --print-defaults
打印程序名称以及它从选项文件中获取的所有选项。
有关此选项和其他选项文件选项的更多信息,请参阅 6.2.2.3 节“影响选项文件处理的命令行选项”。
-
命令行格式 --print-table-metadata
从二进制日志中打印与表相关的元数据。使用
binlog-row-metadata
配置二进制日志记录的与表相关的元数据量。 -
命令行格式 --protocol=type
类型 字符串 默认值 [see text]
有效取值 TCP``SOCKET``PIPE``MEMORY
用于连接服务器的传输协议。当其他连接参数通常导致使用的协议并非您所需的协议时,此参数很有用。有关允许值的详细信息,请参阅6.2.7节“连接传输协议”。
-
命令行格式 --raw
类型 布尔值 默认值 FALSE
默认情况下,mysqlbinlog 读取二进制日志文件并以文本格式写入事件。
--raw
选项指示 mysqlbinlog 以其原始二进制格式写入事件。使用该选项要求同时使用--read-from-remote-server
,因为这些文件是从服务器请求的。mysqlbinlog 为从服务器读取的每个文件写入一个输出文件。可以使用--raw
选项对服务器的二进制日志进行备份。使用--stop-never
选项时,备份是 “实时” 的,因为 mysqlbinlog 会保持与服务器的连接。默认情况下,输出文件会写入当前目录,文件名与原始日志文件相同。可以使用--result-file
选项修改输出文件名。更多信息,请参见 6.6.9.3 节,“使用 mysqlbinlog 备份二进制日志文件”。 -
命令行格式 --read-from-remote-source=type
引入版本 从 MySQL 8.0.26 开始,使用
--read-from-remote-source
,而在 MySQL 8.0.26 之前,使用--read-from-remote-master
。这两个选项具有相同的效果。通过将选项值分别设置为BINLOG-DUMP-NON-GTIDS
或BINLOG-DUMP-GTIDS
,这些选项会使用COM_BINLOG_DUMP
或COM_BINLOG_DUMP_GTID
命令从 MySQL 服务器读取二进制日志。如果--read-from-remote-source=BINLOG-DUMP-GTIDS
或--read-from-remote-master=BINLOG-DUMP-GTIDS
与--exclude-gtids
结合使用,则可以在源端过滤掉事务,避免不必要的网络流量。连接参数选项与这些选项或
--read-from-remote-server
选项一起使用。这些选项为--host
、--password
、--port
、--protocol
、--socket
以及--user
。如果未指定任何远程选项,则连接参数选项将被忽略。使用这些选项需要
REPLICATION SLAVE
权限。 -
--read-from-remote-master=*
type*
命令行格式 --read-from-remote-master=type
已弃用 在 MySQL 8.0.26 之前,请使用此选项,而不是
--read-from-remote-source
。这两个选项效果相同。 -
--read-from-remote-server=file_name
,-R
--从远程服务器读取=文件名,-R命令行格式 --read-from-remote-server=file_name
从 MySQL 服务器读取二进制日志,而不是读取本地日志文件。此选项要求远程服务器正在运行。它仅适用于远程服务器上的二进制日志文件,而不适用于中继日志文件。此选项接受不带文件路径的二进制日志文件名(包括数字后缀)。
此连接参数选项与本选项或
--read-from-remote-master
选项配合使用。这些选项包括--host
、--password
、--port
、--protocol
、--socket
和--user
。如果未指定任何远程选项,则连接参数选项将被忽略。使用此选项需要
REPLICATION SLAVE
权限。 -
--result-file=name
,-r name
命令行格式 --result-file=name
如果不使用
--raw
选项,此选项表示 mysqlbinlog 将文本输出写入的文件。使用--raw
选项时,mysqlbinlog 会为从服务器传输的每个日志文件写入一个二进制输出文件,默认情况下,这些文件会以与原始日志文件相同的名称写入当前目录。在这种情况下,--result-file
选项的值将被视为修改输出文件名的前缀。 -
--require-row-format 要求基于行的二进制日志记录格式
命令行格式 --require-row-format
引入版本 类型 布尔值 默认值 false
要求事件采用基于行的二进制日志格式。此选项强制 mysqlbinlog 输出的基于行的复制事件。使用此选项生成的事件流将被使用
CHANGE REPLICATION SOURCE TO
语句(从 MySQL 8.0.23 起)的REQUIRE_ROW_FORMAT
选项或CHANGE MASTER TO
语句(MySQL 8.0.23 之前)保护的复制通道接受。必须在写入二进制日志的服务器上设置binlog_format=ROW
。当指定此选项时,如果 mysqlbinlog 遇到任何在REQUIRE_ROW_FORMAT
限制下不允许的事件,包括LOAD DATA INFILE
指令、创建或删除临时表、INTVAR
、RAND
或USER_VAR
事件以及 DML 事务中的非基于行的事件,它将停止并显示错误消息。mysqlbinlog 还会在其输出开头打印一条SET<br /> @@session.require_row_format
语句,以便在执行输出时应用这些限制,并且不会打印SET<br /> @@session.pseudo_thread_id
语句。此选项是在MySQL 8.0.19中添加的。
-
--rewrite-db='*
from_name*->*
to_name*
命令行格式 --rewrite-db='oldname->newname'
类型 字符串 默认值 [none]
从基于行或基于语句的日志中读取时,将所有出现的
from_name
重写为to_name
。对于基于行的日志,在各行上进行重写;对于基于语句的日志,在USE
子句上进行重写。警告
使用此选项时,表名用数据库名限定的语句不会被重写以使用新名称。
此选项的值所采用的重写规则是一个字符串,形式为
'from_name->to_name'
,如前所示,因此必须用引号括起来。要使用多个重写规则,请多次指定该选项,如下所示:
mysqlbinlog --rewrite-db='dbcurrent->dbold' --rewrite-db='dbtest->dbcurrent' \ binlog.00001 > /tmp/statements.sql
与
--database
选项一起使用时,会先应用--rewrite-db
选项;然后应用--database
选项,并使用重写后的数据库名称。在这方面,提供选项的顺序并无影响。这意味着,例如,如果mysqlbinlog 以
--rewrite-db='mydb->yourdb'<br /> --database=yourdb
启动,那么对数据库mydb
和yourdb
中任何表的所有更新都将包含在输出中。另一方面,如果它以--rewrite-db='mydb->yourdb'<br /> --database=mydb
启动,那么 mysqlbinlog 根本不会输出任何语句:因为在应用--database
选项之前,对mydb
的所有更新首先会被重写为对yourdb
的更新,所以不存在与--database=mydb
匹配的更新。 -
--server-id=*
id* 仅显示具有给定服务器 ID 的服务器创建的那些事件。 --server-id=id 仅显示由具有给定服务器ID的服务器创建的那些事件。
命令行格式 --server-id=id
类型 数值型 仅显示由具有给定服务器ID的服务器创建的那些事件。
-
命令行格式 --server-id-bits=#
类型 数值型 默认值 32
最小值 7
最大值 32
仅使用
N
的前server_id
位来标识服务器。如果二进制日志是由 server-id-bits 设置为小于 32 且用户数据存储在最高有效位的 mysqld 写入的,那么将 mysqlbinlog 的--server-id-bits
设置为 32 可使这些数据可见。此选项仅由随 NDB 集群发行版提供或在构建时支持 NDB 集群的 mysqlbinlog 版本支持。
-
--server-public-key-path=*
file_name*
命令行格式 --server-public-key-path=file_name
类型 文件名 包含服务器基于RSA密钥对的密码交换所需公钥的客户端副本的PEM格式文件的路径名。此选项适用于使用
sha256_password
或caching_sha2_password
身份验证插件进行身份验证的客户端。对于不使用这些插件之一进行身份验证的账户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),此选项也将被忽略。如果给出
--server-public-key-path=file_name
并指定了一个有效的公钥文件,则它优先于--get-server-public-key
。对于
sha256_password
,只有在MySQL是使用OpenSSL构建时,此选项才适用。有关
sha256_password
和caching_sha2_password
插件的信息,请参阅 8.4.1.3节“SHA-256可插拔身份验证” 以及 8.4.1.2节“缓存SHA-2可插拔身份验证”。 -
命令行格式 --set-charset=charset_name
类型 字符串 在输出中添加一条
SET NAMES charset_name
语句,以指定处理日志文件时要使用的字符集。 -
命令行格式 --shared-memory-base-name=name
特定平台 Windows系统 在Windows上,使用共享内存连接到本地服务器时要使用的共享内存名称。默认值为
MYSQL
。共享内存名称区分大小写。此选项仅在服务器启动时启用了系统变量
shared_memory
以支持共享内存连接的情况下才适用。 -
--short-form
,-s
命令行格式 --short-form
仅显示日志中包含的语句,不包含任何额外信息或基于行的事件。这仅用于测试,不应在生产系统中使用。它已被弃用,预计在未来版本中会被移除。
-
| 命令行格式 |
--skip-gtids[=true|false]
|
| :--------- | --------------------------- |
| 类型 | 布尔值 |
| 默认值 |false
|不要将二进制日志文件中的全局事务标识符(GTID)包含在输出转储文件中。例如:
mysqlbinlog --skip-gtids binlog.000001 > /tmp/dump.sql mysql -u root -p -e "source /tmp/dump.sql"
通常情况下,不应在生产环境或恢复过程中使用此选项,除非在特定且罕见的场景中,明确不希望使用全局事务标识符(GTIDs)。例如,管理员可能希望将选定的事务(如表定义)从一个部署复制到另一个不相关的部署,且该部署不会与原始部署进行双向复制。在这种情况下,可以使用
--skip-gtids
选项,使管理员能够将这些事务当作新事务应用,并确保这些部署之间保持不相关。但是,只有在包含GTIDs会导致特定用例出现已知问题时,才应使用此选项。 -
--socket=path
,-S path
对于连接到 localhost,要使用的 Unix 套接字文件,或者在 Windows 上,要使用的命名管道名称。 在 Windows 上,只有在服务器启动时启用了 named_pipe 系统变量以支持命名管道连接时,此选项才适用。此外,进行连接的用户必须是 named_pipe_full_access_group 系统变量指定的 Windows 组的成员。 以 --ssl 开头的选项指定是否使用加密连接到服务器,并指明在何处查找 SSL 密钥和证书。请参阅 加密连接的命令选项。 --ssl-fips-mode={OFF|ON|STRICT} (注:--socket=path,-S path 这部分在原文中未明确表意,推测是连接相关的设置说明,按原样保留。)| 命令行格式 |
--socket={file_name|pipe_name}
|
| :--------- | -------------------------------- |
| 类型 | 字符串 |对于连接到
localhost
,要使用的Unix套接字文件,或者在Windows上,要使用的命名管道的名称。在Windows系统上,只有在启用了
named_pipe
系统变量以支持命名管道连接的情况下启动服务器,此选项才适用。此外,进行连接的用户必须是named_pipe_full_access_group
系统变量指定的Windows组的成员。 -
--ssl*
以
--ssl
开头的选项用于指定是否使用加密连接到服务器,并指明在何处查找SSL密钥和证书。请参阅 加密连接的命令选项。 -
| 命令行格式 |
--ssl-fips-mode={OFF|ON|STRICT}
|
| :--------- | --------------------------------- |
| 已弃用 | |
| 类型 | 枚举 |
| 默认值 |OFF
|
| 有效取值 |OFF``ON``STRICT
|控制是否在客户端启用FIPS模式。
--ssl-fips-mode
选项与其他--ssl-xxx
选项的不同之处在于,它不是用于建立加密连接,而是用于影响允许哪些加密操作。请参阅 8.8节“FIPS支持”。这些“--ssl-fips-mode”值是允许的:
- OFF:禁用FIPS模式。
- 开启:启用FIPS模式。
- STRICT:启用“严格”FIPS模式。
注意
如果OpenSSL FIPS对象模块不可用,
--ssl-fips-mode
唯一允许的值是OFF
。在这种情况下,将--ssl-fips-mode
设置为ON
或STRICT
会导致客户端在启动时发出警告,并以非FIPS模式运行。从 MySQL 8.0.34 开始,此选项已被弃用。预计它将在未来版本的 MySQL 中移除。
-
命令行格式 --start-datetime=datetime
类型 约会时间 从第一个时间戳等于或晚于
datetime
参数的事件开始读取二进制日志。datetime
值是相对于运行 mysqlbinlog 的机器上的本地时区的。该值的格式应符合DATETIME
或TIMESTAMP
数据类型所接受的格式。例如:mysqlbinlog --start-datetime="2005-12-25 11:25:56" binlog.000003
此选项对于时间点恢复很有用。请参阅9.5节“时间点(增量)恢复”。
-
--start-position=N
,-j N
命令行格式 --start-position=#
类型 数值型 从日志位置
N
开始解码二进制日志,输出内容包括在位置N
或之后开始的任何事件。该位置是日志文件中的字节位置,而非事件计数器;它需要指向一个事件的起始位置才能生成有用的输出。此选项适用于命令行中指定的第一个日志文件。在MySQL 8.0.33之前,此选项支持的最大值为4294967295(232 - 1)。在MySQL 8.0.33及更高版本中,该值为18446744073709551616(264 - 1),除非同时使用
--read-from-remote-server
或--read-from-remote-source
,在这种情况下,最大值为4294967295。此选项对于时间点恢复很有用。请参阅9.5节 “时间点(增量)恢复”。
-
命令行格式 --stop-datetime=datetime
在遇到第一个时间戳等于或晚于 datetime 参数的事件时,停止读取二进制日志。有关 datetime 值的信息,请参阅 --start-datetime 选项的说明。
此选项对于时间点恢复很有用。请参阅9.5节“时间点(增量)恢复”。
-
--持续运行 (注:“--stop-never”字面意思是“从不停止”,结合语境这里意译为“--持续运行” )
命令行格式 --stop-never
类型 布尔值 默认值 FALSE
此选项与
--read-from-remote-server
一起使用。它指示mysqlbinlog保持与服务器的连接。否则,当最后一个日志文件从服务器传输完成后,mysqlbinlog将退出。--stop-never
意味着--to-last-log
,因此在命令行中只需指定要传输的第一个日志文件。--stop-never
通常与--raw
一起使用以进行实时二进制日志备份,但也可以在不使用--raw
的情况下使用,以便在服务器生成日志事件时持续以文本形式显示这些事件。使用
--stop-never
选项时,默认情况下,mysqlbinlog连接到服务器时报告的服务器ID为1。使用--connection-server-id
选项可显式指定要报告的备用ID。这可用于避免与副本服务器的ID或另一个mysqlbinlog进程的ID冲突。请参阅6.6.9.4节,“指定mysqlbinlog服务器ID”。 -
--stop-never-slave-server-id=*
id*
命令行格式 --stop-never-slave-server-id=#
类型 数值型 默认值 65535
最小值 1
此选项已弃用,预计在未来版本中移除。请改用
--connection-server-id
选项来指定要让 mysqlbinlog 报告的服务器ID。 -
命令行格式 --stop-position=#
类型 数值型 在日志位置
N
处停止解码二进制日志,输出中不包含从位置N
或之后开始的任何事件。该位置是日志文件中的字节位置,而非事件计数器;它需要指向你希望包含在输出中的最后一个事件起始位置之后的某个点。在位置N
之前开始并在该位置或之后结束的事件是要处理的最后一个事件。此选项适用于命令行中指定的最后一个日志文件。此选项对于时间点恢复很有用。请参阅9.5节,“时间点(增量)恢复”。
-
--tls-ciphersuites=*
ciphersuite_list*
命令行格式 --tls-ciphersuites=ciphersuite_list
引入版本 类型 字符串 用于使用TLSv1.3的加密连接的可允许密码套件。该值是一个或多个以冒号分隔的密码套件名称的列表。此选项可指定的密码套件取决于编译MySQL时使用的SSL库。有关详细信息,请参阅 8.3.2节,“加密连接TLS协议和密码”。
此选项是在 MySQL 8.0.16 中添加的。
-
命令行格式 --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协议和密码”。
-
命令行格式 --to-last-log
不要在MySQL服务器请求的二进制日志末尾停止,而是继续打印,直到最后一个二进制日志结束。如果将输出发送回同一台MySQL服务器,这可能会导致无限循环。此选项需要
--read-from-remote-server
。 -
--user=user_name
,-u user_name
命令行格式 --user=user_name,
类型 字符串 连接到远程服务器时要使用的MySQL账户的用户名。
如果您在MySQL 8.0.31或更高版本中使用
Rewriter
插件,则应向此用户授予SKIP_QUERY_REWRITE
权限。 -
--verbose
,-v
命令行格式 --verbose
重建行事件并将其显示为带注释的SQL语句,在适用的情况下包含表分区信息。如果此选项被指定两次(通过传入“-vv”或“--verbose --verbose”),输出将包含注释以指示列数据类型和一些元数据,并且如果
binlog_rows_query_log_events
系统变量设置为TRUE
,还会包含信息性日志事件,如行查询日志事件。有关展示
--base64-output
和--verbose
对行事件输出影响的示例,请参阅 6.6.9.2节,“mysqlbinlog行事件显示”。 -
命令行格式 --verify-binlog-checksum
验证二进制日志文件中的校验和。
-
--version
,-V
显示版本信息并退出。命令行格式 --version
显示版本信息并退出。
与 MySQL 早期版本的情况不同,使用此选项时,mysqlbinlog 显示的版本号与 MySQL 服务器版本相同。
-
命令行格式 --zstd-compression-level=#
引入版本 类型 整数 用于与服务器建立连接时使用
zstd
压缩算法的压缩级别。允许的级别范围是1到22,值越大表示压缩程度越高。默认的zstd
压缩级别为3。此压缩级别设置对不使用zstd
压缩的连接没有影响。有关更多信息,请参阅6.2.8节,“连接压缩控制”。
此选项是在MySQL 8.0.18中添加的。
你可以将 mysqlbinlog 的输出通过管道传递给 mysql 客户端,以执行二进制日志中包含的事件。当你有旧备份时,此技术用于从意外退出中恢复(请参阅 9.5 节,“时间点(增量)恢复”)。例如:
mysqlbinlog binlog.000001 | mysql -u root -p
或者:
mysqlbinlog binlog.[0-9]* | mysql -u root -p
如果由mysqlbinlog生成的语句可能包含BLOB
值,那么当mysql处理这些语句时可能会出现问题。在这种情况下,使用--binary-mode
选项调用mysql。
如果你需要先修改语句日志(例如,出于某种原因删除你不想执行的语句),也可以将mysqlbinlog的输出重定向到文本文件。编辑文件后,将文件作为输入提供给 mysql 程序,以执行其中包含的语句:
mysqlbinlog binlog.000001 > tmpfile
... edit tmpfile ...
mysql -u root -p < tmpfile
当使用--start-position
选项调用mysqlbinlog
时,它仅显示二进制日志中偏移量大于或等于给定位置的那些事件(给定位置必须与某一事件的起始位置匹配)。它还有一些选项,可在遇到具有给定日期和时间的事件时停止和开始。这使你能够使用--stop-datetime
选项执行时间点恢复(例如,可以说“将我的数据库前滚到今天上午10:30的状态”)。
正在处理多个文件。如果要在MySQL服务器上执行多个二进制日志,安全的方法是通过与服务器的单个连接来处理所有日志。以下示例展示了可能不安全的做法:
mysqlbinlog binlog.000001 | mysql -u root -p # DANGER!!
mysqlbinlog binlog.000002 | mysql -u root -p # DANGER!!
以这种方式使用到服务器的多个连接来处理二进制日志可能会引发问题,例如第一个日志文件包含CREATE TEMPORARY TABLE
语句,而第二个日志包含使用该临时表的语句。当第一个mysql进程终止时,服务器会删除临时表。当第二个mysql进程尝试使用该表时,服务器会报告“未知表”。
为避免此类问题,请使用单个 mysql进程 来执行您想要处理的所有二进制日志的内容。以下是一种实现方法:
mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p
另一种方法是将所有日志写入单个文件,然后处理该文件:
mysqlbinlog binlog.000001 > /tmp/statements.sql
mysqlbinlog binlog.000002 >> /tmp/statements.sql
mysql -u root -p -e "source /tmp/statements.sql"
从 MySQL 8.0.12 开始,你还可以使用 shell 管道将多个二进制日志文件作为流输入提供给 mysqlbinlog。压缩的二进制日志文件存档可以解压缩并直接提供给 mysqlbinlog。在此示例中,binlog-files_1.gz
包含多个要处理的二进制日志文件。该管道提取 binlog-files_1.gz
的内容,将二进制日志文件作为标准输入通过管道输送到 mysqlbinlog,并将 mysqlbinlog 的输出通过管道输送到 mysql 客户端以执行:
gzip -cd binlog-files_1.gz | ./mysqlbinlog - | ./mysql -uroot -p
你可以指定多个归档文件,例如:
gzip -cd binlog-files_1.gz binlog-files_2.gz | ./mysqlbinlog - | ./mysql -uroot -p
对于流式输入,请勿使用--stop-position
,因为mysqlbinlog无法识别要应用此选项的最后一个日志文件。
LOAD DATA操作。mysqlbinlog可以生成输出,在没有原始数据文件的情况下重现LOAD DATA操作。mysqlbinlog将数据复制到一个临时文件,并写入一条LOAD DATA LOCAL语句来引用该文件。写入这些文件的目录的默认位置因系统而异。要显式指定一个目录,请使用--local-load选项。
因为 mysqlbinlog 会将LOAD DATA
语句转换为LOAD DATA LOCAL
语句(即添加LOCAL
),所以用于处理这些语句的客户端和服务器都必须配置启用LOCAL
功能。请参阅8.1.6节,“LOAD DATA LOCAL的安全注意事项”。
警告
为LOAD DATA LOCAL
语句创建的临时文件不会自动删除,因为在实际执行这些语句之前都需要用到它们。在不再需要语句日志后,你应该自行删除这些临时文件。这些文件可以在临时文件目录中找到,文件名类似original_file_name-#-#
。
6.6.9.1 mysqlbinlog十六进制转储格式
“--hexdump选项会使mysqlbinlog对二进制日志内容生成十六进制转储:”
mysqlbinlog --hexdump source-bin.000001
十六进制输出由以#
开头的注释行组成,因此对于前面的命令,输出可能如下所示:
/*!40019 SET @@SESSION.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
# at 4
#051024 17:24:13 server id 1 end_log_pos 98
# Position Timestamp Type Master ID Size Master Pos Flags
# 00000004 9d fc 5c 43 0f 01 00 00 00 5e 00 00 00 62 00 00 00 00 00
# 00000017 04 00 35 2e 30 2e 31 35 2d 64 65 62 75 67 2d 6c |..5.0.15.debug.l|
# 00000027 6f 67 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |og..............|
# 00000037 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
# 00000047 00 00 00 00 9d fc 5c 43 13 38 0d 00 08 00 12 00 |.......C.8......|
# 00000057 04 04 04 04 12 00 00 4b 00 04 1a |.......K...|
# Start: binlog v 4, server v 5.0.15-debug-log created 051024 17:24:13
# at startup
ROLLBACK;
十六进制转储输出目前包含以下列表中的元素。此格式可能会发生变化。有关二进制日志格式的更多信息,请参阅MySQL内部原理:二进制日志。
Position
:日志文件内的字节位置。Timestamp
:事件的时间戳。在所示示例中,'9d fc 5c 43'
是'051024 17:24:13'
的十六进制表示形式。- 类型:事件类型代码。
Master ID
:创建该事件的复制源服务器的服务器ID。Size
:事件的大小,以字节为单位。Master Pos
:下一个事件在原始源日志文件中的位置。Flags
:事件标志值。
6.6.9.2 mysqlbinlog行事件显示
以下示例说明了 mysqlbinlog 如何显示指定数据修改的行事件。这些事件对应于类型代码为 WRITE_ROWS_EVENT
、UPDATE_ROWS_EVENT
和 DELETE_ROWS_EVENT
的事件。可使用 --base64-output=DECODE-ROWS
和 --verbose
选项来影响行事件输出。
假设服务器正在使用基于行的二进制日志记录,并且你执行以下语句序列:
CREATE TABLE t
(
id INT NOT NULL,
name VARCHAR(20) NOT NULL,
date DATE NULL
) ENGINE = InnoDB;
START TRANSACTION;
INSERT INTO t VALUES(1, 'apple', NULL);
UPDATE t SET name = 'pear', date = '2009-01-01' WHERE id = 1;
DELETE FROM t WHERE id = 1;
COMMIT;
默认情况下,mysqlbinlog 使用 BINLOG
语句将行事件显示为Base-64编码的字符串。省略无关行后,前面语句序列产生的行事件输出如下:
$> mysqlbinlog log_file
...
# at 218
#080828 15:03:08 server id 1 end_log_pos 258 Write_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ==
'/*!*/;
...
# at 302
#080828 15:03:08 server id 1 end_log_pos 356 Update_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP
'/*!*/;
...
# at 400
#080828 15:03:08 server id 1 end_log_pos 442 Delete_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP
'/*!*/;
要将行事件以“伪SQL”语句的形式作为注释查看,请使用mysqlbinlog 并带上--verbose
或-v
选项。此输出级别还会在适用的情况下显示表分区信息。输出包含以 ###
开头的行:
$> mysqlbinlog -v log_file
...
# at 218
#080828 15:03:08 server id 1 end_log_pos 258 Write_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ==
'/*!*/;
### INSERT INTO test.t
### SET
### @1=1
### @2='apple'
### @3=NULL
...
# at 302
#080828 15:03:08 server id 1 end_log_pos 356 Update_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP
'/*!*/;
### UPDATE test.t
### WHERE
### @1=1
### @2='apple'
### @3=NULL
### SET
### @1=1
### @2='pear'
### @3='2009:01:01'
...
# at 400
#080828 15:03:08 server id 1 end_log_pos 442 Delete_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP
'/*!*/;
### DELETE FROM test.t
### WHERE
### @1=1
### @2='pear'
### @3='2009:01:01'
指定 --verbose
或 -v
两次,还可以显示每列的数据类型和某些元数据,并且如果 binlog_rows_query_log_events
系统变量设置为 TRUE
,则会显示信息日志事件,如行查询日志事件。输出在每次列更改后包含一条附加注释:
$> mysqlbinlog -vv log_file
...
# at 218
#080828 15:03:08 server id 1 end_log_pos 258 Write_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ==
'/*!*/;
### INSERT INTO test.t
### SET
### @1=1 /* INT meta=0 nullable=0 is_null=0 */
### @2='apple' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */
### @3=NULL /* VARSTRING(20) meta=0 nullable=1 is_null=1 */
...
# at 302
#080828 15:03:08 server id 1 end_log_pos 356 Update_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP
'/*!*/;
### UPDATE test.t
### WHERE
### @1=1 /* INT meta=0 nullable=0 is_null=0 */
### @2='apple' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */
### @3=NULL /* VARSTRING(20) meta=0 nullable=1 is_null=1 */
### SET
### @1=1 /* INT meta=0 nullable=0 is_null=0 */
### @2='pear' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */
### @3='2009:01:01' /* DATE meta=0 nullable=1 is_null=0 */
...
# at 400
#080828 15:03:08 server id 1 end_log_pos 442 Delete_rows: table id 17 flags: STMT_END_F
BINLOG '
fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=
fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP
'/*!*/;
### DELETE FROM test.t
### WHERE
### @1=1 /* INT meta=0 nullable=0 is_null=0 */
### @2='pear' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */
### @3='2009:01:01' /* DATE meta=0 nullable=1 is_null=0 */
你可以通过使用--base64-output=DECODE-ROWS
选项,让mysqlbinlog
抑制针对行事件的BINLOG
语句。这与--base64-output=NEVER
类似,但如果发现行事件,不会以错误形式退出。--base64-output=DECODE-ROWS
和--verbose
的组合提供了一种便捷方式,仅将行事件视为SQL语句:
$> mysqlbinlog -v --base64-output=DECODE-ROWS log_file
...
# at 218
#080828 15:03:08 server id 1 end_log_pos 258 Write_rows: table id 17 flags: STMT_END_F
### INSERT INTO test.t
### SET
### @1=1
### @2='apple'
### @3=NULL
...
# at 302
#080828 15:03:08 server id 1 end_log_pos 356 Update_rows: table id 17 flags: STMT_END_F
### UPDATE test.t
### WHERE
### @1=1
### @2='apple'
### @3=NULL
### SET
### @1=1
### @2='pear'
### @3='2009:01:01'
...
# at 400
#080828 15:03:08 server id 1 end_log_pos 442 Delete_rows: table id 17 flags: STMT_END_F
### DELETE FROM test.t
### WHERE
### @1=1
### @2='pear'
### @3='2009:01:01'
注意
如果您打算重新执行mysqlbinlog输出,则不应抑制BINLOG
语句。
使用--verbose
为行事件生成的SQL语句比相应的BINLOG
语句更具可读性。但是,它们并不完全等同于生成这些事件的原始SQL语句。以下限制适用:
-
原始列名丢失,取而代之的是
@N
,其中N
是列号。 -
二进制日志中没有字符集信息,这会影响字符串列的显示:
-
对于对应的二进制和非二进制字符串类型(
BINARY
与CHAR
,VARBINARY
与VARCHAR
,BLOB
与TEXT
),不做区分。输出对于定长字符串使用STRING
数据类型,对于变长字符串使用VARSTRING
数据类型。 -
对于多字节字符集,二进制日志中不存在每个字符的最大字节数,因此字符串类型的长度以字节为单位显示,而不是以字符为单位。例如,
STRING(4)
用作以下两种列类型中任一种的值的数据类型:CHAR(4) CHARACTER SET latin1 CHAR(2) CHARACTER SET ucs2
-
由于类型为
UPDATE_ROWS_EVENT
的事件的存储格式,UPDATE
语句显示时,WHERE
子句会位于SET
子句之前。
-
正确解读行事件需要二进制日志开头格式描述事件中的信息。因为 mysqlbinlog 无法预先知道日志的其余部分是否包含行事件,所以默认情况下,它会在输出的起始部分使用 BINLOG
语句显示格式描述事件。
如果已知二进制日志不包含任何需要BINLOG
语句的事件(即,没有行事件),则可以使用--base64-output=NEVER
选项来防止写入此头部。
6.6.9.3 使用mysqlbinlog备份二进制日志文件
默认情况下,mysqlbinlog 读取二进制日志文件并以文本格式显示其内容。这使您能够更轻松地检查文件中的事件并重新执行它们(例如,将输出作为 mysql 的输入)。mysqlbinlog 可以直接从本地文件系统读取日志文件,或者使用 --read-from-remote-server
选项连接到服务器并从该服务器请求二进制日志内容。mysqlbinlog 将文本输出写入其标准输出,或者如果给出了 --result-file=file_name
选项,则写入该选项指定的文件名。
- mysqlbinlog备份功能
- mysqlbinlog备份选项
- 静态备份和实时备份
- 输出文件命名
- 示例:使用mysqldump + mysqlbinlog进行备份与恢复
- mysqlbinlog备份限制
mysqlbinlog备份功能
mysqlbinlog
可以读取二进制日志文件,并写入包含相同内容的新文件,即采用二进制格式而非文本格式。此功能使您能够轻松地以其原始格式备份二进制日志。mysqlbinlog
可以进行静态备份,备份一组日志文件,在到达最后一个文件末尾时停止。它还可以进行连续(“实时”)备份,在到达最后一个日志文件末尾时仍与服务器保持连接,并在生成新事件时继续复制这些事件。在连续备份操作中,mysqlbinlog
会一直运行,直到连接结束(例如,服务器退出时),或者 mysqlbinlog
被强制终止。连接结束时,mysqlbinlog
不会等待并重试连接,这与副本服务器不同。要在服务器重启后继续进行实时备份,您还必须重启 mysqlbinlog
。
重要提示
mysqlbinlog 可以备份加密和未加密的二进制日志文件。但是,使用 mysqlbinlog 生成的加密二进制日志文件副本以未加密格式存储。
mysqlbinlog备份选项
二进制日志备份要求你至少使用两个选项调用mysqlbinlog:
--read-from-remote-server
(或-R
)选项指示mysqlbinlog
连接到服务器并请求其二进制日志。(这类似于副本服务器连接到其复制源服务器。)- “--raw”选项告诉
mysqlbinlog
写入原始(二进制)输出,而不是文本输出。
除了--read-from-remote-server
,通常还会指定其他选项:--host
指明服务器的运行位置,你可能还需要指定连接选项,如 --user
和 --password
。
还有其他几个选项与--raw
结合使用时很有用:
--stop-never
:到达最后一个日志文件末尾后仍与服务器保持连接,并继续读取新事件。--connection-server-id=id
:mysqlbinlog 连接到服务器时报告的服务器ID。使用--stop-never
时,默认报告的服务器ID为1。如果这与副本服务器或另一个mysqlbinlog 进程的ID冲突,请使用--connection-server-id
指定备用服务器ID。请参阅6.6.9.4节,“指定 mysqlbinlog 服务器ID”。- --result-file:输出文件名的前缀,后面会详细说明。
静态和实时备份
要使用mysqlbinlog备份服务器的二进制日志文件,你必须指定服务器上实际存在的文件名。如果你不知道文件名,请连接到服务器并使用 SHOW BINARY LOGS
语句查看当前的文件名。假设该语句产生以下输出:
mysql> SHOW BINARY LOGS;
+---------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000130 | 27459 | No |
| binlog.000131 | 13719 | No |
| binlog.000132 | 43268 | No |
+---------------+-----------+-----------+
有了这些信息,你可以使用mysqlbinlog按如下方式将二进制日志备份到当前目录(每行输入一条命令):
-
要对从
binlog.000130
到binlog.000132
的二进制日志进行静态备份,请使用以下任一命令:mysqlbinlog --read-from-remote-server --host=host_name --raw binlog.000130 binlog.000131 binlog.000132 mysqlbinlog --read-from-remote-server --host=host_name --raw --to-last-log binlog.000130
第一个命令会明确指定每个文件名。第二个命令仅指定第一个文件名,并使用
--to-last-log
读取到最后一个日志。这些命令之间的一个区别在于,如果在mysqlbinlog到达binlog.000132
末尾之前,服务器恰好打开了binlog.000133
,则第一个命令不会读取它,但第二个命令会读取。 -
要进行实时备份,让mysqlbinlog 从
binlog.000130
开始复制现有日志文件,然后保持连接,以便在服务器生成新事件时复制这些新事件:mysqlbinlog --read-from-remote-server --host=host_name --raw --stop-never binlog.000130
使用
--stop-never
时,无需指定--to-last-log
来读取最后一个日志文件,因为该选项已隐含其中。
输出文件命名
如果不使用 --raw
,mysqlbinlog 会生成文本输出,并且如果指定了 --result-file
选项,则该选项会指定写入所有输出的单个文件的名称。使用 --raw
时,mysqlbinlog 会为从服务器传输的每个日志文件写入一个二进制输出文件。默认情况下,mysqlbinlog 会在当前目录中写入与原始日志文件同名的文件。若要修改输出文件名,请使用 --result-file
选项。与 --raw
一起使用时,--result-file
选项值将被视为修改输出文件名的前缀。
假设当前服务器上有名称为binlog.000999
及以上编号的二进制日志文件。如果使用mysqlbinlog --raw备份这些文件,--result-file
选项生成的输出文件名如下表所示。可以通过在--result-file
值前加上目录路径,将文件写入特定目录。如果--result-file
值仅包含目录名,则该值必须以路径名分隔符结尾。如果输出文件已存在,则会被覆盖。
--结果文件选项 | 输出文件名 |
---|---|
--结果文件=x |
xbinlog.000999 及以上 |
--结果文件=/tmp/ |
/tmp/binlog.000999 及以上 |
--结果文件=/tmp/x |
/tmp/xbinlog.000999 及之后的日志文件 |
示例:使用mysqldump + mysqlbinlog进行备份和恢复
以下示例描述了一个简单场景,展示了如何结合使用 mysqldump 和 mysqlbinlog 备份服务器数据和二进制日志,以及在发生数据丢失时如何使用备份恢复服务器。该示例假设服务器在主机 host_name
上运行,并且其第一个二进制日志文件名为 binlog.000999
。请在单行中输入每个命令。
使用 mysqlbinlog 对二进制日志进行持续备份:
mysqlbinlog --read-from-remote-server --host=host_name --raw
--stop-never binlog.000999
使用 [**mysqldump**](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html)
创建一个转储文件,作为服务器数据的快照。使用 [
--all-databases](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_all-databases)
、[
--events](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_events)
和 [
--routines](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_routines)
备份所有数据,并使用 [
--master-data=2](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html#option_mysqldump_master-data)
将当前二进制日志坐标包含在转储文件中。
mysqldump --host=host_name --all-databases --events --routines --master-data=2> dump_file
定期执行 mysqldump 命令,以按需创建更新的快照。
如果发生数据丢失(例如,服务器意外退出),请使用最新的转储文件恢复数据:
mysql --host=host_name -u root -p < dump_file
然后使用二进制日志备份重新执行转储文件中列出的坐标之后写入的事件。假设文件中的坐标如下所示:
-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.001002', MASTER_LOG_POS=27284;
如果最近备份的日志文件名为binlog.001004
,请按如下方式重新执行日志事件:
mysqlbinlog --start-position=27284 binlog.001002 binlog.001003 binlog.001004
| mysql --host=host_name -u root -p
如果MySQL不允许远程root
访问,或者你希望简化恢复操作,将备份文件(转储文件和二进制日志文件)复制到服务器主机可能会更方便。
mysqlbinlog备份限制
使用mysqlbinlog进行的二进制日志备份受以下限制:
- 如果连接丢失(例如,服务器重启或发生网络中断),
[**mysqlbinlog**](https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog.html)
不会自动重新连接到 MySQL 服务器。 - 备份的延迟与复制服务器的延迟类似。
6.6.9.4 指定mysqlbinlog的服务器ID
使用 --read-from-remote-server
选项调用时,mysqlbinlog 会连接到 MySQL 服务器,指定一个服务器 ID 以标识自身,并从服务器请求二进制日志文件。可以通过以下几种方式使用 mysqlbinlog 从服务器请求日志文件:
- 指定一组显式命名的文件:对于每个文件,mysqlbinlog 进行连接并发出
Binlog dump
命令。服务器发送文件后断开连接。每个文件有一个连接。 - 指定起始文件并使用
--to-last-log
:mysqlbinlog 会连接并为所有文件发出Binlog dump
命令。服务器会发送所有文件然后断开连接。 - 指定起始文件并使用
--stop-never
(这意味着使用--to-last-log
):mysqlbinlog 连接并对所有文件发出Binlog dump
命令。服务器会发送所有文件,但在发送完最后一个文件后不会断开连接。
仅使用--read-from-remote-server
时,mysqlbinlog 会使用服务器ID 0 进行连接,这会告知服务器在发送最后请求的日志文件后断开连接。
使用--read-from-remote-server
和--stop-never
选项时,mysqlbinlog会使用一个非零的服务器ID进行连接,这样服务器在发送完最后一个日志文件后不会断开连接。默认情况下,服务器ID为1,但可以通过--connection-server-id
选项进行更改。
因此,对于前两种请求文件的方式,服务器会断开连接,因为mysqlbinlog指定的服务器ID为0。如果给出--stop-never
,则服务器不会断开连接,因为mysqlbinlog指定的服务器ID不为零。
6.6.10 mysqldumpslow — 汇总慢查询日志文件
MySQL慢查询日志包含有关执行时间较长的查询的信息(请参阅7.4.5节,“慢查询日志”)。mysqldumpslow 解析MySQL慢查询日志文件并汇总其内容。
通常情况下,mysqldumpslow 会将除数字和字符串数据值的特定值之外相似的查询分组。在显示汇总输出时,它会将这些值 “抽象” 为 N
和 'S'
。要修改值抽象行为,请使用 -a
和 -n
选项。
像这样调用 mysqldumpslow:
mysqldumpslow [options] [log_file ...]
不提供任何选项时的示例输出:
Reading mysql slow query log from /usr/local/mysql/data/mysqld80-slow.log
Count: 1 Time=4.32s (4s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
insert into t2 select * from t1
Count: 3 Time=2.53s (7s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
insert into t2 select * from t1 limit N
Count: 3 Time=2.13s (6s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
insert into t1 select * from t1
mysqldumpslow 支持以下选项。
表6.24 mysqldumpslow选项
选项名称 | 描述 |
---|---|
不将所有数字抽象为N,字符串抽象为'S | 不要将所有数字抽象为N,将字符串抽象为'S |
-n 将至少包含指定位数的数字抽象化 | 将至少具有指定位数的数字抽象化 |
--调试 | 写入调试信息 |
-g | 只考虑符合该模式的语句 |
--帮助 | 显示帮助信息并退出 |
-h 日志文件名中服务器的主机名 | 日志文件名中服务器的主机名 |
-i 服务器实例名称 -l 不从总时间中减去锁定时间 -r 反转排序顺序 -s 如何对输出进行排序 -t 仅显示前num个查询 | 服务器实例名称 |
-l 不将锁定时间从总时间中扣除 | 不要从总时间中减去锁定时间 |
-r 反转排序顺序 | 反转排序顺序 |
-s 如何对输出进行排序 | 如何对输出进行排序 |
-t 仅显示前num条查询 | 仅显示前num条查询 |
--罗嗦 | 详细模式 |
-
命令行格式 --help
显示帮助信息并退出。
-
-a
不要将所有数字抽象为
N
,将所有字符串抽象为'S'
。 -
--debug
,-d
命令行格式 --debug
以调试模式运行。
只有在使用
WITH_DEBUG
构建MySQL时,此选项才可用。Oracle提供的MySQL发行版二进制文件未使用此选项构建。 -
-g *
pattern*
类型 字符串 只考虑与(grep 风格的)模式匹配的查询。
-
-h *
host_name*
类型 字符串 默认值 *
用于生成
*-slow.log
文件名的MySQL服务器主机名。该值可以包含通配符。默认值为*
(匹配所有)。 -
-i *
name*
类型 字符串 服务器实例名称(如果使用mysql.server启动脚本)。
-
-l
不要从总时间中减去锁定时间。
-
-n *
N*
类型 数字的 名称中包含至少
N
位数字的抽象数字。 -
-r
反转排序顺序。
-
-s *
sort_type*
类型 字符串 默认值 at
如何对输出进行排序。
sort_type
的值应从以下列表中选择:t
、at
:按查询时间或平均查询时间排序l
,al
:按锁定时间或平均锁定时间排序r
,ar
:按发送的行数或平均发送行数排序c
:按数量排序
默认情况下,mysqldumpslow 按平均查询时间排序(等同于
-s at
)。 -
-t *
N*
类型 数字的 仅在输出中显示前
N
个查询。 -
--verbose
,-v
命令行格式 --verbose
详细模式。打印有关程序执行情况的更多信息。
6.7 程序开发实用工具
本节介绍了一些在开发MySQL程序时可能会用到的实用工具。
在 shell 脚本中,你可以使用 my_print_defaults 程序来解析选项文件,并查看给定程序将使用哪些选项。以下示例展示了 my_print_defaults 在被要求显示 [client]
和 [mysql]
组中找到的选项时可能产生的输出:
$> my_print_defaults client mysql
--port=3306
--socket=/tmp/mysql.sock
--no-auto-rehash
开发人员注意:在Cclient库中,选项文件处理的实现方式很简单,即在任何命令行参数之前,先处理适当组中的所有选项。对于使用多次指定的选项的最后一个实例的程序,这种方法效果很好。如果你有一个C或C++程序以这种方式处理多次指定的选项,但不读取选项文件,那么你只需添加两行代码,就能赋予它这种功能。查看任何标准MySQL客户端的源代码,了解如何做到这一点。
其他一些针对MySQL的语言接口是基于C客户端库的,其中一些接口提供了访问选项文件内容的方法。这些语言包括Perl和Python。有关详细信息,请参阅您首选接口的文档。
6.7.1 mysql_config——显示编译客户端的选项
mysql_config 为编译 MySQL 客户端并将其连接到 MySQL 提供有用信息。它是一个 shell 脚本,因此仅在 Unix 及类 Unix 系统上可用。
注意
pkg-config 可作为 mysql_config 的替代工具,用于获取编译 MySQL 应用程序所需的信息,如编译器标志或链接库。有关更多信息,请参阅 使用 pkg-config 构建 C API 客户端程序。
mysql_config支持以下选项。
-
用于查找头文件的C编译器标志以及编译
libmysqlclient
库时使用的关键编译器标志和定义。返回的选项与创建该库时使用的特定编译器相关,可能会与您自己的编译器设置冲突。如需仅包含包含路径的更具可移植性的选项,请使用--include
。 -
与
--cflags
类似,但用于C++ 编译器标志。 -
用于查找MySQL包含文件的编译器选项。
-
与MySQL客户端库链接所需的库和选项。
-
与线程安全的MySQL客户端库链接所需的库和选项。在MySQL 8.0中,所有客户端库都是线程安全的,因此无需使用此选项。在所有情况下都可以使用
--libs
选项。 -
配置MySQL时定义的默认插件目录路径名。
-
配置MySQL时定义的默认TCP/IP端口号。
-
配置MySQL时定义的默认Unix套接字文件。
-
显示指定配置变量的值。允许的
var_name
值包括pkgincludedir
(头文件目录)、pkglibdir
(库目录)和plugindir
(插件目录)。 -
MySQL发行版的版本号。
如果不带任何选项调用 mysql_config,它将显示其支持的所有选项及其值的列表:
$> mysql_config
Usage: /usr/local/mysql/bin/mysql_config [options]
Options:
--cflags [-I/usr/local/mysql/include/mysql -mcpu=pentiumpro]
--cxxflags [-I/usr/local/mysql/include/mysql -mcpu=pentiumpro]
--include [-I/usr/local/mysql/include/mysql]
--libs [-L/usr/local/mysql/lib/mysql -lmysqlclient
-lpthread -lm -lrt -lssl -lcrypto -ldl]
--libs_r [-L/usr/local/mysql/lib/mysql -lmysqlclient_r
-lpthread -lm -lrt -lssl -lcrypto -ldl]
--plugindir [/usr/local/mysql/lib/plugin]
--socket [/tmp/mysql.sock]
--port [3306]
--version [5.8.0-m17]
--variable=VAR VAR is one of:
pkgincludedir [/usr/local/mysql/include]
pkglibdir [/usr/local/mysql/lib]
plugindir [/usr/local/mysql/lib/plugin]
你可以在命令行中使用反引号将[**mysql_config**](https://dev.mysql.com/doc/refman/8.0/en/mysql-config.html)
的特定选项输出包含在内。例如,要编译并链接一个MySQL客户端程序,可按如下方式使用[**mysql_config**](https://dev.mysql.com/doc/refman/8.0/en/mysql-config.html)
:
gcc -c `mysql_config --cflags` progname.c
gcc -o progname progname.o `mysql_config --libs`
6.7.2 my_print_defaults — 显示选项文件中的选项
my_print_defaults 会显示选项文件中选项组里存在的选项。输出内容表明了读取指定选项组的程序会使用哪些选项。例如,mysqlcheck 程序会读取 [mysqlcheck]
和 [client]
选项组。要查看标准选项文件中这些组里存在哪些选项,可按如下方式调用 my_print_defaults:
$> my_print_defaults mysqlcheck client
--user=myusername
--password=password
--host=localhost
输出由多个选项组成,每行一个,采用在命令行中指定选项的形式。
my_print_defaults支持以下选项。
-
--help
,-?
显示帮助信息并退出。显示帮助信息并退出。
-
--config-file=file_name
,--defaults-file=file_name
,-c file_name
仅读取给定的选项文件。
-
--debug=debug_options
,-# debug_options
编写调试日志。典型的
debug_options
字符串为d:t:o,file_name
。默认值为d:t:o,/tmp/my_print_defaults.trace
。 -
--defaults-extra-file=file_name
,--extra-file=file_name
,-e file_name
在全局选项文件之后读取此选项文件,但(在Unix系统上)要在用户选项文件之前读取。
有关此选项及其他选项文件选项的更多信息,请参阅 6.2.2.3 节“影响选项文件处理的命令行选项”。
-
--defaults-group-suffix=suffix
,-g suffix
除了命令行中指定的组之外,读取具有给定后缀的readgroup。
有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节,“影响选项文件处理的命令行选项”。
-
--login-path=name
,-l name
从
.mylogin.cnf
登录路径文件中指定的登录路径读取选项。“登录路径”是一个选项组,其中包含指定要连接到哪个MySQL服务器以及以哪个账户进行身份验证的选项。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。请参阅6.6.7节,“mysql_config_editor — MySQL配置实用程序”。有关此选项和其他选项文件选项的更多信息,请参阅 6.2.2.3 节“影响选项文件处理的命令行选项”。
-
--no-defaults
,-n
不读取默认选项文件,-n返回一个空字符串。
有关此选项和其他选项文件选项的更多信息,请参阅6.2.2.3节“影响选项文件处理的命令行选项”。
-
--show
,-s
--显示,-s默认情况下,my_print_defaults 会隐藏密码。使用此选项可将密码显示为明文。
-
--verbose
,-v
详细模式。打印有关程序执行情况的更多信息。
-
--version
,-V
:显示版本信息并退出。显示版本信息并退出。
6.8 其他程序
6.8.3 zlib_decompress — 解压缩mysqlpump的ZLIB压缩输出
6.8.1 lz4_decompress — 解压缩mysqlpump的LZ4压缩输出
lz4_decompress实用程序可解压缩使用LZ4压缩创建的mysqlpump输出。
注意
自MySQL 8.0.34起,lz4_decompress已被弃用;预计在MySQL的未来版本中将被移除。这是因为自MySQL 8.0.34起,相关的mysqlpump实用程序已被弃用。
注意
如果MySQL是使用-DWITH_LZ4=system
选项配置的,则不会构建lz4_decompress。在这种情况下,可以改用系统的 lz4 命令。
像这样调用 lz4_decompress:
lz4_decompress input_file output_file
示例:
mysqlpump --compress-output=LZ4 > dump.lz4
lz4_decompress dump.lz4 dump.txt
要查看帮助信息,不带任何参数调用 lz4_decompress。
要解压mysqlpump经ZLIB压缩的输出,请使用zlib_decompress。请参阅6.8.3节,“zlib_decompress — 解压mysqlpump经ZLIB压缩的输出”。
6.8.2 perror — 显示MySQL错误消息信息
perror 显示 MySQL 或操作系统错误代码的错误消息。按如下方式调用perror:
perror [options] errorcode ...
perror
函数在理解其参数时尽量保持灵活性。例如,对于ER_WRONG_VALUE_FOR_VAR
错误,perror
函数可以理解以下任何参数:1231
、001231
、MY-1231
、MY-001231
或ER_WRONG_VALUE_FOR_VAR
。
$> perror 1231
MySQL error code MY-001231 (ER_WRONG_VALUE_FOR_VAR): Variable '%-.64s'
can't be set to the value of '%-.200s'
如果错误编号处于MySQL错误和操作系统错误重叠的范围内,perror会显示这两种错误信息:
$> perror 1 13
OS error code 1: Operation not permitted
MySQL error code MY-000001: Can't create/write to file '%s' (OS errno %d - %s)
OS error code 13: Permission denied
MySQL error code MY-000013: Can't get stat of '%s' (OS errno %d - %s)
要获取MySQL Cluster错误代码的错误消息,请使用ndb_perror实用程序。
系统错误消息的含义可能取决于您的操作系统。给定的错误代码在不同的操作系统上可能有不同的含义。
perror 支持以下选项。
-
显示帮助信息并退出。
-
打印 MySQL 集群错误代码的错误消息。
此选项在 MySQL 8.0.13 中已移除。请改用ndb_perror实用程序。
-
--silent
,-s
--silent,-s静默模式。仅打印错误消息。
-
--verbose
,-v
详细模式。打印错误代码和消息。这是默认行为。
-
--version
,-V
显示版本信息并退出。
显示版本信息并退出。
6.8.3 zlib_decompress — 解压缩mysqlpump ZLIB压缩输出
zlib_decompress实用程序对使用ZLIB压缩创建的mysqlpump输出进行解压缩。
注意
自MySQL 8.0.34起,[**zlib_decompress**](https://dev.mysql.com/doc/refman/8.0/en/zlib-decompress.html)
已被弃用;预计在未来的MySQL版本中将移除该函数。这是因为自MySQL 8.0.34起,相关的[**mysqlpump**](https://dev.mysql.com/doc/refman/8.0/en/mysqlpump.html)
实用程序已被弃用。
注意
如果MySQL是使用-DWITH_ZLIB=system
选项配置的,则不会构建zlib_decompress。在这种情况下,可以改用系统的openssl zlib命令。
像这样调用 zlib_decompress:
zlib_decompress input_file output_file
示例:
mysqlpump --compress-output=ZLIB > dump.zlib
zlib_decompress dump.zlib dump.txt
要查看帮助信息,不带参数调用 zlib_decompress。
要解压缩经LZ4压缩的mysqlpump输出,请使用lz4_decompress。请参阅6.8.1节,“lz4_decompress — 解压缩经LZ4压缩的mysqlpump输出”。
6.9 环境变量
本节列出了MySQL直接或间接使用的环境变量。其中大多数也可以在本手册的其他地方找到。
命令行选项优先于选项文件和环境变量中指定的值,而选项文件中的值优先于环境变量中的值。在许多情况下,使用选项文件而不是环境变量来修改MySQL的行为更为可取。请参阅6.2.2.2节,“使用选项文件”。
变量 | 描述 |
---|---|
AUTHENTICATION_KERBEROS_CLIENT_LOG |
Kerberos身份验证日志记录级别。 |
AUTHENTICATION_LDAP_CLIENT_LOG |
客户端 LDAP 身份验证日志记录级别。 |
AUTHENTICATION_PAM_LOG |
PAM身份验证插件调试日志记录设置。 |
CC |
你的C编译器名称(用于运行CMake)。 |
CXX |
你的C++ 编译器的名称(用于运行CMake)。 |
CC |
你的C编译器的名称(用于运行CMake)。 |
DBI_USER |
Perl数据库接口(DBI)的默认用户名。 |
DBI_TRACE |
Perl DBI的跟踪选项。 |
HOME |
MySQL历史文件的默认路径是$HOME/.mysql_history。 |
LD_RUN_PATH |
用于指定libmysqlclient.so 的位置。 |
LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN |
启用 mysql_clear_password 身份验证插件;请参阅 8.4.1.4节,“客户端明文可插拔身份验证”。 |
LIBMYSQL_PLUGIN_DIR |
用于查找客户端插件的目录。 |
LIBMYSQL_PLUGINS |
要预加载的客户端插件。 |
MYSQL_DEBUG |
调试时的调试跟踪选项。 |
MYSQL_GROUP_SUFFIX |
选项组后缀值(如指定--defaults-group-suffix )。 |
MYSQL_HISTFILE |
mysql历史文件的路径。如果设置了此变量,其值将覆盖$HOME/.mysql_history 的默认值。 |
MYSQL_HISTIGNORE |
指定哪些语句 mysql 不应记录到 $HOME/.mysql_history 中的模式,或者如果给出了 --syslog ,则指定不应记录到 syslog 中的模式。 |
MYSQL_HOME |
服务器特定的my.cnf 文件所在目录的路径。 |
MYSQL_HOST |
“mysql命令行客户端使用的默认主机名。” |
MYSQL_OPENSSL_UDF_DH_BITS_THRESHOLD |
create_dh_parameters() 的最大密钥长度。请参阅“8.6.3节,‘MySQL Enterprise Encryption用法与示例’”。 |
MYSQL_OPENSSL_UDF_DSA_BITS_THRESHOLD |
create_asymmetric_priv_key() 函数支持的最大DSA密钥长度。请参阅 “8.6.3节,MySQL企业加密的使用和示例”。 |
MYSQL_OPENSSL_UDF_RSA_BITS_THRESHOLD |
create_asymmetric_priv_key() 函数的最大RSA密钥长度。请参阅“8.6.3节,‘MySQL企业加密用法和示例’”。 |
MYSQL_PS1 |
在mysql命令行客户端中使用的命令提示符。 |
MYSQL_PWD |
连接到mysqld时的默认密码。使用此密码不安全。请参阅表后的注释。 |
MYSQL_TCP_PORT |
默认的TCP/IP端口号。 |
MYSQL_TEST_LOGIN_FILE |
.mylogin.cnf 登录路径文件的名称。 |
MYSQL_TEST_TRACE_CRASH |
测试协议跟踪插件是否会导致客户端崩溃。请参阅下表注释。 |
MYSQL_TEST_TRACE_DEBUG |
测试协议跟踪插件是否生成输出。请参阅下表中的注释。 |
MYSQL_UNIX_PORT |
默认的Unix套接字文件名;用于连接到localhost 。 |
MYSQLX_TCP_PORT |
X插件默认的TCP/IP端口号。 |
MYSQLX_UNIX_PORT |
X插件默认的Unix套接字文件名;用于连接到localhost 。 |
NOTIFY_SOCKET |
mysqld 用于与 systemd 通信的套接字。 |
PATH |
由 shell 用于查找 MySQL 程序。 |
PKG_CONFIG_PATH |
mysqlclient.pc pkg-config文件的位置。请参阅表格后的注释。 |
TMPDIR |
创建临时文件的目录。 |
TZ |
这应设置为您的本地时区。请参阅B.3.3.7节“时区问题”。 |
UMASK |
创建文件时的用户文件创建模式。请参阅表后的注释。 |
UMASK_DIR |
创建目录时的用户目录创建模式。请参阅下表。 |
USER |
在Windows系统上连接mysqld时的默认用户名。 |
有关 mysql 历史文件的信息,请参阅6.5.1.3 节,“mysql 客户端日志记录”。
使用MYSQL_PWD
指定MySQL密码被认为是极不安全的,不应使用。某些版本的ps包含一个选项,用于显示正在运行的进程的环境。在某些系统上,如果你设置了MYSQL_PWD
,你的密码就会暴露给任何运行ps的其他用户。即使在没有此类版本ps的系统上,假定不存在用户可用来检查进程环境的其他方法也是不明智的。
自MySQL 8.0起,MYSQL_PWD
已被弃用;预计在MySQL未来版本中将被移除。
MYSQL_TEST_LOGIN_FILE
是登录路径文件(由mysql_config_editor创建的文件)的路径名。如果未设置,默认值在 Windows 上是 %APPDATA%\MySQL\.mylogin.cnf
目录,在非 Windows 系统上是 $HOME/.mylogin.cnf
。请参阅 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。
如果MySQL在构建时启用了测试协议跟踪客户端插件,MYSQL_TEST_TRACE_DEBUG
和MYSQL_TEST_TRACE_CRASH
变量将控制该插件。有关更多信息,请参阅使用测试协议跟踪插件。
默认的 UMASK
和 UMASK_DIR
值分别为 0640
和 0750
。MySQL 假定,如果 UMASK
或 UMASK_DIR
的值以零开头,则该值为八进制。例如,设置 UMASK=0600
等效于 UMASK=384
,因为八进制的 0600 等于十进制的 384。
UMASK
和UMASK_DIR
变量,尽管名称如此,但它们用作模式,而非掩码:
- 如果设置了
UMASK
,mysqld 会使用($UMASK | 0600)
作为文件创建模式,这样新创建的文件模式范围为 0600 到 0666(均为八进制值)。 - 如果设置了
UMASK_DIR
,mysqld会使用($UMASK_DIR |<br /> 0700)
作为创建目录的基本模式,然后将其与~(~$UMASK & 0666)
进行按位与运算,这样新创建的目录模式取值范围就在0700到0777之间(均为八进制值)。按位与运算可能会移除目录模式中的读和写权限,但不会移除执行权限。
另请参阅 B.3.3.1节,“文件权限问题”。
如果您使用 pkg-config 构建 MySQL 程序,可能需要设置 PKG_CONFIG_PATH
。请参阅 使用 pkg-config 构建 C API 客户端程序。
6.10 MySQL中的Unix信号处理
在Unix和类Unix系统上,进程可以接收由root
系统账户或拥有该进程的系统账户发送给它的信号。可以使用kill命令发送信号。一些命令解释器会将特定的按键序列与信号关联起来,例如按下Control+C组合键会发送一个SIGINT
信号。本节介绍MySQL服务器和客户端程序如何响应信号。
服务器对信号的响应
mysqld
对信号的响应如下:
-
SIGTERM
会导致服务器关闭。这类似于在无需连接到服务器的情况下执行SHUTDOWN
语句(对于关闭操作,需要一个拥有SHUTDOWN
权限的账户)。 -
SIGHUP
会导致服务器重新加载授权表,并刷新表、日志、线程缓存和主机缓存。这些操作类似于各种形式的FLUSH
语句。发送该信号可使刷新操作无需连接到服务器即可执行,而连接到服务器则需要一个拥有足以执行这些操作权限的 MySQL 账户。在 MySQL 8.0.20 之前,服务器还会以以下格式向错误日志写入状态报告:Status information: Current dir: /var/mysql/data/ Running threads: 4 Stack size: 262144 Current locks: lock: 0x7f742c02c0e0: lock: 0x2cee2a20: : lock: 0x207a080: Key caches: default Buffer_size: 8388608 Block_size: 1024 Division_limit: 100 Age_limit: 300 blocks used: 4 not flushed: 0 w_requests: 0 writes: 0 r_requests: 8 reads: 4 handler status: read_key: 13 read_next: 4 read_rnd 0 read_first: 13 write: 1 delete 0 update: 0 Table status: Opened tables: 121 Open tables: 114 Open files: 18 Open streams: 0 Memory status: <malloc version="1"> <heap nr="0"> <sizes> <size from="17" to="32" total="32" count="1"/> <size from="33" to="48" total="96" count="2"/> <size from="33" to="33" total="33" count="1"/> <size from="97" to="97" total="6014" count="62"/> <size from="113" to="113" total="904" count="8"/> <size from="193" to="193" total="193" count="1"/> <size from="241" to="241" total="241" count="1"/> <size from="609" to="609" total="609" count="1"/> <size from="16369" to="16369" total="49107" count="3"/> <size from="24529" to="24529" total="98116" count="4"/> <size from="32689" to="32689" total="32689" count="1"/> <unsorted from="241" to="7505" total="7746" count="2"/> </sizes> <total type="fast" count="3" size="128"/> <total type="rest" count="84" size="195652"/> <system type="current" size="690774016"/> <system type="max" size="690774016"/> <aspace type="total" size="690774016"/> <aspace type="mprotect" size="690774016"/> </heap> : <total type="fast" count="85" size="5520"/> <total type="rest" count="116" size="316820"/> <total type="mmap" count="82" size="939954176"/> <system type="current" size="695717888"/> <system type="max" size="695717888"/> <aspace type="total" size="695717888"/> <aspace type="mprotect" size="695717888"/> </malloc> Events status: LLA = Last Locked At LUA = Last Unlocked At WOC = Waiting On Condition DL = Data Locked Event scheduler status: State : INITIALIZED Thread id : 0 LLA : n/a:0 LUA : n/a:0 WOC : NO Workers : 0 Executed : 0 Data locked: NO Event queue status: Element count : 0 Data locked : NO Attempting lock : NO LLA : init_queue:95 LUA : init_queue:103 WOC : NO Next activation : never
-
从 MySQL 8.0.19 开始,
SIGUSR1
会使服务器刷新错误日志、通用查询日志和慢查询日志。SIGUSR1
的一个用途是在无需连接到服务器的情况下实现日志轮换,而连接到服务器则需要一个拥有足以执行这些操作权限的 MySQL 账户。有关日志轮换的信息,请参阅 7.4.6 节,“服务器日志维护”。服务器对
SIGUSR1
的响应是对SIGHUP
响应的一个子集,这使得SIGUSR1
可用作一种更 “轻量级” 的信号,它可以刷新某些日志,而不会产生其他SIGHUP
效应,比如刷新线程和主机缓存以及将状态报告写入错误日志。 -
SIGINT
通常会被服务器忽略。使用--gdb
选项启动服务器会为SIGINT
安装一个中断处理程序,用于调试目的。请参阅 7.9.1.4 节,“在 gdb 下调试 mysqld”。
客户端对信号的响应
MySQL客户端程序对信号的响应如下:
mysql
客户端将SIGINT
(通常是按下Control+C
的结果)解释为:如果当前有语句正在执行,则中断该语句;否则取消任何部分输入行。可以使用--sigint-ignore
选项来禁用此行为,以忽略SIGINT
信号。- 使用MySQL客户端库的客户端程序默认会阻塞
SIGPIPE
信号。可能存在以下几种变化情况:- 客户端可以安装自己的
SIGPIPE
处理程序来覆盖默认行为。请参阅 编写C API多线程客户端程序。 - 客户端可以在连接时通过向
mysql_real_connect()
指定CLIENT_IGNORE_SIGPIPE
选项,来阻止安装SIGPIPE
处理程序。另见 mysql_real_connect()。
- 客户端可以安装自己的