本节介绍使用命令行选项 来指定如何为MySQL 或mysqldump等客户端建立 到MySQL服务器的连接。
有关使用类似URI的连接字符串或键值对建立连接的信息,对于MySQL Shell等客户端,请参阅"使用类似URI字符串或键值配对连接到服务器"。
有关无法连接的其他信息,请参阅"连接到MySQL的问题疑难解答"。
客户端程序要连接到MySQL服务器,必须使用正确的连接参数,例如服务器运行的主机名以及MySQL帐户的用户名和密码。
每个连接参数都有一个默认值,但您可以根据需要使用命令行或选项文件中指定的程序选项来替代默认值。
这里的示例使用mysql客户端程序,但这些原则适用于其他客户端,如mysqldump、mysqladmin或mysqlshow。
此命令调用mysql时不指定任何显式连接参数:
mysql
默认主机名为localhost。在Unix上,这有一个特殊的含义,如后所述。
默认用户名在Windows上为ODBC,在Unix上为Unix登录名。
没有发送密码,因为既没有给出--password也没有给出-p。
对于mysql,第一个nonoption参数被作为默认数据库的名称。因为没有这样的参数,mysql不选择默认数据库。
要明确指定主机名和用户名以及密码,请在命令行中提供适当的选项。若要选择默认数据库,请添加数据库名称参数。示例:
sql
mysql --host=localhost --user=myname --password=password mydb
mysql -h localhost -u myname -ppassword mydb
对于密码选项,密码值是可选的:
如果使用--password或-p选项并指定密码值,则--password=或-p与后面的密码之间不得有空格。
如果使用--password或-p但未指定密码值,则客户端程序会提示您输入密码。输入密码时不会显示密码。这比在命令行上提供密码更安全,因为命令行可能使系统上的其他用户能够通过执行ps等命令来查看密码行。
请参阅"密码安全的最终用户指南"。
要明确指定没有密码,并且客户端程序不应提示输入密码,请使用**--skip password选项**。
如前所述,在命令行中包含密码值是一种安全风险。若要避免此风险,请指定--password或-p选项,但不包含以下任何密码值:
sql
mysql --host=localhost --user=myname --password mydb
mysql -h localhost -u myname -p mydb
当提供的--password或-p选项没有密码值时,客户端程序会打印一个提示并等待您输入密码。
(在这些示例中,mydb不会被解释为密码,因为它与前面的password选项之间有一个空格。)
在某些系统上,MySQL用于提示输入密码的库例程会自动将密码限制为八个字符。
这个限制是系统库的属性,而不是MySQL。
在内部,MySQL对密码的长度没有任何限制。
要绕过受其影响的系统的限制,请在配置文件中指定您的密码
请参阅"使用选项文件"。
另一种解决方法是将MySQL密码更改为8个或更少字符的值,但这有一个缺点,即较短的密码往往不太安全。
客户端程序确定要建立的连接类型,如下所示:
如果未指定主机或主机为localhost,则会发生到本地主机的连接:
在Windows上,如果服务器启动时启用了shared_memory系统变量以支持共享内存连接,则客户端使用共享内存进行连接。
在Unix上,MySQL程序对主机名localhost进行了特殊处理,与其他基于网络的程序相比,这种方式可能与您所期望的不同:客户端使用Unix套接字文件进行连接。--socket选项或MYSQL_UNIX_PORT环境变量可用于指定套接字名称。
在Windows上,如果主机为。(period),或者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也是如此。示例:
sql
mysql --host=127.0.0.1
mysql --protocol=TCP
如果服务器配置为接受IPv6连接,则客户端可以使用--host=::1通过IPv6连接到本地服务器
请参阅"IPv6支持"。
在Windows上,要强制MySQL客户端使用命名管道连接,请指定--pipe或--protocol=pipe选项,或指定。(句点)作为主机名。如果服务器启动时未启用named_pipe系统变量以支持命名管道连接,或者进行连接的用户不是named_pipe_full_access_group系统变量指定的Windows组的成员,则会发生错误。如果不想使用默认管道名称,请使用--socket选项指定管道名称。
与远程服务器的连接使用TCP/IP。此命令使用默认端口号(3306)连接到运行在remote.example.com上的服务器:
sql
mysql --host=remote.example.com
要明确指定端口号,请使用--port或-P选项:
sql
mysql --host=remote.example.com --port=13306
您也可以指定连接到本地服务器的端口号。
但是,如前所述,默认情况下,到Unix上localhost的连接使用套接字文件,因此除非如前所示强制TCP/IP连接,否则任何指定端口号的选项都将被忽略。
对于此命令,程序在Unix上使用一个套接字文件,并忽略--port选项:
sql
mysql --port=13306 --host=localhost
要使用端口号,请强制建立TCP/IP连接。例如,通过以下任一方式调用程序:
sql
mysql --port=13306 --host=127.0.0.1
mysql --port=13306 --protocol=TCP
有关控制客户端程序如何与服务器建立连接的配置的更多信息,
请参阅"连接到服务器的命令选项"。
可以指定连接参数,而无需每次调用客户端程序时在命令行中输入这些参数:
sql
[client]
host=host_name
user=user_name
password=password
有关更多信息,请参阅"使用配置文件"。
可以使用环境变量指定某些连接参数。示例:
要指定mysql的主机,请使用mysql_host。
在Windows上,要指定MySQL用户名,请使用user。
有关支持的环境变量的列表,请参阅"环境变量"。
未完待续...