MySQL 8.0 参考手册  / 第 4 章 MySQL 程序  / 4.2 使用 MySQL 程序  /  4.2.3 连接服务器的命令选项

4.2.3 连接服务器的命令选项

本节描述大多数 MySQL 客户端程序支持的选项,这些选项控制客户端程序如何与服务器建立连接以及连接是否加密。这些选项可以在命令行或选项文件中给出。

连接建立的命令选项

本节描述控制客户端程序如何与服务器建立连接的选项。有关显示如何使用它们的其他信息和示例,请参阅 第 4.2.4 节,“使用命令选项连接到 MySQL 服务器”

表 4.3 连接建立选项总结

选项名称 描述 弃用
--default-auth 要使用的身份验证插件
- 主持人 MySQL 服务器所在的主机
- 密码 连接到服务器时使用的密码
- 管道 使用命名管道连接到服务器(仅限 Windows)
--插件目录 安装插件的目录
- 港口 用于连接的 TCP/IP 端口号
- 协议 使用的传输协议
--secure-auth 不要以旧的(pre-4.1)格式向服务器发送密码 是的
--shared-memory-base-name 共享内存连接的共享内存名称(仅限 Windows)
- 插座 要使用的 Unix 套接字文件或 Windows 命名管道
- 用户 连接到服务器时使用的 MySQL 用户名

  • --default-auth=plugin

    关于使用哪个客户端身份验证插件的提示。请参阅第 6.2.13 节,“可插入身份验证”

  • --host=host_name, -h host_name

    运行 MySQL 服务器的主机。该值可以是主机名、IPv4 地址或 IPv6 地址。默认值为localhost

  • --password[=pass_val], -p[pass_val]

    用于连接到服务器的 MySQL 帐户的密码。密码值是可选的。如果没有给出,客户端程序会提示输入一个。如果给定,则 后面 的密码之间 不能有空格。如果未指定密码选项,则默认为不发送密码。 --password=-p

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

    要明确指定没有密码并且客户端程序不应提示输入密码,请使用该 --skip-password 选项。

  • --pipe,-W

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

  • --plugin-dir=dir_name

    在其中查找插件的目录。如果该--default-auth 选项用于指定身份验证插件但客户端程序找不到它,请指定此选项。请参阅 第 6.2.13 节,“可插入身份验证”

  • --port=port_num, -P port_num

    对于 TCP/IP 连接,要使用的端口号。默认端口号为 3306。

  • --protocol={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 命名管道传输到本地服务器 视窗
    MEMORY 到本地服务器的共享内存传输 视窗

    另见第 4.2.5 节,“连接传输协议”

  • --secure-auth

    不要以旧的(pre-4.1)格式向服务器发送密码。这会阻止除使用较新密码格式的服务器之外的连接。

    从 MySQL 5.7.5 开始,此选项已弃用;希望在未来的 MySQL 版本中将其删除。它始终处于启用状态,尝试禁用它 ( --skip-secure-auth, --secure-auth=0) 会产生错误。在 MySQL 5.7.5 之前,此选项默认启用,但可以禁用。

    笔记

    使用 pre-4.1 哈希方法的密码不如使用本机密码哈希方法的密码安全,应避免使用。4.1 之前的密码已弃用,MySQL 5.7.5 中删除了对它们的支持。有关帐户升级说明,请参阅 第 6.4.1.3 节,“从 4.1 版之前的密码哈希和 mysql_old_password 插件迁移”

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

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

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

  • --socket=path, -S path

    在 Unix 上,用于使用命名管道与本地服务器建立连接的 Unix 套接字文件的名称。默认的 Unix 套接字文件名为 /tmp/mysql.sock.

    在 Windows 上,用于连接到本地服务器的命名管道的名称。默认的 Windows 管道名称是MySQL. 管道名称不区分大小写。

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

  • --user=user_name, -u user_name

    用于连接到服务器的 MySQL 帐户的用户名。默认用户名ODBC 在 Windows 上或在 Unix 上是您的 Unix 登录名。

加密连接的命令选项

本节介绍客户端程序的选项,这些选项指定是否使用与服务器的加密连接、证书和密钥文件的名称以及与加密连接支持相关的其他参数。有关建议使用的示例以及如何检查连接是否加密,请参阅 第 6.3.1 节,“配置 MySQL 以使用加密连接”

笔记

这些选项仅对使用受加密传输协议的连接有效;即 TCP/IP 和 Unix 套接字文件连接。参见 第 4.2.5 节,“连接传输协议”

有关从 MySQL C API 使用加密连接的信息,请参阅支持加密连接

表 4.4 连接加密选项总结

选项名称 描述 介绍
--get-server-public-key 从服务器请求 RSA 公钥 5.7.23
--server-public-key-path 包含 RSA 公钥的文件的路径名
--skip-ssl 禁用连接加密
--ssl 启用连接加密
--ssl-ca 包含可信 SSL 证书颁发机构列表的文件
--ssl-capath 包含受信任的 SSL 证书颁发机构证书文件的目录
--ssl证书 包含 X.509 证书的文件
--ssl密码 连接加密的允许密码
--ssl-crl 包含证书吊销列表的文件
--ssl-crlpath 包含证书吊销列表文件的目录
--ssl-密钥 包含 X.509 密钥的文件
--ssl模式 连接到服务器的所需安全状态 5.7.11
--ssl-verify-server-cert 根据服务器证书公用名身份验证主机名
--tls-版本 加密连接允许的 TLS 协议 5.7.10

  • --get-server-public-key

    从服务器请求基于 RSA 密钥对的密码交换所需的公钥。此选项适用于使用 caching_sha2_password身份验证插件进行身份验证的客户端。对于该插件,除非请求,否则服务器不会发送公钥。对于未使用该插件进行身份验证的帐户,将忽略此选项。如果不使用基于 RSA 的密码交换,它也会被忽略,就像客户端使用安全连接连接到服务器时的情况一样。

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

    有关 caching_sha2_password插件的信息,请参阅 第 6.4.1.4 节,“缓存 SHA-2 可插入身份验证”

    --get-server-public-key 选项是在 MySQL 5.7.23 中添加的。

  • --server-public-key-path=file_name

    PEM 格式文件的路径名,其中包含服务器所需的公钥客户端副本,用于基于 RSA 密钥对的密码交换。此选项适用于使用 sha256_passwordcaching_sha2_password身份验证插件进行身份验证的客户端。对于未使用其中一个插件进行身份验证的帐户,将忽略此选项。如果不使用基于 RSA 的密码交换,它也会被忽略,就像客户端使用安全连接连接到服务器时的情况一样。

    仅当使用 OpenSSL 构建 MySQL 时,此选项才可用。

    有关插件sha256_passwordcaching_sha2_password插件的信息,请参阅 第 6.4.1.5 节,“SHA-256 可插入身份验证”第 6.4.1.4 节,“缓存 SHA-2 可插入身份验证”

  • --ssl, --skip-ssl

    笔记

    客户端--ssl 选项从 MySQL 5.7.11 开始弃用,并在 MySQL 8.0 中删除。对于客户端程序,请 --ssl-mode改用:

    服务器端--ssl 选项弃用。

    默认情况下,如果服务器支持加密连接,则 MySQL 客户端程序会尝试建立加密连接,并可通过 --ssl选项进一步控制:客户端--ssl选项的工作方式如下:

    • 在没有 --ssl选项的情况下,客户端会尝试使用加密进行连接,如果无法建立加密连接,则会回退到未加密的连接。

    • 显式 --ssl选项或同义词 ( --ssl=1, --enable-ssl) 的存在是规定性的:客户端需要加密连接,如果无法建立则失败。

    • 通过--ssl=0选项或同义词 ( --skip-ssl, --disable-ssl),客户端使用未加密的连接。

    要要求 MySQL 帐户使用加密连接,请使用CREATE USER创建带有REQUIRE SSL子句的帐户,或使用 ALTER USER现有帐户添加REQUIRE SSL子句。这会导致使用该帐户的客户端的连接尝试被拒绝,除非 MySQL 支持加密连接并且可以建立加密连接。

    REQUIRE条款允许其他与加密相关的选项,这些选项可用于执行比REQUIRE SSL. 有关使用使用各种选项配置的帐户连接的客户端可以或必须指定哪些命令选项的更多详细信息 REQUIRE,请参阅 CREATE USER SSL/TLS 选项

    要为加密连接指定其他参数,请考虑至少在服务器端设置 ssl_certssl_key系统变量,并 --ssl-ca在客户端设置选项。请参阅 第 6.3.1 节,“配置 MySQL 以使用加密连接”,其中还描述了证书和密钥文件自动生成和自动发现的服务器功能。

  • --ssl-ca=file_name

    PEM 格式的证书颁发机构 (CA) 证书文件的路径名。该文件包含受信任的 SSL 证书颁发机构列表。

    要告诉客户端在与服务器建立加密连接时不要对服务器证书进行身份验证,请既不指定 --ssl-ca也不 指定--ssl-capath。服务器仍然根据为客户帐户建立的任何适用要求验证客户端,并且它仍然使用服务器端指定的任何ssl_cassl_capath系统变量值。

    要为服务器指定 CA 文件,请设置 ssl_ca系统变量。

  • --ssl-capath=dir_name

    包含 PEM 格式的可信 SSL 证书颁发机构 (CA) 证书文件的目录的路径名。是否支持此功能取决于用于编译 MySQL 的 SSL 库;请参阅第 6.3.4 节,“SSL 库相关功能”

    要告诉客户端在与服务器建立加密连接时不要对服务器证书进行身份验证,请既不指定 --ssl-ca也不 指定--ssl-capath。服务器仍然根据为客户帐户建立的任何适用要求验证客户端,并且它仍然使用服务器端指定的任何ssl_cassl_capath系统变量值。

    要为服务器指定 CA 目录,请设置 ssl_capath系统变量。

  • --ssl-cert=file_name

    PEM 格式的客户端 SSL 公钥证书文件的路径名。

    要指定服务器 SSL 公钥证书文件,请设置ssl_cert系统变量。

  • --ssl-cipher=cipher_list

    用于连接加密的允许密码列表。如果列表中的密码均不受支持,则加密连接不起作用。

    为了最大的可移植性, cipher_list应该是一个或多个密码名称的列表,用冒号分隔。OpenSSL 和 yaSSL 都可以理解这种格式。例子:

    --ssl-cipher=AES128-SHA
    --ssl-cipher=DHE-RSA-AES128-GCM-SHA256:AES128-SHA

    OpenSSL 支持更灵活的语法来指定密码,如 https://www.openssl.org/docs/manmaster/man1/ciphers.html上的 OpenSSL 文档中所述。yaSSL 没有,因此对于使用 yaSSL 编译的 MySQL 发行版,尝试使用该扩展语法会失败。

    有关 MySQL 支持哪些加密密码的信息,请参阅 第 6.3.2 节,“加密连接 TLS 协议和密码”

    要为服务器指定加密密码,请设置 ssl_cipher系统变量。

  • --ssl-crl=file_name

    包含 PEM 格式的证书吊销列表的文件的路径名。对撤销列表功能的支持取决于用于编译 MySQL 的 SSL 库。请参阅 第 6.3.4 节,“SSL 库相关功能”

    如果既未--ssl-crl给出也未 --ssl-crlpath给出,则不执行 CRL 检查,即使 CA 路径包含证书吊销列表。

    要为服务器指定吊销列表文件,请设置 ssl_crl系统变量。

  • --ssl-crlpath=dir_name

    包含 PEM 格式的证书吊销列表文件的目录的路径名。对撤销列表功能的支持取决于用于编译 MySQL 的 SSL 库。请参阅第 6.3.4 节,“SSL 库相关功能”

    如果既未--ssl-crl给出也未 --ssl-crlpath给出,则不执行 CRL 检查,即使 CA 路径包含证书吊销列表。

    要为服务器指定吊销列表目录,请设置ssl_crlpath系统变量。

  • --ssl-key=file_name

    PEM 格式的客户端 SSL 私钥文件的路径名。为提高安全性,请使用 RSA 密钥大小至少为 2048 位的证书。

    如果密钥文件受密码保护,则客户端程序会提示用户输入密码。密码必须交互给出;它不能存储在文件中。如果密码不正确,程序将继续运行,就好像它无法读取密钥一样。

    要指定服务器 SSL 私钥文件,请设置 ssl_key系统变量。

  • --ssl-mode=mode

    此选项指定与服务器的连接所需的安全状态。按照严格程度递增的顺序,这些模式值是允许的:

    • DISABLED:建立未加密的连接。这类似于遗留 --ssl=0选项或其同义词 ( --skip-ssl, --disable-ssl)。

    • PREFERRED:如果服务器支持加密连接,则建立加密连接,如果无法建立加密连接,则回退到未加密连接。--ssl-mode如果未指定, 则这是默认值。

      通过 Unix 套接字文件的连接未使用PREFERRED. 要对 Unix 套接字文件连接实施加密,请使用REQUIRED或更严格的模式。(但是,套接字文件传输在默认情况下是安全的,因此加密套接字文件连接会使其不再安全并增加 CPU 负载。)

    • REQUIRED:如果服务器支持加密连接,则建立加密连接。如果无法建立加密连接,则连接尝试失败。

    • VERIFY_CA:与 REQUIRED配置的 CA 证书类似,但另外验证服务器证书颁发机构 (CA) 证书。如果未找到有效的匹配 CA 证书,连接尝试将失败。

    • VERIFY_IDENTITY:与 一样 VERIFY_CA,但通过检查客户端用于连接到服务器的主机名与服务器发送给客户端的证书中的身份来另外执行主机名身份验证:

      • 从 MySQL 5.7.23 开始,如果客户端使用 OpenSSL 1.0.2 或更高版本,客户端会检查它用于连接的主机名是否与服务器证书中的主题备用名称值或通用名称值匹配。主机名身份验证也适用于使用通配符指定通用名称的证书。

      • 否则,客户端会检查它用于连接的主机名是否与服务器证书中的 Common Name 值相匹配。

      如果不匹配,连接将失败。对于加密连接,此选项有助于防止中间人攻击。这就像遗留 --ssl-verify-server-cert 选项。

      笔记

      主机名身份验证 VERIFY_IDENTITY不适用于由服务器自动创建或使用 mysql_ssl_rsa_setup手动创建的自签名证书(请参阅 第 6.3.3.1 节,“使用 MySQL 创建 SSL 和 RSA 证书和密钥”)。此类自签名证书不包含服务器名称作为 Common Name 值。

    重要的

    如果其他默认设置未更改, --ssl-mode=PREFERRED则默认设置 会生成加密连接。但是,为了帮助防止复杂的中间人攻击,客户端验证服务器的身份很重要。设置 --ssl-mode=VERIFY_CA--ssl-mode=VERIFY_IDENTITY 是比默认设置更好的选择,有助于防止此类攻击。要实施这些设置之一,您必须首先确保服务器的 CA 证书对您环境中使用它的所有客户端可靠可用,否则将导致可用性问题。因此,它们不是默认设置。

    --ssl-mode选项与 CA 证书选项交互,如下所示:

    --ssl-mode选项是在 MySQL 5.7.11 中添加的。

    要要求 MySQL 帐户使用加密连接,请使用CREATE USER创建带有REQUIRE SSL子句的帐户,或使用 ALTER USER现有帐户添加REQUIRE SSL子句。这会导致使用该帐户的客户端的连接尝试被拒绝,除非 MySQL 支持加密连接并且可以建立加密连接。

    REQUIRE条款允许其他与加密相关的选项,这些选项可用于执行比REQUIRE SSL. 有关使用使用各种选项配置的帐户连接的客户端可以或必须指定哪些命令选项的更多详细信息 REQUIRE,请参阅 CREATE USER SSL/TLS 选项

  • --ssl-verify-server-cert

    笔记

    --ssl-verify-server-cert 选项从 MySQL 5.7.11 开始弃用,并在 MySQL 8.0 中删除。改用 --ssl-mode=VERIFY_IDENTITY

    此选项使客户端通过检查客户端用于连接到服务器的主机名与服务器发送给客户端的证书中的身份来执行主机名身份验证:

    • 从 MySQL 5.7.23 开始,如果客户端使用 OpenSSL 1.0.2 或更高版本,客户端会检查它用于连接的主机名是否与服务器证书中的主题备用名称值或通用名称值匹配。

    • 否则,客户端会检查它用于连接的主机名是否与服务器证书中的 Common Name 值相匹配。

    如果不匹配,连接将失败。对于加密连接,此选项有助于防止中间人攻击。默认情况下禁用主机名身份验证。

    笔记

    主机名身份验证不适用于服务器自动创建的自签名证书,或手动使用 mysql_ssl_rsa_setup(请参阅 第 6.3.3.1 节,“使用 MySQL 创建 SSL 和 RSA 证书和密钥”)。此类自签名证书不包含服务器名称作为 Common Name 值。

    主机名身份验证也不适用于使用通配符指定通用名称的证书,因为该名称会逐字与服务器名称进行比较。

  • --tls-version=protocol_list

    此选项指定客户端允许加密连接的 TLS 协议。该值是一个或多个以逗号分隔的协议版本的列表。例如:

    mysql --tls-version="TLSv1.1,TLSv1.2"

    可以为此选项命名的协议取决于用于编译 MySQL 的 SSL 库。应选择允许的协议,例如不要在列表中留下漏洞 。例如,这些值没有孔:

    --tls-version="TLSv1,TLSv1.1,TLSv1.2"
    --tls-version="TLSv1.1,TLSv1.2"
    --tls-version="TLSv1.2"

    这个值确实有漏洞,不应该被使用:

    --tls-version="TLSv1,TLSv1.2"

    有关详细信息,请参阅 第 6.3.2 节,“加密连接 TLS 协议和密码”

    这个选项是在 MySQL 5.7.10 中添加的。

    要指定服务器允许哪些 TLS 协议,请设置 tls_version系统变量。