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.11 节,“可插入身份验证”

  • --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.11 节,“可插入身份验证”

  • --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)格式向服务器发送密码。这会阻止除使用较新密码格式的服务器之外的连接。默认情况下启用此选项;用于 --skip-secure-auth 禁用它。

    笔记

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

    笔记

    此选项已弃用;希望在未来的版本中将其删除。从 MySQL 5.7.5 开始,它始终处于启用状态,尝试禁用它会产生错误。

  • --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 连接加密选项总结

选项名称 描述 介绍
--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.6.30
--ssl-verify-server-cert 根据服务器证书公用名身份验证主机名

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

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

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

    有关该sha256_password 插件的信息,请参阅 第 6.4.1.4 节,“SHA-256 可插入身份验证”

  • --ssl, --skip-ssl

    此选项允许但不要求客户端使用加密连接到服务器。因此,此选项本身不足以导致使用加密连接。例如,如果您为客户端程序指定此选项,但服务器尚未配置为支持加密连接,则客户端会退回到未加密的连接。

    --ssl其他选项可能暗示 ,如这些选项的说明中所示。 --ssl-xxx

    要为加密连接指定其他参数,请考虑至少在服务器端设置 ssl_certssl_key系统变量,并 --ssl-ca在客户端设置选项。请参阅 第 6.3.1 节,“配置 MySQL 以使用加密连接”

    否定形式的--ssl选项表示不应使用加密 覆盖其他 选项。将选项指定为 或同义词 ( , )。例如,您可能在 选项文件组中指定了选项,以便在调用 MySQL 客户端程序时默认使用加密连接。要改为使用未加密的连接,请 在命令行上调用客户端程序以覆盖选项文件中的选项。 --ssl-xxx--skip-ssl--ssl=0--disable-ssl[client]--ssl=0

    要要求 MySQL 帐户使用加密连接,GRANT请为包含REQUIRE SSL 子句的帐户使用语句。这会导致使用该帐户的客户端的连接尝试被拒绝,除非 MySQL 支持加密连接并且可以建立加密连接。

    REQUIRE条款允许其他与加密相关的选项,这些选项可用于执行比REQUIRE SSL. REQUIRE有关使用使用各种选项 配置的帐户连接的客户端可以或必须指定哪些命令选项的更多详细信息 ,请参阅第 13.7.1.4 节“GRANT 语句”REQUIRE中的说明。

  • --ssl-ca=file_name

    PEM 格式的证书颁发机构 (CA) 证书文件的路径名。该文件包含受信任的 SSL 证书颁发机构列表。这个选项暗示 --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

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

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

  • --ssl-cert=file_name

    PEM 格式的客户端 SSL 公钥证书文件的路径名。这个选项暗示 --ssl

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

  • --ssl-cipher=cipher_list

    用于连接加密的允许密码列表。如果列表中的密码均不受支持,则加密连接不起作用。这个选项暗示 --ssl

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

    --ssl-cipher=AES128-SHA
    --ssl-cipher=DHE-RSA-AES256-SHA: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

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

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

  • --ssl-crlpath=dir_name

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

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

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

  • --ssl-key=file_name

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

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

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

  • --ssl-mode=mode

    此选项指定与服务器连接的所需安全状态:

    • 如果未指定此选项,则默认建立未加密的连接。这类似于 --ssl=0选项或其同义词 ( --skip-ssl, --disable-ssl)。

    • 如果指定此选项,则唯一允许的模式值为REQUIRED(如果服务器支持加密连接,则建立加密连接)。如果无法建立加密连接,则连接尝试失败。

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

    笔记

    要在 MySQL 5.6 中要求加密连接,标准 MySQL 客户端程序会检查连接是否已加密(如果 --ssl-mode=REQUIRED已指定)。如果不是,则客户端会出错并退出。必须能够要求加密连接的第三方应用程序可以使用相同的技术。有关详细信息,请参阅mysql_ssl_set()

    重要的

    --ssl-mode=REQUIRED 产生加密连接。但是,为了帮助防止复杂的中间人攻击,客户端验证服务器的身份也很重要。添加 --ssl-verify-server-cert 选项可以实现这一点。要实施该附加选项,您必须首先确保服务器的 CA 证书对您环境中使用它的所有客户端可靠可用,否则将导致可用性问题。

  • --ssl-verify-server-cert

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

    • As of MySQL 5.6.41, if the client uses OpenSSL 1.0.2 or higher, the client checks whether the host name that it uses for connecting matches either the Subject Alternative Name value or the Common Name value in the server certificate. Host name identity verification also works with certificates that specify the Common Name using wildcards.

    • Otherwise, the client checks whether the host name that it uses for connecting matches the Common Name value in the server certificate.

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