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

来自泡泡学习笔记
跳到导航 跳到搜索

本节介绍了如何使用命令行选项来指定如何建立与MySQL服务器的连接,适用于诸如mysql或mysqldump之类的客户端。

对于客户端程序要连接到MySQL服务器,它必须使用正确的连接参数,比如运行服务器的主机名、MySQL帐户的用户名和密码。每个连接参数都有一个默认值,但是您可以使用命令行或选项文件中指定的程序选项来覆盖默认值。

这里的示例使用mysql客户端程序,但是这些原则也适用于其他客户端程序,比如mysqldump、mysqladmin或mysqlshow。

这个命令在不指定任何显式连接参数的情况下调用mysql:

mysql

因为没有参数选项,所以应用默认值:

  • 默认主机名是localhost。在Unix上,这有一个特殊的含义,稍后会详细介绍。
  • 默认用户名是Windows上的ODBC,或者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之类的命令来查看密码行。
  • 要明确指定没有密码,并且客户端程序不应提示输入密码,请使用--skip-password选项。

正如刚才提到的,将密码值包含在命令行上是一种安全风险。为了避免这个风险,使用--password或-p选项,但不要在后面加上密码值:

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

当--password或-p选项没有密码值时,客户端程序会打印一个提示,并等待您输入密码。(在这些示例中,mydb不会被解释为密码,因为它与前面的密码选项之间有一个空格。)


在某些系统上,MySQL用于提示密码的库例程会自动将密码限制为八个字符。这个限制是系统库的属性,而不是MySQL的属性。在内部,MySQL对密码的长度没有任何限制。为了解决受此限制影响的系统上的问题,可以在选项文件中指定密码。另一种解决方法是将MySQL密码更改为长度为八个或更少字符的值,但这样做的缺点是较短的密码往往不够安全。

客户端程序确定要建立的连接类型如下:

  • 如果未指定主机名或主机名为localhost,则连接到本地主机:
    • 在Windows上,如果服务器启用了shared_memory系统变量以支持共享内存连接,则客户端使用共享内存连接。
    • 在Unix上,MySQL程序对主机名localhost进行了特殊处理,这与其他基于网络的程序相比可能有所不同:客户端使用Unix套接字文件进行连接。可以使用--socket选项或MYSQL_UNIX_PORT环境变量来指定套接字名称。
  • 在Windows上,如果主机名为.(点),或者未启用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连接到本地服务器。

在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


可以在每次调用客户端程序时在命令行上输入连接参数,也可以在不输入它们的情况下指定连接参数:

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

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


2、某些连接参数可以使用环境变量指定。例如:

要为mysql指定主机,请使用MYSQL_HOST。
在Windows上,要指定MySQL用户名,请使用USER。