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

本节介绍了如何使用命令行选项为mysqlmysqldump之类的 Client 端指定如何构建与 MySQL 服务器的连接。有关无法连接的其他信息,请参见第 6.2.17 节“对连接 MySQL 的问题进行故障排除”

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

此处的示例使用mysqlClient 端程序,但原理适用于其他 Client 端,例如mysqldumpmysqladminmysqlshow

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

mysql

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

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

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

  • 由于未提供--password-p,因此未发送密码。

  • 对于mysql,第一个 nonoption 参数用作默认数据库的名称。因为没有这样的参数,所以mysql不选择默认数据库。

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

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

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

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

  • 如果使用--password-p,但未指定密码值,则 Client 端程序会提示您 Importing 密码。Importing 密码时不会显示。这比在命令行上 Importing 密码更为安全,因为这样做可能使系统上的其他用户通过执行诸如 ps 之类的命令来查看密码行。参见第 6.1.2.1 节,“最终用户密码安全准则”

  • 要明确指定没有密码,并且 Client 端程序不应提示 Importing 密码,请使用--skip-password选项。

如前所述,在命令行中包含密码值存在安全风险。为了避免这种风险,请指定--password-p选项,但不要 Importing 以下任何密码:

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

如果给出的--password-p选项没有密码值,则 Client 端程序将显示提示,并 await 您 Importing 密码。 (在这些示例中,mydb不*解释为密码,因为它与前一个密码选项之间用空格分隔.)

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

Client 端程序确定要进行的连接类型如下:

  • 如果未指定主机或为localhost,则将与 localhost 构建连接:

  • 在 Windows 上,如果服务器是在启用了shared_memory系统变量以支持共享内存连接的情况下启动的,则 Client 端使用共享内存进行连接。

    • 在 Unix 上,MySQL 程序特别对待主机名localhost,与其他基于网络的程序相比,它可能与您期望的不同:Client 端使用 Unix 套接字文件进行连接。 --socket选项或MYSQL_UNIX_PORT环境变量可用于指定套接字名称。

  • 在 Windows 上,如果host.(句号),或者未启用 TCP/IP 且未指定--socket或主机为空,则如果服务器是在启用了named_pipe系统变量以支持的情况下启动的,则 Client 端使用命名管道进行连接命名管道连接。如果不支持命名管道连接,或者构建连接的用户不是named_pipe_full_access_group系统变量指定的 Windows 组的成员,则会发生错误。

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

--protocol选项使您可以使用特定的传输协议,即使其他选项通常导致使用其他协议也是如此。也就是说,--protocol明确指定了传输协议,甚至覆盖了localhost,也覆盖了前面的规则。

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

为确保 Client 端与本地服务器构建 TCP/IP 连接,请使用--host-h指定主机名值127.0.0.1(而不是localhost)或本地服务器的 IP 地址或名称。您也可以使用--protocol=TCP选项显式指定传输协议,甚至是localhost。例子:

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

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

在 Windows 上,要强制 MySQLClient 端使用命名管道连接,请指定--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

有关控制 Client 端程序如何构建与服务器的连接的选项的其他信息,请参见第 4.2.3 节“用于连接到服务器的命令选项”

每次调用 Client 端程序时,都可以在不在命令行上 Importing 连接参数的情况下指定连接参数:

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

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

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

  • 可以使用环境变量指定某些连接参数。例子:

有关受支持的环境变量的列 table,请参见第 4.9 节“环境变量”