本节介绍如何使用命令行选项来指定如何建立与 MySQL 服务器的连接,适用于 mysql 或 mysqldump 等客户端。有关使用类似 URI 的连接字符串或键值对建立连接的信息,适用于 MySQL Shell 等客户端,请参阅第 6.2.5 节“使用类似 URI 的字符串或键值对连接到服务器”。如果您无法连接,请参阅第 8.2.22 节“解决连接到 MySQL 的问题”以获取更多信息。
为了使客户端程序连接到 MySQL 服务器,它必须使用正确的连接参数,例如运行服务器的主机名以及 MySQL 帐户的用户名和密码。每个连接参数都有一个默认值,但您可以根据需要使用在命令行或选项文件中指定的程序选项来覆盖默认值。
此处的示例使用 mysql 客户端程序,但这些原则也适用于其他客户端,例如 mysqldump、mysqladmin 或 mysqlshow。
此命令调用 mysql 时没有指定任何显式连接参数
mysql
由于没有参数选项,因此将应用默认值
默认主机名为
localhost
。在 Unix 上,这具有特殊含义,如下所述。默认用户名在 Windows 上为
ODBC
,在 Unix 上为您的 Unix 登录名。不会发送密码,因为没有给出
--password
或-p
。
要显式指定主机名和用户名以及密码,请在命令行上提供适当的选项。要选择默认数据库,请添加数据库名参数。示例:
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
时,即使给出了 --port
或 -P
选项来指定 TCP/IP 端口号,客户端也会尝试使用 Unix 套接字文件连接到本地服务器。
为确保客户端与本地服务器建立 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 节“环境变量”。