Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Connecting to the MySQL Server Using Command Options

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

本节描述了使用命令行选项指定如何连接到 MySQL 服务器的方法,适用于客户端如 mysqlmysqldump。有关使用 URI 类似连接字符串或键值对连接的信息,请参阅 第 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 系统变量以支持命名管道连接。如果命名管道连接不受支持或用户不属于 Windows 组 named_pipe_full_access_group 系统变量指定的组,会发生错误。

  • 否则,连接使用 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 系统变量以支持命名管道连接,或者连接用户不是 Windows 组 named_pipe_full_access_group 的成员,将发生错误。使用 --socket 选项指定管道名称,如果您不想使用默认管道名称。

远程服务器连接使用 TCP/IP。这条命令连接到 remote.example.com 上的服务器,使用默认端口号(3306):

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 节,“环境变量”