vivenwan 2019-12-19
使用命令选项连接到MySQL服务器(参考MySQL官方文档)
本文介绍如何使用命令行选项为MySQL或mysqldump等客户端指定如何建立到MySQL服务器的连接。
客户端程序要连接到MySQL服务器,必须使用正确的连接参数,例如服务器运行的主机名和MySQL帐户的用户名和密码。
每个连接参数都有一个默认值,但可以根据需要使用在命令行或选项文件中指定的程序选项覆盖默认值。
这里的示例使用mysql客户机程序,但原则适用于其他客户机,如
mysqldump, mysqladmin, or mysqlshow.
此命令调用mysql而不指定任何显式连接参数:
mysql
由于没有参数选项,因此应用默认值:
•默认主机名为localhost。在Unix上,这有一个特殊的含义,如后文所述。
•默认用户名是Windows上的ODBC或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等命令来查看密码行
•要显式指定没有密码,并且客户端程序不应提示输入密码,请使用--skip password选项。
如前所述,在命令行中包含密码值可能会带来安全风险。若要避免此风险,请指定--password或-p选项,而不指定以下任何密码值:
mysql --host=localhost --user=myname --password mydb
mysql -h localhost -u myname -p mydb
当--password或-p选项没有密码值时,客户机程序会打印一个提示并等待您输入密码。(在这些示例中,mydb不被解释为密码,因为它与前面的密码选项用空格分隔。)
在某些系统上,MySQL用来提示输入密码的库例程会自动将密码限制为8个字符。这个限制是系统库的属性,而不是MySQL。
在内部,MySQL对密码的长度没有任何限制。另一种解决方法是将MySQL密码更改为包含8个或更少字符的值,但这可能是不可接受的,因为较短的密码往往不太安全。
客户端程序确定要建立的连接类型,如下所示:
•如果未指定主机或主机为本地主机,则会发生到本地主机的连接:
•在Windows上,如果服务器是用
已启用共享内存系统变量以支持共享内存连接。
•在Unix上,MySQL程序特别对待主机名localhost,其方式可能不同于其他基于网络的程序:客户端使用Unix套接字文件进行连接。--socket选项或MYSQL_UNIX_PORT环境变量可用于指定套接字名称。
•在Windows上,如果主机是。(句点),或者TCP/IP未启用并且--未指定套接字或主机为空,如果服务器是使用命名管道启动的,则客户端使用命名管道连接
已启用系统变量以支持命名管道连接。如果不支持命名管道连接,或者进行连接的用户不是由命名管道完全访问组系统变量指定的Windows组的成员,则会发生错误。
•否则,连接使用TCP/IP。
--protocol选项允许您建立特定类型的连接,即使其他选项通常会导致使用不同的协议。也就是说,-protocol显式指定连接协议并重写前面的规则,即使对于localhost也是如此。
仅使用或选中与所选协议相关的连接选项。其他连接选项将被忽略。例如,在Unix上使用--host=localhost时,客户端尝试使用Unix套接字文件连接到本地服务器。即使给定了--port或-P选项来指定端口号,也会发生这种情况。
要确保客户端与本地服务器建立TCP/IP连接,请使用--host或-h指定主机名值127.0.0.1,或本地服务器的IP地址或名称。您还可以使用--protocol=TCP选项显式地指定连接协议,即使对于localhost也是如此。示例:
mysql --host=127.0.0.1
mysql --protocol=TCP
如果服务器配置为接受IPv6连接,则客户端可以使用--host=::1通过IPv6连接到本地服务器。
在Windows上,可以通过指定--pipe或--protocol=PIPE选项,或通过指定。(句点)作为主机名。
如果服务器启动时未启用支持命名管道连接的命名管道系统变量,或者进行连接的用户不是由命名管道完全访问组系统变量指定的Windows组的成员,则会发生错误。
如果不想使用默认管道名称,请使用--socket选项指定管道的名称。
到远程服务器的连接使用TCP/IP。此命令连接到运行使用默认端口号(3306)的remote.example.com:
mysql --host=remote.example.com
要显式指定端口号,请使用--port或-P选项:
mysql --host=remote.example.com --port=13306
您也可以为到本地服务器的连接指定端口号。但是,如前所述,到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
•在选项文件的[client]部分指定连接参数。文件的相关部分可能如下所示:
[client]
host=host_name
user=user_name
password=password
2、连接压缩控制
到服务器的连接可以使用压缩协议来减少通过连接发送的字节数。默认情况下,连接是未压缩的,但如果服务器和客户端都支持压缩,则可以压缩连接。
压缩连接源于客户端,但会影响客户端和服务器端的CPU负载,因为双方都执行压缩和解压缩操作。
由于启用压缩会降低性能,因此其好处主要出现在网络带宽较低的情况下,网络传输时间控制压缩和解压缩操作的成本,并且结果集很大。
压缩控制应用于客户端程序和参与主/从复制的服务器到服务器的连接。压缩控制不适用于组复制连接、X协议连接或联合表的连接。
这些配置参数可用于控制连接压缩:
•客户机程序支持一个--compress命令行选项来指定到服务器的连接使用压缩。
•对于使用MySQL C API的程序,函数的作用是:指定服务器连接的压缩方式。
•对于主/服务器复制,启用slave_compressed_protocol系统变量指定对主服务器的从连接使用压缩。
在每种情况下,当指定使用压缩时,如果双方都支持,则连接使用zlib压缩算法,否则将回退到未压缩的连接。
3、设置环境变量
可以在命令提示符处设置环境变量以影响命令处理器的当前调用,也可以永久设置环境变量以影响将来的调用。
要永久设置变量,可以在启动文件或使用系统为此提供的接口。
要为环境变量指定值,请使用适合于命令处理器的语法。例如,在Windows上,可以设置USER变量来指定MySQL帐户名。为此,请使用以下语法:
SET USER=your_name
Unix上的语法取决于shell。假设要使用MYSQL_TCP_port变量指定TCP/IP端口号。典型语法(如sh、ksh、bash、zsh等)如下:
MYSQL_TCP_PORT=3306
export MYSQL_TCP_PORT
第一个命令设置变量,export命令将变量导出到shell环境,以便MySQL和其他进程可以访问其值。
对于csh和tcsh,使用setenv使shell变量对环境可用:
setenv MYSQL_TCP_PORT 3306
设置环境变量的命令可以在命令提示下执行以立即生效,但这些设置仅在注销之前保持有效。
要使设置在每次登录时生效,请使用系统提供的界面,或将适当的一个或多个命令放在启动文件中,命令解释器在每次启动时都会读取该文件。
在Windows上,可以使用系统控制面板(在“高级”下)设置环境变量。在Unix上,典型的shell启动文件是.bashrc或.bash_profile(用于bash)或.tcshrc(用于tcsh)。
假设您的MySQL程序安装在/usr/local/MySQL/bin中,并且您希望调用这些程序很容易。
为此,请将PATH环境变量的值设置为包含该目录。例如,如果shell是bash,请将以下行添加到.bashrc文件中:
PATH=${PATH}:/usr/local/mysql/bin
bash对登录和非登录shell使用不同的启动文件,因此您可能希望将设置添加到
.bashrc用于登录shell,to.bash_profile用于非登录shell,以确保路径设置不变。
如果shell是tcsh,请将以下行添加到.tcshrc文件中:
setenv PATH ${PATH}:/usr/local/mysql/bin
如果在您的主目录中不存在适当的启动文件,则使用文本编辑器创建它。
修改路径设置后,请在Windows上打开一个新的控制台窗口,或在Unix上再次登录,以便该设置生效。