为了使客户端程序能连接到MySQL服务器,它必须使用适当的连接参数,例如运行服务器的主机名以及用户名和密码。每个连接参数都有一个默认值,但是您可以根据需要使用命令行或选项文件中的值来覆盖默认值。
这里的示例使用mysql客户端程序,但同样适用于其他客户端,例如 mysqldump,mysqladmin或 mysqlshow。
在不指定任何显式连接参数的情况下调用mysql:
mysql
由于没有参数选项,因此将应用默认值:
默认主机名是localhost。在Unix上,它具有特殊的含义,如下所述。
Windows上默认用户名ODBC在,在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或history之类的命令来查看密码行。
要明确指定没有密码,并且客户端程序不应提示输入密码,请使用该 --skip-password 选项。
在某些系统上,MySQL用于提示输入密码的例程会自动将密码限制为八个字符。该限制是系统库的属性,而不是MySQL的属性。在内部,MySQL对密码的长度没有任何限制。要解决受其影响的系统的限制,请在选项文件中指定密码。另一个解决方法是将您的MySQL密码更改为八个字符或更少字符的值,但这可能是不可接受的,因为较短的密码往往不太安全。
客户端程序确定要进行的连接类型如下:
1、如果未指定主机或为 localhost,则会与本地主机的连接:
在Windows上,如果服务器是在shared_memory启用了支持共享内存连接的系统变量的情况下启动的,则客户端使用共享内存连接进行连接。
在Unix上,MySQL程序特别对待主机名localhost ,与其他基于网络的程序相比,它可能与您期望的方式不同:客户端使用Unix套接字文件进行连接。该--socket 选项或MYSQL_UNIX_PORT 环境变量可用于指定套接字名称。2、 在Windows上,如果host是. ,或者未启用TCP/IP 且--socket未指定或主机为空,则如果服务器在named_pipe启用系统变量的情况下启动以支持named-pipe(命名管道)连接,则客户端使用命名管道进行连接。如果不支持命名管道连接,或者建立连接的用户不是named_pipe_full_access_group 系统变量指定的Windows组的成员, 则会发生错误。
3、否则,连接将使用TCP / IP。
--protocol选项使您可以建立特定类型的连接,即使其他选项使用其他协议也是如此。也就是说, --protocol明确指定连接协议,并覆盖前面的规则,即使对于localhost。
仅使用或选中与所选协议相关的连接选项,其他连接选项将被忽略。例如,在Unix上用--host=localhost,客户端尝试使用Unix套接字文件连接到本地服务器,即使给定了--port或-P选项来指定端口号 。
为确保客户端与本地服务器建立TCP/IP连接,请使用--host或 -h将主机名值指定为 127.0.0.1,或者使用本地服务器的IP地址或名称。您还可以在localhost的情况下通过使用该--protocol=TCP选项来显式指定连接协议。例子:
mysql --host=127.0.0.1
mysql --protocol=TCP
如果服务器配置为接受IPv6连接,则客户端可以使用来通过IPv6连接到本地服务器 --host=::1。
在Windows上,您可以通过指定--pipeor --protocol=PIPE选项或通过指定.(句点)作为主机名来强制MySQL客户端使用命名管道连接 。如果服务器不是在 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]选项文件的部分中指定连接参数 。文件的相关部分可能如下所示:
[client]
host=host_name
user=user_name
password=password
可以使用环境变量指定某些连接参数。例子:
要指定mysql的主机,请使用 MYSQL_HOST。
在Windows上,要指定MySQL用户名,请使用 USER。