文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  使用命令选项连接到 MySQL 服务器

6.2.4 使用命令选项连接到 MySQL 服务器

本节描述如何使用命令行选项来指定如何建立与 MySQL 服务器的连接,对于客户端程序如 mysqlmysqldump。有关使用 URI 类连接字符串或键值对建立连接的信息,对于客户端程序如 MySQL Shell,请参阅 第 6.2.5 节,“使用 URI 类字符串或键值对连接到服务器”。如果您无法连接,请参阅 第 8.2.22 节,“排查连接到 MySQL 的问题” 以获取更多信息。

为了使客户端程序能够连接到 MySQL 服务器,它必须使用正确的连接参数,例如运行服务器的主机名称以及您 MySQL 帐户的用户名和密码。每个连接参数都有一个默认值,但您可以使用在命令行或选项文件中指定的程序选项来覆盖默认值。

此处的示例使用 mysql 客户端程序,但这些原理适用于其他客户端程序,如 mysqldumpmysqladminmysqlshow

此命令调用 mysql 而不指定任何显式连接参数

mysql

由于没有参数选项,因此应用默认值

  • 默认主机名是 localhost。在 Unix 上,这具有特殊含义,如下所述。

  • 默认用户名在 Windows 上是 ODBC,在 Unix 上是您的 Unix 登录名。

  • 没有发送密码,因为没有给出 --password-p

  • 对于 mysql,第一个非选项参数被视为默认数据库的名称。由于没有这样的参数,mysql 不选择任何默认数据库。

要显式指定主机名和用户名,以及密码,请在命令行上提供适当的选项。要选择默认数据库,请添加一个数据库名称参数。示例

mysql --host=localhost --user=myname --password=password mydb
mysql -h localhost -u myname -ppassword mydb

对于密码选项,密码值是可选的

  • 如果您使用 --password-p 选项并指定密码值,则 --password=-p 与其后的密码之间必须 没有空格

  • 如果您使用 --password-p 但没有指定密码值,则客户端程序会提示您输入密码。在您输入密码时,密码不会显示。这比在命令行上给出密码更安全,因为命令行可能会让系统上的其他用户通过执行诸如 ps 之类的命令来查看密码行。请参阅 第 8.1.2.1 节,“密码安全的最终用户指南”

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

如上所述,在命令行上包含密码值存在安全风险。为了避免这种风险,请指定 --password-p 选项,后面不带任何密码值

mysql --host=localhost --user=myname --password mydb
mysql -h localhost -u myname -p mydb

当给出 --password-p 选项而不带任何密码值时,客户端程序会打印提示并等待您输入密码。(在这些示例中,mydb 不被 解释为密码,因为它与前面的密码选项之间有空格。)

在某些系统上,MySQL 用来提示输入密码的库例程会自动将密码限制为八个字符。该限制是系统库的属性,而不是 MySQL 的属性。在内部,MySQL 不会对密码的长度有任何限制。为了解决受此限制影响的系统上的限制,请在选项文件中指定您的密码(请参阅 第 6.2.2.2 节,“使用选项文件”)。另一个解决方法是将您的 MySQL 密码更改为长度不超过八个字符的值,但这样做有一个缺点,即更短的密码往往不太安全。

客户端程序确定要建立何种类型的连接,如下所示

  • 如果主机未指定或为 localhost,则连接到本地主机

    • 在 Windows 上,如果服务器在启动时启用了 shared_memory 系统变量以支持共享内存连接,则客户端使用共享内存连接。

    • 在 Unix 上,MySQL 程序对主机名 localhost 进行特殊处理,这与您对其他基于网络的程序的期望可能不同:客户端使用 Unix 套接字文件连接。可以使用 --socket 选项或 MYSQL_UNIX_PORT 环境变量来指定套接字名称。

  • 在 Windows 上,如果 host.(句点),或者 TCP/IP 未启用且未指定 --socket 选项或主机为空,则客户端将使用命名管道连接,前提是服务器在启动时启用了 named_pipe 系统变量来支持命名管道连接。如果命名管道连接不受支持或进行连接的用户不是由 named_pipe_full_access_group 系统变量指定的 Windows 组的成员,则会发生错误。

  • 否则,连接将使用 TCP/IP。

--protocol 选项使您可以使用特定传输协议,即使其他选项通常会导致使用其他协议。也就是说,--protocol 显式指定传输协议,并覆盖前面的规则,即使对于 localhost 也是如此。

仅使用或检查与所选传输协议相关的连接选项。其他连接选项将被忽略。例如,在 Unix 上使用 --host=localhost 时,客户端会尝试使用 Unix 套接字文件连接到本地服务器,即使给出了 --port-P 选项来指定 TCP/IP 端口号。

要确保客户端与本地服务器建立 TCP/IP 连接,请使用 --host-h 来指定主机名值为 127.0.0.1(而不是 localhost),或者本地服务器的 IP 地址或名称。您也可以使用 --protocol=TCP 选项显式指定传输协议,即使对于 localhost 也是如此。示例

mysql --host=127.0.0.1
mysql --protocol=TCP

如果服务器配置为接受 IPv6 连接,则客户端可以使用 --host=::1 通过 IPv6 连接到本地服务器。请参见 第 7.1.13 节,“IPv6 支持”

在 Windows 上,要强制 MySQL 客户端使用命名管道连接,请指定 --pipe--protocol=PIPE 选项,或者将 .(句点)指定为主机名。如果服务器在启动时未启用 named_pipe 系统变量来支持命名管道连接,或者进行连接的用户不是由 named_pipe_full_access_group 系统变量指定的 Windows 组的成员,则会发生错误。如果您不想使用默认管道名称,请使用 --socket 选项来指定管道的名称。

与远程服务器的连接使用 TCP/IP。此命令使用默认端口号 (3306) 连接到在 remote.example.com 上运行的服务器

mysql --host=remote.example.com

要显式指定端口号,请使用 --port-P 选项

mysql --host=remote.example.com --port=13306

您也可以为与本地服务器的连接指定端口号。但是,如前所述,Unix 上与 localhost 的连接默认使用套接字文件,因此除非您像前面所述那样强制进行 TCP/IP 连接,否则任何指定端口号的选项都会被忽略。

对于此命令,程序在 Unix 上使用套接字文件,--port 选项将被忽略

mysql --port=13306 --host=localhost

要使用端口号,请强制进行 TCP/IP 连接。例如,以以下任一方式调用程序

mysql --port=13306 --host=127.0.0.1
mysql --port=13306 --protocol=TCP

有关控制客户端程序如何与服务器建立连接的选项的更多信息,请参见 第 6.2.3 节,“与服务器建立连接的命令选项”

可以指定连接参数,而无需在每次调用客户端程序时在命令行上输入它们

  • 在选项文件的 [client] 部分中指定连接参数。文件中的相关部分可能如下所示

    [client]
    host=host_name
    user=user_name
    password=password

    有关更多信息,请参见 第 6.2.2.2 节,“使用选项文件”

  • 可以使用环境变量指定一些连接参数。示例

    • 要指定 mysql 的主机,请使用 MYSQL_HOST

    • 在 Windows 上,要指定 MySQL 用户名,请使用 USER

    有关支持的环境变量的列表,请参见 第 6.9 节,“环境变量”