4.2.2连接到MySQL服务器
本节介绍如何建立与MySQL服务器的连接。有关无法连接的其他信息,请参见第6.2.7节“连接到MySQL的故障排除”。
对于能够连接到MySQL服务器的客户端程序,它必须使用正确的连接参数,例如运行服务器的主机的名称以及MySQL帐户的用户名和密码。每个连接参数都有一个默认值,但是您可以根据需要使用在命令行或选项文件中指定的程序选项覆盖它们。
这里的示例使用mysql客户端程序,但这些原则适用于其他客户端,如mysqldump,mysqladmin或mysqlshow。
此命令调用mysql而不指定任何连接参数:
shell> mysql
因为没有参数选项,所以默认值适用:
默认的主机名是
localhost
。在Unix上,具有特殊的含义,如下所述。ODBC
Windows上的默认用户名或Unix上的Unix登录名。如果没有
-p
也不会发送密码--password
。
要明确指定主机名和用户名以及密码,请在命令行中提供相应的选项:
shell> mysql --host=localhost --user=myname --password=mypass mydb
shell> mysql -h localhost -u myname -p mypass mydb
对于密码选项,密码值是可选的:
如果使用
-p
或--password
选项并指定密码值,则密码之间或之后的密码之间不得有空格。-p
--password=
如果使用
-p
或--password
选项但不指定密码值,客户端程序将提示您输入密码。输入密码时不显示密码。这比在命令行上提供密码更安全。您的系统上的其他用户可能可以通过执行诸如ps auxw之类的命令来查看在命令行中指定的密码。请参见第6.1.2.1节“密码安全的最终用户指南”。
刚刚提及,包括命令行上的密码值可能是一个安全隐患。为避免此问题,请指定--password
或-p
选项,不带任何以下密码值:
shell>mysql --host=localhost --user=myname --password mydb
shell> mysql -h localhost -u myname -p mydb
当密码选项没有密码值时,客户端程序会打印提示并等待您输入密码。(在这些实例中,mydb
是不解释为密码,因为它是从由空间中的前述密码选项分开。)
在某些系统上,MySQL用于提示输入密码的库例程自动将密码限制为八个字符。这是系统库的问题,而不是MySQL。在内部,MySQL对密码的长度没有任何限制。要解决此问题,请将MySQL密码更改为八个或更少字符的值,或将密码置于选项文件中。
在Unix上,MySQL程序特别处理主机名localhost
,方式可能与您期望与其他基于网络的程序相比有所不同。对于localhost
连接,MySQL程序尝试使用Unix套接字文件连接到本地服务器。即使给出了一个--port
或一个-P
选项来指定端口号,也会发生这种情况。要确保客户端与本地服务器进行TCP / IP连接,请使用--host
或-h
指定主机名称127.0.0.1
,或本地服务器的IP地址或名称。您也可以localhost
通过使用该--protocol=TCP
选项来明确指定连接协议。例如:
shell> mysql --host=127.0.0.1
shell> mysql --protocol=TCP
该--protocol
选项使您能够建立特定类型的连接,即使其他选项通常默认为其他协议。
如果服务器配置为接受IPv6连接,则客户端可以使用IPv6连接--host=::1
。请参见第5.1.9节“IPv6支持”。
在Windows上,您可以强制MySQL客户端通过指定--pipe
或--protocol=PIPE
选项使用命名管道连接,或通过指定.
(句点)作为主机名。如果命名管道连接未启用,则会发生错误。--socket
如果您不想使用默认管道名称,请使用该选项来指定管道的名称。
与远程服务器的连接总是使用TCP / IP。此命令连接到remote.example.com
使用默认端口号(3306)运行的服务器:
shell> mysql --host=remote.example.com
要明确指定端口号,请使用--port
或-P
选项:
shell> mysql --host=remote.example.com --port=13306
您也可以指定连接到本地服务器的端口号。但是,如前所述,localhost
默认情况下,Unix上的连接将使用套接字文件。您将需要强制已经描述的TCP / IP连接,或任何指定端口号的选项将被忽略。
对于此命令,该程序使用Unix上的套接字文件,该--port
选项被忽略:
shell> mysql --port=13306 --host=localhost
要使端口号使用,可以通过以下任一方式调用程序:
shell> mysql --port=13306 --host=127.0.0.1
shell> mysql --port=13306 --protocol=TCP
以下列表总结了可用于控制客户端程序如何连接到服务器的选项:
--host=host_name
,-hhost_name
服务器正在运行的主机。默认值为
localhost
。--password[=pass_val
],-p[pass_val
]MySQL帐户的密码。如前所述,密码值是可选的,但如果给出,则密码之后或之后的密码之间不得有空格。默认是发送无密码。
-p
--password=
--pipe
,-W
在Windows上,使用命名管道连接到服务器。必须启动服务器
--enable-named-pipe
以启用命名管道连接的选项。--port=port_num
,-Pport_num
用于连接的端口号,用于使用TCP / IP进行连接。默认端口号为3306。
--protocol={TCP|SOCKET|PIPE|MEMORY}
此选项明确指定用于连接到服务器的协议。当其他连接参数通常会导致使用协议以外的其他连接参数时,这是非常有用的。例如,
localhost
Unix上的连接默认使用Unix套接字文件:shell> mysql --host=localhost
要强制使用TCP / IP连接,请指定一个
--protocol
选项:shell> mysql --host=localhost --protocol=TCP
下表显示了允许的
--protocol
选项值,并指示可以使用每个值的平台。值不区分大小写。|
--protocol
| 值 | 连接协议 | 允许的操作系统 | | :--- | :--- | :--- | :--- | | |TCP
| TCP / IP连接到本地或远程服务器 | 所有 | | |SOCKET
| Unix套接字文件连接到本地服务器 | 只有Unix | | |PIPE
| 命名管道连接到本地或远程服务器 | 仅Windows | | |MEMORY
| 共享内存连接到本地服务器 | 仅Windows |--shared-memory-base-name=name
在Windows上,要使用的共享内存名称,用于使用共享内存到本地服务器的连接。默认值为
MYSQL
。共享内存名称区分大小写。必须启动服务器
--shared-memory
以启用共享内存连接的选项。--socket=file_name
,-Sfile_name
在Unix上,使用命名管道连接到本地服务器的Unix套接字文件的名称。默认的Unix套接字文件名是
/tmp/mysql.sock
。在Windows上,要连接到本地服务器的命名管道的名称。默认的Windows管道名称是
MySQL
。管道名称不区分大小写。必须启动服务器
--enable-named-pipe
以启用命名管道连接的选项。--ssl*
--ssl
如果服务器配置了SSL支持,则开始的选项用于使用SSL建立与服务器的安全连接。有关详细信息,请参见第6.4.5节“安全连接的命令选项”。--user=user_name
,-uuser_name
要使用的MySQL帐户的用户名。
ODBC
Windows上的默认用户名或Unix上的Unix登录名。
可以指定连接时要使用的不同默认值,以便每次调用客户端程序时都不需要在命令行中输入它们。这可以通过几种方式完成:
您可以在
[client]
选项文件的部分中指定连接参数。该文件的相关部分可能如下所示:[client] host = host_name user = user_name password = your_pass
第4.2.6节“使用选项文件”进一步讨论选项文件。
您可以使用环境变量指定一些连接参数。可以为mysql指定主机使用
MYSQL_HOST
。可以使用USER
(仅适用于Windows)指定MySQL用户名。密码可以使用MYSQL_PWD
,虽然这是不安全的;请参阅第6.1.2.1节“密码安全最终用户指南”。有关变量的列表,请参见第4.9节“MySQL程序环境变量”。