6.2.3 连接到服务器的命令选项
本节描述了大多数 MySQL 客户端程序支持的连接选项,控制客户端程序如何连接到服务器,是否加密连接和是否压缩连接。这些选项可以在命令行或配置文件中指定。
本节描述了客户端程序如何连接到服务器的选项。关于它们的使用方法和示例,见第6.2.4节,“使用命令选项连接 MySQL 服务器”。
表6.4 连接建立选项总结
Option Name | Description |
---|---|
--default-auth |
使用的身份验证插件 |
--host |
MySQL 服务器所在主机 |
--password |
连接到服务器时使用的密码 |
--password1 | 连接到服务器时使用的第一个多因素身份验证密码 |
--password2 | 连接到服务器时使用的第二个多因素身份验证密码 |
--password3 | 连接到服务器时使用的第三个多因素身份验证密码 |
--pipe | 使用命名管道(Windows-only)连接到服务器 |
--plugin-dir | 插件安装目录 |
--port | TCP/IP连接端口号 |
--protocol | 使用的传输协议 |
--shared-memory-base-name | 共享内存名称(Windows-only) |
--socket | 使用的Unix套接字文件或Windows命名管道 |
--user | 连接到服务器时使用的MySQL用户名 |
-
Command-Line Format --default-auth=plugin
Type 字符串 关于使用哪个客户端身份验证插件的提示。见第8.2.17节,“可插拔身份验证”。
-
--host=
,host_name
-h
host_name
Command-Line Format --host=host_name
Type 字符串 Default Value localhost
MySQL 服务器正在运行的主机。该值可以是主机名、IPv4 地址或 IPv6 地址。默认值为
localhost
。 -
--password[=
,pass_val
]-p[
pass_val
]Command-Line Format --password[=password]
Type 字符串 Default Value [none]
连接到服务器的 MySQL 账户的密码。密码值可选。如果不给出,客户端程序将提示输入。如果给出,必须在
--password=
或-p
和后面的密码之间没有空格。如果不指定密码选项,默认情况下不发送密码。在命令行指定密码应该被认为是不安全的。为了避免将密码写入命令行,使用选项文件。见第8.1.2.1节,“用户密码安全指南”。
要明确指定没有密码且客户端程序不提示输入,使用
--skip-password
选项。 -
Command-Line Format --password1[=password]
Type String 用于多因素身份验证的MySQL账户连接到服务器时的密码。密码值是可选的。如果不给出,客户端程序将提示输入。如果给出,必须在
--password1=
和后面的密码之间没有空格。如果不指定密码选项,默认情况下将不发送密码。在命令行指定密码应该被认为是不安全的。为了避免将密码写入命令行,使用选项文件。见第8.1.2.1节,“用户密码安全指南”。
要明确指定没有密码且客户端程序不提示输入,使用
--skip-password1
选项。--password1
和--password
是同义词,类似地--skip-password1
和--skip-password
. -
Command-Line Format --password2[=密码]
Type 字符串 用于连接到服务器的 MySQL 账户的多因素身份验证因子 2 的密码。该选项的语义与
--password1
的语义相似,详见该选项的描述。 -
Command-Line Format --password3[=密码]
Type 字符串 用于连接到服务器的 MySQL 账户的多因素身份验证因子 3 的密码。该选项的语义与
--password1
的语义相似,详见该选项的描述。 -
--pipe
,-W
Command-Line Format --pipe
Type String 在 Windows 上,使用命名管道连接到服务器。这选项仅适用于服务器启用了
named_pipe
系统变量以支持命名管道连接。此外,建立连接的用户必须是由named_pipe_full_access_group
系统变量指定的 Windows 组。 -
Command-Line Format --plugin-dir=dir_name
Type 目录名称 指定插件所在的目录。如果使用
--default-auth
选项指定了身份验证插件,但客户端程序找不到它。请参阅第8.2.17节,“可插拔身份验证”。 -
--port=
,port_num
-P
port_num
Command-Line Format --port=port_num
Type 数字 Default Value 3306
对于 TCP/IP 连接,使用的端口号,默认端口号是 3306。
-
--protocol={TCP|SOCKET|PIPE|MEMORY}
Command-Line Format --protocol=type
Type 字符串 Default Value [see text]
Valid Values TCP
SOCKET
PIPE
MEMORY
这个选项明确指定连接到服务器时使用的传输协议。它在其他连接参数通常导致使用不同协议的情况下非常有用。例如,连接到
localhost
的 Unix 客户端默认使用 Unix 套接字文件:mysql --host=localhost
要强制使用 TCP/IP 传输协议,可以指定一个
--protocol
选项:mysql --host=localhost --protocol=TCP
以下表格显示了可允许的
--protocol
选项值,并且指示每个值适用的平台。这些值不区分大小写。--protocol
ValueTransport Protocol Used Applicable Platforms TCP
TCP/IP 传输到本地或远程服务器 所有 SOCKET
Unix 套接字文件传输到本地服务器 Unix 和 Unix 类似系统 PIPE
本地服务器的命名管道传输 Windows MEMORY
本地服务器的共享内存传输 Windows -
--shared-memory-base-name=
name
Command-Line Format --shared-memory-base-name=name
Platform Specific Windows 在 Windows 上,使用共享内存连接到本地服务器的共享内存名称。默认值为
MYSQL
。共享内存名称是大小写敏感的。只有当服务器以启用支持共享内存连接时,才应用这个选项。
-
--socket=
,path
-S
path
Command-Line Format --socket={file_name|pipe_name}
Type 字符串 在 Unix 上,使用命名管道连接到本地服务器的 Unix 套接字文件名称。默认 Unix 套接字文件名称为
/tmp/mysql.sock
。在 Windows 上,使用连接到本地服务器的命名管道名称。默认 Windows 管道名称为
MySQL
。管道名称不区分大小写。在 Windows 上,这个选项仅适用于服务器以启用
named_pipe
系统变量来支持命名管道连接。另外,建立连接的用户必须是由named_pipe_full_access_group
系统变量指定的 Windows 组成员。 -
--user=
,user_name
-u
user_name
Command-Line Format --user=user_name
Type String 连接到服务器的 MySQL 账户用户名。默认用户名是 Windows 上的
ODBC
或 Unix 上的 Unix 登录名。
本节描述了客户端程序是否使用加密连接到服务器、证书和密钥文件名称等加密连接支持相关参数的选项。关于示例用法和检查连接是否加密的信息,请参见第8.3.1节,“使用加密连接”。
这些选项只对使用加密传输协议的连接有效,即TCP/IP和Unix socket-file连接。见第6.2.7节,“连接传输协议”
关于使用MySQL C API加密连接,请见支持加密连接
表6.5 连接加密选项总结
Option Name | Description |
---|---|
--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协议 |
-
Command-Line Format --get-server-public-key
Type 布尔值 从服务器请求用于RSA密钥对基于密码交换的公钥。这选项适用于使用
caching_sha2_password
认证插件的客户端。对于该插件,服务器除非被请求,不会发送公钥。这选项忽略了不使用该插件认证的账户,也忽略了在安全连接中使用RSA密码交换的情况。如果指定了
--server-public-key-path=
,并且指定了有效的公钥文件,那么它将优先于file_name
--get-server-public-key
。关于
caching_sha2_password
插件的信息,请参见第8.4.1.2节,“Caching SHA-2 Pluggable Authentication”。 -
--server-public-key-path=
file_name
Command-Line Format --server-public-key-path=file_name
Type 文件名 客户端文件路径,包含服务器要求的RSA密钥对密码交换所需的公钥副本。该选项适用于使用
sha256_password
或caching_sha2_password
认证插件的客户端。这一选项对于不使用RSA-based密码交换的客户端无效,例如使用安全连接时。如果指定了
--server-public-key-path=
,并且指定了有效的公钥文件,那么它将优先于file_name
--get-server-public-key
。该选项仅在使用 OpenSSL 构建 MySQL 时可用。
关于
sha256_password
和caching_sha2_password
插件的信息,请参见第8.4.1.3节,“SHA-256 可插拔认证”,和第8.4.1.2节,“Caching SHA-2 可插拔认证”。 -
Command-Line Format --ssl-ca=file_name
Type 文件名 PEM格式的证书授权机构(CA)文件路径名。该文件包含了可信任的SSL证书授权机构列表。
在建立加密连接到服务器时,指定不使用
--ssl-ca
或--ssl-capath
,服务器仍然根据客户端账户的任何适用要求验证客户端,并且仍然使用服务器端指定的ssl_ca
或ssl_capath
系统变量值。为服务器指定CA文件,设置
ssl_ca
系统变量。 -
Command-Line Format --ssl-capath=dir_name
Type 目录名 包含PEM格式SSL证书授权机构(CA)文件的目录路径名。
在建立加密连接到服务器时,客户端不验证服务器证书,可以不指定
--ssl-ca
或--ssl-capath
。服务器仍然根据客户端账户的任何适用要求验证客户端,并且仍然使用服务器端指定的ssl_ca
或ssl_capath
系统变量值。要指定服务器CA目录,设置
ssl_capath
系统变量。 -
Command-Line Format --ssl-cert=file_name
Type 文件名 客户端SSL公共密钥证书文件的路径名,支持链式SSL证书。
要指定服务器SSL公共密钥证书文件,设置
ssl_cert
系统变量。 -
Command-Line Format --ssl-cipher=name
Type 字符串 TLSv1.2 协议连接的加密cipher列表。如果列表中没有支持的cipher,使用这些TLS协议的加密连接将不工作。
为了最大化可移植性,
cipher_list
应该是一个或多个cipher名称,使用冒号分隔。示例:--ssl-cipher=AES128-SHA --ssl-cipher=DHE-RSA-AES128-GCM-SHA256:AES128-SHA
OpenSSL 文档中描述的加密cipher语法在https://www.openssl.org/docs/manmaster/man1/ciphers.html 中有描述。
关于 MySQL 支持的加密cipher信息,见第8.3.2节,“加密连接 TLS 协议和cipher”。
要指定服务器的加密cipher,设置
ssl_cipher
系统变量。 -
Command-Line Format --ssl-crl=file_name
Type 文件名 包含 PEM 格式证书撤销列表的文件路径名。
如果既没有
--ssl-crl
也没有--ssl-crlpath
,即使 CA 路径包含证书撤销列表,也不执行 CRL 检查。为服务器指定撤销列表文件,设置
ssl_crl
系统变量。 -
Command-Line Format --ssl-crlpath=dir_name
Type 目录名称 包含PEM格式证书撤销列表文件的目录路径。
如果既没有
--ssl-crl
也没有--ssl-crlpath
,即使CA路径包含证书撤销列表,也不执行CRL检查。为服务器指定撤销目录,设置
ssl_crlpath
系统变量。 -
--ssl-fips-mode={OFF|ON|STRICT}
Command-Line Format --ssl-fips-mode={OFF|ON|STRICT}
Deprecated 是 Type 枚举值 Default Value OFF
Valid Values OFF
ON
STRICT
控制客户端是否启用FIPS模式。与其他
--ssl-
选项不同的是,xxx
--ssl-fips-mode
选项不是用来建立加密连接,而是影响哪些加密操作被允许。见第8.8节,“FIPS支持”。这些
--ssl-fips-mode
值是允许的:-
OFF
: 禁用FIPS模式。 -
ON
: 启用FIPS模式。 -
STRICT
: 启用“严格”FIPS模式。
Note如果OpenSSL FIPS Object Module不可用,那么
--ssl-fips-mode
的唯一允许值是OFF
。在这种情况下,设置--ssl-fips-mode
到ON
或STRICT
将导致客户端在启动时产生警告,并且以非FIPS模式操作。要指定服务器的FIPS模式,设置
ssl_fips_mode
系统变量。 -
-
Command-Line Format --ssl-key=file_name
Type 文件名 客户端 SSL 私钥文件的路径名称,以 PEM 格式。为了更好的安全性,使用 RSA 密钥大小至少 2048 位的证书。
如果密钥文件被保护密码,客户程序将提示用户输入密码。密码不能存储在文件中。如果密码错误,程序继续像无法读取密钥一样。
要指定服务器 SSL 私钥文件,设置
ssl_key
系统变量。 -
Command-Line Format --ssl-mode=mode
Type 枚举值 Default Value PREFERRED
Valid Values DISABLED
PREFERRED
REQUIRED
VERIFY_CA
VERIFY_IDENTITY
这个选项指定了连接到服务器的安全状态。这些模式值按严格性递增排序:
-
DISABLED
:建立未加密连接。 -
PREFERRED
: 如果服务器支持加密连接,建立加密连接;否则,建立非加密连接。如果没有指定--ssl-mode
,这是默认值。Unix socket 文件连接不使用
PREFERRED
模式。要强制加密 Unix socket 文件连接,使用REQUIRED
或更严格的模式(然而,socket 文件传输是默认安全的,所以加密 socket 文件连接并不会增加安全性,反而会增加 CPU 负载)。 -
REQUIRED
: 如果服务器支持加密连接,建立加密连接;否则,连接尝试失败。 -
VERIFY_CA
: 和REQUIRED
类似,但还会验证服务器证书颁发机构(CA)证书是否与配置的 CA 证书相匹配。连接尝试失败如果找不到有效的匹配 CA 证书。 -
VERIFY_IDENTITY
: 和VERIFY_CA
类似,但还会对客户端用于连接服务器的主机名进行身份验证,检查客户端用于连接的主机名是否与服务器发送给客户端的证书中的身份相匹配:-
如果客户端使用 OpenSSL 1.0.2 或更高版本,客户端会检查客户端用于连接的主机名是否与服务器证书中的主体备用名称值或常见名称值相匹配。主机名身份验证也可以与指定通配符的常见名称值一起工作。
-
否则,客户端检查它用于连接的主机名是否与服务器证书中的常用名称值匹配。
如果不匹配,连接将失败。对于加密连接,这个选项可以防止中间人攻击。
Note使用
VERIFY_IDENTITY
的主机名身份验证不工作于服务器自动创建的自签名证书(见第8.3.3.1节,“使用 MySQL 创建 SSL 和 RSA 证书和密钥”)。这些自签名证书不包含服务器名称作为常用名称值。 -
Important默认设置
--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 选项配置账户的客户端必须指定哪些命令选项,见CREATE USER SSL/TLS 选项。
-
-
Command-Line Format --ssl-session-data=file_name
Type 文件名 客户端 SSL 会话数据文件的路径名称,用于会话重用,格式为 PEM。
当您使用 MySQL 客户端程序时,带有
--ssl-session-data
选项,客户端将尝试从文件中反序列化会话数据,如果提供了文件,然后使用它来建立新的连接。如果您提供了文件,但会话不被重用,那么连接将失败,除非在调用客户端程序时也指定了--ssl-session-data-continue-on-failed-reuse
选项。命令mysql(见第6.5.1.2节,“mysql 客户端命令”)
ssl_session_data_print
生成会话数据文件(见第6.5.1.2节,“mysql 客户端命令”)。 -
ssl-session-data-continue-on-failed-reuse
Command-Line Format --ssl-session-data-continue-on-failed-reuse
Type 布尔值 Default Value OFF
控制是否启动一个新的连接来替换尝试重新使用会话数据的连接,该连接之前尝试了但失败了使用
--ssl-session-data
命令行选项指定的会话数据。默认情况下,--ssl-session-data-continue-on-failed-reuse
命令行选项是关闭的,这样客户端程序将在会话数据不被重新使用时返回连接失败。为了确保在会话重用失败后打开一个新的、无关联的连接,invoke MySQL 客户端程序同时使用
--ssl-session-data
和--ssl-session-data-continue-on-failed-reuse
命令行选项。 -
--tls-ciphersuites=
ciphersuite_list
Command-Line Format --tls-ciphersuites=ciphersuite_list
Type String Default Value empty string
这个选项指定了客户端允许的加密连接使用 TLSv1.3 的 ciphersuites。值是一个或多个以冒号分隔的 ciphersuite 名称,例如:
mysql --tls-ciphersuites="suite1:suite2:suite3"
该选项的加密套件名称取决于用于编译 MySQL 的 SSL 库。如果不设置该选项,客户端允许默认的加密套件集。如果将该选项设置为空字符串,则无法建立加密连接。更多信息,请见第8.3.2节,“加密连接 TLS 协议和加密套件”。
要指定服务器允许的加密套件,设置
tls_ciphersuites
系统变量。 -
Command-Line Format --tls-version=protocol_list
Type 字符串 Default Value TLSv1,TLSv1.1,TLSv1.2,TLSv1.3
(OpenSSL 1.1.1 或更高版本)TLSv1,TLSv1.1,TLSv1.2
(否则)该选项指定客户端允许的加密连接 TLS 协议。值是一个或多个逗号分隔的协议版本列表,例如:
mysql --tls-version="TLSv1.2,TLSv1.3"
可以为该选项命名的协议取决于用于编译 MySQL 的 SSL 库,以及 MySQL 服务器版本。
Important-
支持TLS/SSL连接的客户端,包括 MySQL Shell,如果设置了
--tls-version
选项,则不能使用 TLSv1 或 TLSv1.1 协议。如果客户端尝试使用这些协议,TCP 连接将失败,并返回错误;对于 socket 连接,如果设置了--ssl-mode
为REQUIRED
,连接失败;否则,连接建立,但 TLS/SSL disabled。详见TLSv1 和 TLSv1.1 协议的支持移除。 -
MySQL 服务器支持 TLSv1.3 协议,条件是 MySQL 服务器使用 OpenSSL 1.1.1 或更高版本编译。服务器在启动时检查 OpenSSL 版本,如果低于 1.1.1,TLSv1.3 将从默认值中移除与 TLS 版本相关的服务器系统变量(例如
tls_version
系统变量)。
允许的协议应该选择不留下“空隙”。例如,这些值没有空隙:
--tls-version="TLSv1.2,TLSv1.3" --tls-version="TLSv1.3"
详见第 8.3.2 节,“加密连接 TLS 协议和加密方式”。
要指定服务器允许的TLS协议,设置
tls_version
系统变量。 -
本节描述了客户端程序控制连接到服务器的压缩选项。关于如何使用它们的详细信息和示例,请参见第6.2.8节,“连接压缩控制”。
表6.6 连接压缩选项总结
Option Name | Description |
---|---|
--compress | 客户端和服务器之间发送所有信息 |
--compression-algorithms | 连接到服务器的允许压缩算法 |
--zstd-compression-level | 使用zstd压缩的连接服务器的压缩级别 |
-
--compress
,-C
Command-Line Format --compress[={OFF|ON}]
Deprecated 是 Type 布尔值 Default Value OFF
如果可能,压缩客户端和服务器之间发送的所有信息。
这个选项已经废弃。预计将在 MySQL 的未来版本中删除。请参阅配置遗留连接压缩。
-
--compression-algorithms=
value
Command-Line Format --compression-algorithms=value
Type 设置 Default Value 不压缩
Valid Values zlib
zstd
不压缩
服务器连接的允许压缩算法。可用的算法与
protocol_compression_algorithms
系统变量相同。默认值为不压缩
。 -
--zstd-compression-level=
level
Command-Line Format --zstd-compression-level=#
Type 整数 用于连接到服务器的压缩级别,使用
zstd
压缩算法。允许的级别从1到22,较大的值表示更高的压缩级别。默认的zstd
压缩级别是3。没有使用zstd
压缩的连接设置压缩级别无效。