MySQL程序之:连接到服务器的命令选项
本节介绍大多数MySQL客户端程序支持的选项,这些选项控制客户端程序如何建立与服务器的连接、连接是否加密以及连接是否压缩。这些选项可以在命令行或选项文件中给出。
连接建立的命令选项
本节介绍控制客户端程序如何建立与服务器的连接的选项。
表6.4连接建立选项摘要
选项名称 | 描述 |
---|---|
--default-auth | Authentication plugin to use |
--host | Host on which MySQL server is located |
--password | Password to use when connecting to server |
--password1 | First multifactor authentication password to use when connecting to server |
--password2 | Second multifactor authentication password to use when connecting to server |
--password3 | Third multifactor authentication password to use when connecting to server |
--pipe | Connect to server using named pipe (Windows only) |
--plugin-dir | Directory where plugins are installed |
--port | TCP/IP port number for connection |
--protocol | Transport protocol to use |
--shared-memory-base-name | Shared-memory name for shared-memory connections (Windows only) |
--socket | Unix socket file or Windows named pipe to use |
--user | MySQL user name to use when connecting to server |
--default-auth=plugin
命令行格式 | --default-auth=plugin |
---|---|
类型 | 字符串 |
--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与其后面的密码之间不能有空格。如果没有指定密码选项,则默认为不发送密码。
在命令行上指定密码应该被认为是不安全的。为避免在命令行上提供密码,请使用选项文件。
要显式指定没有密码并且客户端程序不应提示输入密码,请使用--skip-password选项。
--password1[=pass_val]
命令行格式 | --password1[=password] |
---|---|
键入 | 字符串 |
用于连接到服务器的MySQL帐户的多因素鉴权因子1的密码。密码值是可选的。如果没有给出,客户端程序会提示输入一个。如果给出,--password1=和后面的密码之间必须没有空格。如果没有指定密码选项,默认是不发送密码。
在命令行上指定密码应该被认为是不安全的。为避免在命令行上提供密码,请使用选项文件。
要显式指定没有密码并且客户端程序不应提示输入密码,请使用--skip-password1选项。
--password1和--password是同义词,--skip-password1和--skip-password也是同义词。
--password2[=pass_val]
命令行格式 | --password2[=password] |
---|---|
键入 | 字符串 |
用于连接到服务器的MySQL帐户的多因素身份验证因子2的密码。此选项的语义学类似于--password1的语义学;有关详细信息,请参阅该选项的描述。
--password3[=pass_val]
命令行格式 | --password3[=password] |
---|---|
键入 | 字符串 |
用于连接服务器的MySQL帐户的多因素鉴权因子3的密码。此选项的语义学类似于--password1的语义学;有关详细信息,请参阅该选项的描述。
--pipe, -W
命令行格式 | --pipe |
---|---|
类型 | 字符串 |
在Windows上,使用命名管道连接到服务器。此选项仅在启动服务器时启用named_pipe系统变量以支持命名管道连接时适用。此外,建立连接的用户必须是named_pipe_full_access_group系统变量指定的Windows组的成员。
--plugin-dir=dir_name
命令行格式 | --plugin-dir=dir_name |
---|---|
类型 | 目录名称 |
查找插件的目录。如果--default-auth选项用于指定鉴权插件,但客户端程序找不到它,请指定此选项。
--port=port_num, -P
port_num
命令行格式 | --port=port_num |
---|---|
类型 | 数字 |
默认值 | 3306 |
-
对于TCP/IP连接,要使用的端口号。默认端口号为3306。
--protocol={TCP|SOCKET|PIPE|MEMORY}
命令行格式 | --protocol=type |
---|---|
类型 | String |
默认值 | [see text] |
有效值 |
|
此选项明确指定用于连接到服务器的传输协议。当其他连接参数通常导致使用您想要的协议以外的协议时,它很有用。例如,在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登录名。
加密连接的命令选项
本节介绍客户端程序的选项,这些选项指定是否使用到服务器的加密连接、证书和密钥文件的名称以及与encrypted-connection支持相关的其他参数。
注:这些选项仅对使用受加密的传输协议的连接有效;即TCP/IP和Unix套接字文件连接。
表6.5加密连接选项摘要
选项名称 | 描述 |
---|---|
--get-server-public-key | Request RSA public key from server |
--server-public-key-path | Path name to file containing RSA public key |
--ssl-ca | File that contains list of trusted SSL Certificate Authorities |
--ssl-capath | Directory that contains trusted SSL Certificate Authority certificate files |
--ssl-cert | File that contains X.509 certificate |
--ssl-cipher | Permissible ciphers for connection encryption |
--ssl-crl | File that contains certificate revocation lists |
--ssl-crlpath | Directory that contains certificate revocation-list files |
--ssl-fips-mode | Whether to enable FIPS mode on client side |
--ssl-key | File that contains X.509 key |
--ssl-mode | Desired security state of connection to server |
--ssl-session-data | File that contains SSL session data |
--ssl-session-data-continue-on-failed-reuse | Whether to establish connections if session reuse fails |
--tls-ciphersuites | Permissible TLSv1.3 ciphersuites for encrypted connections |
--tls-version | Permissible TLS protocols for encrypted connections |
--get-server-public-key
命令行格式 | --get-server-public-key |
---|---|
类型 | 布尔值 |
向服务器请求基于RSA密钥对的密码交换所需的公钥。此选项适用于使用caching_sha2_password
鉴权插件进行身份验证的客户端。对于该插件,除非请求,否则服务器不会发送公钥。对于未使用该插件进行身份验证的帐户,此选项将被忽略。如果不使用基于RSA的密码交换,也会忽略此选项,就像客户端使用安全连接连接到服务器时一样。
如果给出--server-public-key-path=file_name并指定有效的公钥文件,则它优先于--get-server-public-key。
--server-public-key-path=file_name
命令行格式 | --server-public-key-path=file_name |
---|---|
键入 | 文件名 |
PEM格式文件的路径名,其中包含服务器进行基于RSA密钥对的密码交换所需的公钥的客户端副本。此选项适用于使用sha256_password
(已弃用)或caching_sha2_password
鉴权插件进行身份验证的客户端。对于未使用这些插件之一进行身份验证的帐户,此选项将被忽略。如果不使用基于RSA的密码交换,也会忽略此选项,就像客户端使用安全连接连接到服务器时一样。
如果给出--server-public-key-path=file_name并指定有效的公钥文件,则它优先于--get-server-public-key。
此选项仅在使用OpenSSL构建MySQL时可用。
--ssl-ca=file_name
命令行格式 | --ssl-ca=file_name |
---|---|
类型 | file name |
PEM格式的证书授权中心(CA)证书文件的路径名。该文件包含受信任的SSL证书颁发机构列表。
要告诉客户端在与服务器建立加密连接时不要验证服务器证书,请既不指定--ssl-ca也不指定--ssl-capath。服务器仍然根据为客户端帐户建立的任何适用要求验证客户端,并且仍然使用服务器端指定的任何ssl_ca或ssl_capath系统变量值。
要为服务器指定CA文件,请设置ssl_ca系统变量。
--ssl-capath=dir_name
命令行格式 | --ssl-capath=dir_name |
---|---|
类型 | 目录名称 |
包含PEM格式的可信SSL证书颁发机构(CA)证书文件的目录的路径名。
要告诉客户端在与服务器建立加密连接时不要验证服务器证书,请既不指定--ssl-ca也不指定--ssl-capath。服务器仍然根据为客户端帐户建立的任何适用要求验证客户端,并且仍然使用服务器端指定的任何ssl_ca或ssl_capath系统变量值。
要为服务器指定CA目录,请设置ssl_capath系统变量。
--ssl-cert=file_name
命令行格式 | --ssl-cert=file_name |
---|---|
类型 | 文件名 |
PEM格式的客户端SSL公钥证书文件的路径名。支持链式SSL证书。
要指定服务器SSL公钥证书文件,请设置ssl_cert系统变量。
--ssl-cipher=cipher_list
命令行格式 | --ssl-cipher=name |
---|---|
Type | String |
使用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留档中描述的指定密码的语法。
要为服务器指定加密密码,请设置ssl_cipher系统变量。
--ssl-crl=file_name
命令行格式 | --ssl-crl=file_name |
---|---|
类型 | 文件名 |
包含PEM格式证书吊销列表的文件的路径名。
如果既没有给出--ssl-crl也没有给出--ssl-crlpath,则不会执行CRL检查,即使CA路径包含证书吊销列表。
要为服务器指定撤销列表文件,请设置ssl_crl系统变量。
--ssl-crlpath=dir_name
命令行格式 | --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} |
---|---|
已弃用 | Yes |
类型 | 枚举 |
默认值 | OFF |
有效值 |
|
控制是否在客户端启用FIPS模式。--ssl-fips-mode选项与其他--ssl-xxx选项的不同之处在于它不用于建立加密连接,而是影响允许哪些加密操作。
这些--ssl-fips-mode值是允许的:
-
OFF
:禁用FIPS模式。 -
ON
:启用FIPS模式。 -
STRICT
:启用“严格”FIPS模式。
注:如果OpenSSL FIPS对象模块不可用,则--ssl-fips-mode的唯一允许值为OFF。在这种情况下,将--ssl-fips-mode设置为ON或STRICT会导致客户端在启动时产生警告并在非FIPS模式下运行。
要为服务器指定FIPS模式,请设置ssl_fips_mode系统变量。
--ssl-key=file_name
命令行格式 | --ssl-key=file_name |
---|---|
类型 | 文件名 |
PEM格式的客户端SSL私钥文件的路径名。为提高安全性,请使用RSA密钥大小至少为2048位的证书。
如果密钥文件受密码保护,客户端程序会提示用户输入密码。密码必须以交互方式给出;它不能存储在文件中。如果密码不正确,程序会继续运行,就好像它无法读取密钥一样。
要指定服务器SSL私钥文件,请设置ssl_key系统变量。
--ssl-mode=mode
命令行格式 | --ssl-mode=mode |
---|---|
类型 | 枚举 |
默认值 | PREFERRED |
有效值 |
|
此选项指定与服务器的连接所需的安全状态。这些模式值是允许的,按越来越严格的顺序排列:
-
DISABLED
:建立未加密的连接。 -
PREFERRED
:如果服务器支持加密连接,则建立加密连接,如果无法建立加密连接,则回退到未加密连接。如果未指定--ssl-mode,则默认设置。Unix套接字文件上的连接不会使用PREFERRED
模式进行加密。要对Unix套接字文件连接强制加密,请使用REQUIRED
或更严格的模式。(但是,套接字文件传输默认是安全的,因此加密套接字文件连接会使其不再安全并增加CPU负载。) -
REQUIRED
:如果服务器支持加密连接,则建立加密连接。如果无法建立加密连接,则连接尝试失败。 -
VERIFY_CA
:与REQUIRED
类似,但要根据配置的CA证书验证服务器证书授权中心(CA)证书。如果未找到有效匹配的CA证书,连接尝试将失败。 -
VERIFY_IDENTITY
:类似于VERIFY_CA
,但通过检查客户端用于连接到服务器的主机名与服务器发送给客户端的证书中的身份来执行主机名身份校验:如果客户端使用OpenSSL1.0.2或更高版本,客户端将检查用于连接的主机名是否与服务器证书中的主题备用名称值或通用名称值匹配。主机名身份校验也适用于使用通配符指定通用名称的证书。否则,客户端会检查它用于连接的主机名是否与服务器证书中的Common Name值匹配。
如果存在不匹配,连接将失败。对于加密连接,此选项有助于防止中间人攻击。
VERIFY_IDENTITY的主机名身份校验不适用于服务器自动创建的自签名证书。此类自签名证书不包含服务器名称作为Common Name值。
重要:默认设置--ssl-mode=PREFERRED在其他默认设置不变的情况下生成加密连接。但是,为了帮助防止复杂的中间人攻击,客户端验证服务器的身份非常重要。设置--ssl-mode=VERIFY_CA和--ssl-mode=VERIFY_IDENTITY是比默认设置更好的选择,有助于防止此类攻击。要实现其中一个设置,您必须首先确保服务器的CA证书可靠地全员可用,否则将导致可用性问题。因此,它们不是默认设置。
--ssl-mode选项与CA证书选项交互如下:
1、如果没有显式设置--ssl-mode,则使用--ssl-ca或--ssl-capath意味着--ssl-mode=VERIFY_CA。
2、对于VERIFY_CA或VERIFY_IDENTITY的--ssl-mode值,还需要--ssl-ca或--ssl-capath,以提供与服务器使用的CA证书匹配的CA证书。
3、具有VERIFY_CA或VERIFY_IDENTITY以外的值的显式--ssl-mode选项以及显式--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-session-data=file_name |
---|---|
类型 | 文件名 |
用于会话重用的PEM格式的客户端SSL会话数据文件的路径名。
当您使用--ssl-session sion-data选项调起MySQL客户端程序时,客户端会尝试从文件中反序列化会话数据(如果提供),然后使用它来建立新连接。如果您提供了文件,但会话没有被重用,则连接会失败,除非您在调用客户端程序时还在命令行中指定了--ssl-session-data-continue-on-failed-reuse选项。
mysql命令ssl_session_data_print生成会话数据文件。
ssl-session-data-continue-on-failed-reuse
命令行格式 | --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库。如果未设置此选项,则客户端允许默认密码套件集。如果该选项设置为空字符串,则不启用密码套件,并且无法建立加密连接。
要指定服务器允许的密码套件,请设置tls_ciphersuites系统变量。
--tls-version=protocol_list
命令行格式 | --tls-version=protocol_list |
---|---|
类型 | String |
默认值 |
|
此选项指定客户端允许加密连接的TLS协议。该值是一个或多个逗号分隔协议版本的列表。例如:
mysql --tls-version="TLSv1.2,TLSv1.3"
可以为此选项命名的协议取决于用于编译MySQL的SSL库和MySQL服务器版本。
重要:支持--tls-version选项的客户端(包括MySQL Shell)无法使用设置为TLSv1或TLSv1.1的协议建立TLS/SSL连接。如果客户端尝试使用这些协议进行连接,则对于TCP连接,连接失败,并向客户端返回错误。对于套接字连接,如果--ssl-mode设置为REQUIRED,则连接失败,否则建立连接但禁用TLS/SSL。
MySQL Server中支持TLSv1.3协议,前提是MySQL Server是使用OpenSSL1.1.1或更高版本编译的。服务器在启动时检查OpenSSL的版本,如果低于1.1.1,TLSv1.3将从与TLS版本相关的服务器系统变量(如tls_version系统变量)的默认值中删除。
应选择允许的协议,例如不要在列表中留下“漏洞”。例如,这些值没有漏洞:
--tls-version="TLSv1.2,TLSv1.3"
--tls-version="TLSv1.3"
要指定服务器允许的TLS协议,请设置tls_version系统变量。
连接压缩的命令选项
本节介绍了使客户端程序能够控制对与服务器的连接使用压缩的选项。
表6.6连接压缩选项摘要
选项名称 | 描述 |
---|---|
--compress | 压缩客户端和服务器之间发送的所有信息 |
--compression-algorithms | 允许的服务器连接压缩算法 |
--zstd-compression-level | 压缩级别为使用zstd压缩的服务器连接 |
--compress, -C
命令行格式 | --compress[={OFF|ON}] |
---|---|
已弃用 | 是 |
类型 | 布尔值 |
默认值 | OFF |
如果可能,压缩客户端和服务器之间发送的所有信息。此选项已弃用。预计它将在MySQL的未来版本中被删除。
--compression-algorithms=value
命令行格式 | --compression-algorithms=value |
---|---|
类型 | Set |
默认值 | uncompressed |
有效值 |
|
与服务器连接的允许压缩算法。可用算法与protocol_compression_algorithms系统变量相同。默认值未压缩。
--zstd-compression-level=level
命令行格式 | --zstd-compression-level=# |
---|---|
类型 | Integer |
用于连接到使用zstd压缩算法的服务器的压缩级别。允许的级别从1到22,较大的值表示压缩级别增加。默认zstd压缩级别为3。压缩级别设置对不使用zstd压缩的连接没有影响。