本节介绍如何使用命令行选项为mysql或mysqldump之类的客户端指定如何建立与MySQL服务器的连接 。有关使用类似URI的连接字符串或键值对建立连接的信息,对于MySQL Shell之类的客户端,请参见 第4.2.5节“使用类似URI的字符串或键值对连接到服务器”。有关无法连接的其他信息,请参见 第6.2.21节“对连接MySQL的问题进行故障排除”。
为了使客户端程序连接到MySQL服务器,它必须使用正确的连接参数,例如运行服务器的主机名以及MySQL帐户的用户名和密码。每个连接参数都有一个默认值,但是您可以根据需要使用命令行或选项文件中指定的程序选项来覆盖默认值。
此处的示例使用mysql客户端程序,但原理适用于其他客户端,例如 mysqldump,mysqladmin或 mysqlshow。
该命令在不指定任何显式连接参数的情况下调用mysql:
mysql
由于没有参数选项,因此将应用默认值:
- 默认主机名是
localhost。在Unix上,这具有特殊的含义,如下所述。 - 默认用户名
ODBC在Windows上,或者您的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但未指定密码值,则客户端程序会提示您输入密码。输入密码时不会显示。这比在命令行上输入密码更为安全,因为这样做可能使系统上的其他用户通过执行诸如ps之类的命令来查看密码行。请参见 第6.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对密码的长度没有任何限制。要解决受其影响的系统的限制,请在选项文件中指定密码(请参见 第4.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。
仅使用或检查与所选传输协议相关的连接选项。其他连接选项将被忽略。例如, --host=localhost在Unix上,即使指定了--port或 -P选项来指定TCP / IP端口号,客户端也尝试使用Unix套接字文件连接到本地服务器。
为确保客户端与本地服务器建立TCP / IP连接,请使用--host或 -h指定主机名值 127.0.0.1(而不是 localhost),或使用本地服务器的IP地址或名称。您还可以localhost通过使用该--protocol=TCP选项来 明确指定传输协议,甚至对于。例子:
mysql --host=127.0.0.1
mysql --protocol=TCP
如果服务器配置为接受IPv6连接,则客户端可以使用来通过IPv6连接到本地服务器 --host=::1。请参见 第5.1.13节“ IPv6支持”。
在Windows上,要强制MySQL客户端使用命名管道连接,请指定--pipe或 --protocol=PIPE选项,或指定 .(句点)作为主机名。如果服务器不是在named_pipe 启用系统变量以支持命名管道连接的情况下启动的,或者进行连接的用户不是named_pipe_full_access_group 系统变量指定的Windows组的成员, 则会发生错误。--socket如果您不想使用默认管道名称,请使用该 选项指定管道名称。
与远程服务器的连接使用TCP / IP。此命令remote.example.com使用默认端口号(3306)连接到正在运行的服务器:
mysql --host=remote.example.com
要明确指定端口号,请使用 --port或-P 选项:
mysql --host=remote.example.com --port=13306
您也可以指定用于连接到本地服务器的端口号。但是,如前所述,localhost在Unix上,默认情况下,与的连接 使用套接字文件,因此,除非您按照上述说明强制进行TCP / IP连接,否则将忽略指定端口号的任何选项。
对于此命令,程序在Unix上使用套接字文件,并且该 --port选项将被忽略:
mysql --port=13306 --host=localhost
要使用端口号,请强制进行TCP / IP连接。例如,以下列任何一种方式调用程序:
mysql --port=13306 --host=127.0.0.1
mysql --port=13306 --protocol=TCP
有关控制客户端程序如何建立与服务器的连接的选项的更多信息,请参见 第4.2.3节“用于连接至服务器的命令选项”。
每次调用客户端程序时,都可以在不在命令行上输入连接参数的情况下指定连接参数:
-
在
[client]选项文件的部分中指定连接参数 。文件的相关部分可能如下所示:[client] host=host_name user=user_name password=password有关更多信息,请参见第4.2.2.2节“使用选项文件”。
-
可以使用环境变量指定某些连接参数。例子:
- 要指定mysql的主机,请使用
MYSQL_HOST。 - 在Windows上,要指定MySQL用户名,请使用
USER。
有关受支持的环境变量的列表,请参见 第4.9节“环境变量”。
- 要指定mysql的主机,请使用




