本节介绍大多数 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]
类型 字符串 默认值 [无]
用于连接到服务器的 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
命令行格式 --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
类型 字符串 默认值 [参见文本]
有效值 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 --shared-memory-base-name=
name
命令行格式 --shared-memory-base-name=name
平台特定 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 登录名。
本节介绍用于客户端程序的选项,这些选项指定是否使用加密连接到服务器,证书和密钥文件的名称以及与加密连接支持相关的其他参数。有关建议使用情况以及如何检查连接是否已加密的示例,请参见 第 8.3.1 节,“配置 MySQL 使用加密连接”。
这些选项仅对使用易受加密影响的传输协议的连接有效;也就是说,TCP/IP 和 Unix 套接字文件连接。参见 第 6.2.7 节,“连接传输协议”
有关从 MySQL C 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 节,“缓存 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
。此选项仅在使用 OpenSSL 构建 MySQL 时才可用。
有关
sha256_password
(已弃用)和caching_sha2_password
插件的信息,请参见 第 8.4.1.3 节,“SHA-256 可插拔身份验证” 和 第 8.4.1.2 节,“缓存 SHA-2 可插拔身份验证”。-
命令行格式 --ssl-ca=file_name
类型 文件名 PEM 格式的证书颁发机构 (CA) 证书文件的路径名。该文件包含受信任 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
类型 文件名 PEM 格式的客户端 SSL 公钥证书文件的路径名。支持链接的 SSL 证书。
要指定服务器 SSL 公钥证书文件,请设置
ssl_cert
系统变量。 -
命令行格式 --ssl-cipher=name
类型 字符串 使用 TLS 协议(直至 TLSv1.2)的连接的允许加密密码列表。如果列表中没有支持的密码,则使用这些 TLS 协议的加密连接将无法正常工作。
为了最大程度地提高可移植性,
cipher_list
应该是一个或多个密码名称的列表,用冒号分隔。示例--ssl-cipher=AES128-SHA --ssl-cipher=DHE-RSA-AES128-GCM-SHA256:AES128-SHA
OpenSSL 支持在 OpenSSL 文档中描述的指定密码的语法,请参见 https://www.openssl.org/docs/manmaster/man1/ciphers.html。
有关 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}
命令行格式 --ssl-fips-mode={OFF|ON|STRICT}
已弃用 是 类型 枚举 默认值 关闭
有效值 关闭
打开
严格
控制是否在客户端启用 FIPS 模式。
--ssl-fips-mode
选项与其他--ssl-
选项不同,因为它不用于建立加密连接,而是用于影响允许哪些加密操作。请参见 第 8.8 节“FIPS 支持”。xxx
这些
--ssl-fips-mode
值是允许的关闭
: 禁用 FIPS 模式。打开
: 启用 FIPS 模式。严格
: 启用 “严格” FIPS 模式。
注意如果 OpenSSL FIPS 对象模块不可用,则
--ssl-fips-mode
唯一允许的值是关闭
。在这种情况下,将--ssl-fips-mode
设置为打开
或严格
会导致客户端在启动时产生警告并在非 FIPS 模式下运行。要指定服务器的 FIPS 模式,请设置
ssl_fips_mode
系统变量。-
命令行格式 --ssl-key=file_name
类型 文件名 客户端 SSL 私钥文件的路径名,采用 PEM 格式。为了更好的安全性,请使用至少 2048 位 RSA 密钥的证书。
如果密钥文件受密码保护,客户端程序会提示用户输入密码。密码必须通过交互方式输入;不能存储在文件中。如果密码不正确,程序会继续运行,就好像它无法读取密钥一样。
要指定服务器 SSL 私钥文件,请设置
ssl_key
系统变量。 -
命令行格式 --ssl-mode=mode
类型 枚举 默认值 首选
有效值 禁用
首选
必需
验证 CA
验证身份
此选项指定与服务器连接的所需安全状态。这些模式值是允许的,按严格程度递增排序
禁用
: 建立未加密的连接。首选
: 如果服务器支持加密连接,则建立加密连接,如果无法建立加密连接,则回退到未加密连接。如果未指定--ssl-mode
,这是默认设置。通过 Unix 套接字文件的连接不会使用
首选
模式加密。要强制对 Unix 套接字文件连接进行加密,请使用必需
模式或更严格的模式。(但是,套接字文件传输默认情况下是安全的,因此加密套接字文件连接不会使其更安全,并且会增加 CPU 负载。)必需
: 如果服务器支持加密连接,则建立加密连接。如果无法建立加密连接,则连接尝试将失败。验证 CA
: 类似于必需
,但此外还会根据配置的 CA 证书验证服务器证书颁发机构 (CA) 证书。如果未找到有效的匹配 CA 证书,则连接尝试将失败。验证身份
: 类似于验证 CA
,但此外还会通过检查客户端用于连接到服务器的主机名与服务器发送给客户端的证书中的身份是否匹配来执行主机名身份验证如果客户端使用 OpenSSL 1.0.2 或更高版本,则客户端会检查它用于连接的主机名是否与服务器证书中的主题备用名称值或通用名称值匹配。主机名身份验证也适用于使用通配符指定通用名称的证书。
否则,客户端会检查它用于连接的主机名是否与服务器证书中的通用名称值匹配。
如果存在不匹配,则连接将失败。对于加密连接,此选项有助于防止中间人攻击。
注意使用
验证身份
进行的主机名身份验证不适用于服务器自动创建的自签名证书(请参见 第 8.3.3.1 节“使用 MySQL 创建 SSL 和 RSA 证书和密钥”)。此类自签名证书不包含服务器名称作为通用名称值。
重要默认设置
--ssl-mode=首选
会在其他默认设置不变的情况下产生加密连接。但是,为了帮助防止复杂的中间人攻击,客户端验证服务器身份非常重要。设置--ssl-mode=验证 CA
和--ssl-mode=验证身份
比默认设置更能帮助防止这种类型的攻击。要实现其中一个设置,您必须首先确保服务器的 CA 证书可以可靠地提供给使用它的所有客户端,否则可用性问题将导致结果。出于这个原因,它们不是默认设置。--ssl-mode
选项与 CA 证书选项之间的交互方式如下如果未显式设置
--ssl-mode
,则使用--ssl-ca
或--ssl-capath
意味着--ssl-mode=验证 CA
。对于
--ssl-mode
的值验证 CA
或验证身份
,还需要--ssl-ca
或--ssl-capath
,以提供与服务器使用的 CA 证书匹配的 CA 证书。显式的
--ssl-mode
选项(值为验证 CA
或验证身份
以外的值),以及显式的--ssl-ca
或--ssl-capath
选项,会导致产生警告,指出未执行服务器证书验证,尽管指定了 CA 证书选项。
要要求 MySQL 帐户使用加密连接,请使用
CREATE USER
创建带有REQUIRE SSL
子句的帐户,或使用ALTER USER
为现有帐户添加REQUIRE SSL
子句。这会导致使用该帐户的客户端的连接尝试被拒绝,除非 MySQL 支持加密连接并且可以建立加密连接。REQUIRE
子句允许使用其他加密相关选项,这些选项可用于强制执行比REQUIRE SSL
更严格的安全要求。有关使用配置了各种REQUIRE
选项的帐户连接的客户端可能或必须指定哪些命令选项的更多详细信息,请参见 CREATE USER SSL/TLS 选项。 -
命令行格式 --ssl-session-data=file_name
类型 文件名 用于会话重用的客户端 SSL 会话数据文件的路径名,采用 PEM 格式。
使用
--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-session-data-continue-on-failed-reuse
类型 布尔值 默认值 关闭
控制是否启动新的连接来替换尝试过但未能重用使用
--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
类型 字符串 默认值 空字符串
此选项指定客户端允许使用 TLSv1.3 的加密连接使用哪些密码套件。该值是零个或多个以冒号分隔的密码套件名称的列表。例如
mysql --tls-ciphersuites="suite1:suite2:suite3"
可以为此选项命名的密码套件取决于用于编译 MySQL 的 SSL 库。如果未设置此选项,则客户端允许使用默认的密码套件集。如果将该选项设置为空字符串,则不会启用任何密码套件,并且无法建立加密连接。有关更多信息,请参见 第 8.3.2 节“加密连接 TLS 协议和密码”。
要指定服务器允许哪些密码套件,请设置
tls_ciphersuites
系统变量。-
命令行格式 --tls-version=protocol_list
类型 字符串 默认值 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 Server 版本。
重要支持
--tls-version
选项的客户端(包括 MySQL Shell)无法与协议设置为 TLSv1 或 TLSv1.1 的服务器建立 TLS/SSL 连接。如果客户端尝试使用这些协议连接,则对于 TCP 连接,连接将失败,并且会将错误返回给客户端。对于套接字连接,如果将--ssl-mode
设置为必需
,则连接将失败,否则连接将建立,但 TLS/SSL 将被禁用。有关更多信息,请参见 对 TLSv1 和 TLSv1.1 协议的支持移除。MySQL 服务器支持 TLSv1.3 协议,前提是 MySQL 服务器使用 OpenSSL 1.1.1 或更高版本编译。服务器在启动时会检查 OpenSSL 的版本,如果低于 1.1.1,则会从与 TLS 版本相关的服务器系统变量的默认值中移除 TLSv1.3(例如,
tls_version
系统变量)。
应选择允许的协议,使其在列表中不留“漏洞”。例如,以下值没有漏洞
--tls-version="TLSv1.2,TLSv1.3" --tls-version="TLSv1.3"
有关详细信息,请参阅 第 8.3.2 节,“加密连接 TLS 协议和密码”。
要指定服务器允许的 TLS 协议,请设置
tls_version
系统变量。
本节介绍允许客户端程序控制与服务器连接压缩使用的选项。有关更多信息和使用示例,请参阅 第 6.2.8 节,“连接压缩控制”。
表 6.6 连接压缩选项摘要
选项名称 | 描述 |
---|---|
--compress | 压缩客户端和服务器之间发送的所有信息 |
--compression-algorithms | 与服务器连接的允许压缩算法 |
--zstd-compression-level | 使用 zstd 压缩的与服务器连接的压缩级别 |
--compress
,-C
命令行格式 --compress[={OFF|ON}]
已弃用 是 类型 布尔值 默认值 关闭
如果可能,压缩客户端和服务器之间发送的所有信息。
此选项已弃用。预计将在未来版本的 MySQL 中删除。请参阅 配置传统连接压缩。
--compression-algorithms=
value
命令行格式 --compression-algorithms=value
类型 设置 默认值 uncompressed
有效值 zlib
zstd
uncompressed
与服务器连接的允许压缩算法。可用算法与
protocol_compression_algorithms
系统变量相同。默认值为uncompressed
。--zstd-compression-level=
level
命令行格式 --zstd-compression-level=#
类型 整数 对使用
zstd
压缩算法的与服务器连接使用的压缩级别。允许的级别为 1 到 22,值越大表示压缩级别越高。默认zstd
压缩级别为 3。压缩级别设置对不使用zstd
压缩的连接没有影响。