【译文】如何正确设定MySQL程序的选项

MySQL手册文档版本:5.6 

章节:4.2 Using MySQL Programs 

略去了部分windows下使用mysql的相关的说明

译者:古二娃

时间:2015-03-15

章节目录:

4.2 Using MySQL Programs 
    4.2.1 Invoking MySQL Programs 
    4.2.2 Connecting to the MySQL Server
    4.2.3 Specifying Program Options
        4.2.3.1 Using Options on the Command Line
        4.2.3.2 Program Options Modifiers
        4.2.3.3 Using Option Files 
        4.2.3.4 Command-Line Options that Affet Option-File Handling
        4.2.3.5 Using Options to Set Program Variables 
        4.2.3.6 Option Defaults, Options Expecting Values, and the = Sign 
    4.2.4 Setting Environment Variables
4.2 使用MySQL程序
    4.2.1 调用MySQL程序
    4.2.2 连接MySQL服务器
    4.2.3 设定程序选项
        4.2.3.1 在命令行中设定选项
        4.2.3.2 选项修正
        4.2.3.3 使用配置文件
        4.2.3.4 影响配置文件使用的选项
        4.2.3.5 使用选项设置程序变量
        4.2.3.6 选项默认参数值
    4.2.4 设置MySQL相关环境变量

4.2 Using MySQL Programs 

4.2.1 Invoking MySQL Programs

MySQL提供了很多程序,如下示例显示了如何在shell中调用MySQL程序:

shell> mysql --user=root test
shell> mysqladmin extended-status variables
shell> mysqlshow --help
shell> mysqldump -u root personnel

有一些选项是通用的,最常用的有:

--host(-h)  #连接的主机
--user(-u)  #用户名
--password(-p) #密码
--port(-P) #MySQL服务程序端口号
--socket(-S) #本地登录可指定Uinx域的socket文件(在windows系统为named pipe文件)

如果在安装好mysql客户端程序后,直接输入mysql,却出现错误提示“program not found”.

则可能是因为mysql程序所在的路径,还没有加入到PATH环境变量之中,如何设定在4.2.4小节中会有所提及。

也可以使用全路径名的方式可以启动mysql客户端,例如:/usr/local/mysql/bin/mysql -u test -p 

4.2.2 Connecting to the MySQL Server

mysql的客户端程序有很多,如:mysql, mysqldump, mysqladmin, mysqlshow

这里所说的规则对于这些客户端程序是通用的。

如果不加任何的连接选项,直接调用mysql客户端实际上使用的是连接选项中预设的默认值。

shell> mysql 

分别有:

1,--host=localhost
2,--user=login_name(Unix系统,默认使用登陆名。windows系统,默认名为ODBC)
3,如果没有给出-p或--password选项,即表示no password is given,没有默认的密码。
4,对于mysql客户端,第一个非选项的参数被视为默认的库名。如果没有提供,mysql不会选择任何库
作为默认库。

而我们一般要自己指定这些连接选项的值,选项有完全形式和简写形式:

shell> mysql --host=localhost --user=myname --password=mypass mydb
shell> mysql -h localhost -u myname -pmypass mydb

要注意,密码选项提示符后没有空格。

另外,登陆密码最好是不要这样写出来,可能会泄露。如果你系统上的其他登录用户,使用

ps auxw命令,可能就能看到你写的密码。

你可以这样写:

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

然后看到提示符,等你输入密码,输入的密码不会显示出来的。

在一些系统上面,有可能要求你输入的密码不能多于8个字符,这跟MySQL本身的限制无关,只不过

在验证登录这个环节,mysql客户端程序使用了系统的库程序,这是库程序的限制。可以将密码写入配置文件,

以避免此问题。当然修改密码的长度也是可以的。

Unix系统上面,MySQL对于host=localhost的情况有比较特殊的处理。这时不会建立到本机的tcp连接,

而是尝试使用Unix socket file去连接本地的MySQL服务程序,即使使用–port指定了端口号也是如此。

如果一定要建立tcp连接,可使用如右所示的一种:–host=127.0.0.1–host=hostname, –host=IPADDR

或者指定–protocol=TCP,可达到一样的效果,这时即使–host=localhost,也会建立tcp连接。

shell> mysql --host=127.0.0.1
shell> mysql --protocol=TCP

mysql客户端会首选使用–protocol选项指定的连接方式,与其他选项所默认的连接方式有不同的话,

–protocol指定的为准。

IPv6的地址示例:

host=::1. 详见Section 5.1.9 “IPv6 Support”


使用mysql客户端访问远程服务器,只能以建立tcp连接的方式访问,默认端口号3306:

shell> mysql --host=remote.example.com

当端口号不是默认的3306时,也可指定端口号如–port=13306 或者 -P 13306

shell> mysql --host=remote.example.com --port=13306

访问本地服务器时,你也可指定端口号,但你需要强制使用TCP/IP方式访问。否则你所指定的端口号会被忽略。

如下是不可行的:

shell> mysql --port=13306 --host=localhost

可以使用这样的方式:

shell> mysql --port=13306 --host=127.0.0.1
shell> mysql --port=13306 --protocol=TCP

这里总结一下用到的连接选项:

–host=host_name, -h host_name

指定服务器主机名,或IP地址。默认值是localhost

–password[=pass_val], -p[pass_val]

指定密码,[]内可不填,如不填,在敲入命令后会有提示符要求你输入密码,填写时密码不会显示在屏幕上。

如果直接在命令行中填写密码,在–password=-p后不能有空格符,如-pmypass

–port=port_num, -P port_num

指定连接端口号,默认为3306

–protocol={TCP|SOCKET|PIPE|MEMORY}

明确指定连接方式,解释如前所述。TCP是建立TCP/IP连接,SOCKET是使用Unix socket file连接。

其余选项用于windows系统。选项值大小写均可。

shell> mysql --host=localhost

host=localhost时,默认使用的Unix socket file连接。

shell> mysql --host=localhost --protocol=TCP

明确指定以TCP/IP方式连接

–socket=file_name, -S file_name

Unix系统中使用socket文件连接本机服务程序时使用,指定socket文件路径。默认值为/tmp/mysql.socket

windows系统下可用named pipe文件建立连接,具体如何使用,在此不详述了。

参见本章的英文文档,版本5.6

–ssl*

如果MySQL服务器配置了可以支持ssl连接,那么这一系列选项可以用以建立ssl连接.详见Section 6.3.10.4 “SSL Command Options”

–user=user_name, -u user_name

MySQL账户的用户名,在Unix上默认为系统登录名。

我们也可以在环境变量和配置文件中,指定连接选项的值。当然不是很安全。

在配置文件中的[client]区域下,可如下设置:

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

详见Section4.2.3.3“Using Options Files”

在环境变量中,使用MYSQL_HOST指定主机,MYSQL_PWD指定密码

详见Section 6.1.2.1 “End-User Guidelines for Password Security”

MySQL有哪些相关的环境变量,详见Section 2.11 “Environment Variables”

4.2.3 Specifying Program Options

可以通过环境变量,配置文件,命令行参数三种方式设定程序的启动参数。

读取的顺序是:

1, 环境变量 

2,配置文件 

3,命令行参数 

选项的设置值以最后读取到的为准。

环境变量的方式用的不多,一般是用配置文件设定参数。

不过在Section 5.3.3 “Running Multiple MySQL Instances on Unix”章节讨论了一个应用场景,

环境变量会很有用。

选项的处理有一定的顺序,一个选项如果设定了两次,那么后一次会覆盖前面一次的设置。

如下,生效的是localhost

shell> mysql -h example.com -h localhost

再如, 生效的是–skip-column-names

shell> mysql --column-names --skip-column-names

4.2.3.1 Using Options on the Command Line


在命令行中指定选项有如下的一些规则:

1,选项在命令之后给出

2,选项如–help, -?表示同一个意思。–help是完整写法,-?是简写。很多选项都有这两种形式的写法。

3,大小写的选项名有不同含义。如-v表示–verbose-V表示–version。即所谓对大小写敏感。

4,有些选项需要指定参数,如-h localhost–host=localhost.

5,完整选项名参数赋值方式是–host=localhost,是等号。简写的赋值方式是-h localhost或者-hlocalhost

这两种都可以。唯有一个例外是关于密码的选项:–password=pass_val–password,后者的写法不加参数,

但在敲入命令后会提示你输入密码。再者它有一个简写法-ppass_val-p-ppass_val不能写成-p pass_val

因为这样写系统无法分辨pass_val到底是密码参数还是别的什么参数,前面也有示例这个参数被认为是一个库名。

如下,两种写法代表不同的意义:

shell> mysql -ptest
shell> mysql -p test

前者test被识别为密码。后者会提示你输入密码,且将test做为默认的数据库。

6,如–skip-grant-tables–skip_grant_tables的写法是等效的。当然写成__skip_grant_tables是不行的。

其它选项可依次类推。

7,选项的参数如果是数字,可有如右的几种写法:1K1M1G(或者1k, 1m, 1g)1K代表1024

1M代表1024*10241G代表1024*1024*1024

如下,mysqladmin会每隔10ping一次,一共1024次:

mysql> mysqladmin --count=1K --sleep=10 ping 

如果选项参数值包含有空格,则需要用“”引用起来。例如通过mysql客户端使用–execute(-e)选项可用来发起

一个SQL请求。得到返回结果后退出。

shell> mysql -u root -p --execute="SELECT User, Host FROM mysql.user"
Enter password: ******
+--------+-----------+
| User   | Host      |
+--------+-----------+
|        | gigan     |
| root   | gigan     |
|        | localhost |
| jon    | localhost |
| root   | localhost |
+--------+-----------+
shell>

如果在SQL语句内使用引号,要么使用转义符\,要么在语句内外使用不同的引号。如“……’xxxx’…..”

主要看你的命令程序支持哪一种写法。


可一次执行多个SQL语句,使用分号隔开,如下:

shell> mysql -u root -p -e "SELECT VERSION();SELECT NOW()"
Enter password: ******
+-----------------+
| VERSION()       |
+-----------------+
| 5.1.5-alpha-log |
+-----------------+
+---------------------+
| NOW()               |
+---------------------+
| 2006-01-05 21:19:04 |
+---------------------+

4.2.3.2 Program Options Modifiers


关于选项的修正。有些选项有着bool变量的特性,可以去打开或关闭。如–column-names决定了是否在查询结果

中显示字段名。默认开启,可以通过如下三种方式关闭:

--disable-column-names
--skip-column-names
-column-names=0

可以通过如下方式开启:

--column-names
--enable-column-names
--column-names=1

MySQL 5.6.2之后,也可以使用ON,TRUE,OFF,FALSE作为选项值。


如下,返回的结果没有显示字段名:

shell> mysql -u root -p --column-names=0 --execute="SELECT User, Host FROM mysql.user"
Enter password: ******
+------+------------+
|      | gigan      |
| root | gigan      |
|      | localhost  |
| jon  | localhost  |
| root | localhost  |
+------+------------+

如果一个选项加上–loose前缀,即使程序不能识别该选项,也不会退出和返回错误。只是返回一个警告并继续。

如果一台机器上有多个版本的MySQL运行,有些旧的版本不能识别的新选项,即可加上这个前缀。这样新旧版本

的程序可读取同一份配置文件,而能正常运行。

shell> mysql --loose-no-such-option
mysql: WARNING: unknown option '--no-such-option'

对于mysqld程序,可以通过一个–maximun前缀限制某些动态系统变量的最大值。

–maximun-query_cache_size=4M,表示最大的查询缓存不能大过4M


4.2.3.3 Using Option Files 


可通过如mysqldump –help, (对于mysqldmysqld –verbose –help)查看mysql程序在启动时会查找的

各个配置文件的路径和顺序。

Unix系统上,MySQL程序按照顺序查找以下的路径中存在的配置文件:

/etc/my.cnf  #Global options
/etc/mysql/my.cnf #Global options
SYSCONFDIR/my.cnf  #Global options
$MYSQL_HOME/my.cnf  #Server-specific options 
defaults-extra-file #The file specified with --defaults-extra-file=path, if any
~/.my.cnf  #User-specific options 
~/.mylogin.cnf #Login path options

1,~代表当前登录用户的家目录,即$HOME 

2,SYSCONFDIR代表的路径,是由CMake编译MySQL时,通过SYSCONFDIR选项指定。默认是MySQL安装路径下的etc目录。

3,MYSQL_HOME …如果MYSQL_HOME没有设置,而你使用了mysqld_safe启动MySQL, MYSQL_HOME按照一定的规则,

要么=BASEDIR, 要么=DATADIR。具体参见本手册,本章节,本小段

4,在MySQL 5.6中,DATADIR已被弃用。

5,DATADIR–datadir是不同的。DATADIR用于查找配置文件,其值在MySQL安装配置时指定,–datadir用于在mysqld启动时,指定数据目录。(此段不一定准确,建议看原文)


如果在多个配置文件中出现同一个选项,以最后读取到的配置文件为准。不过对于mysqld有一个例外,

对于–user选项,以第一次读取到的选项配置为准。这是为了避免用户自定义的配置文件对这个选项值的覆盖。


另外在Unix上,出于安全性的考量,如果一个配置文件对于所有用户有写权限,那么这个配置文件不被采用。

命令行中选项的完全形式,也可以写到配置文件中。可通过–help查看MySQL支持哪些选项。


如果命令行中的选项是–host=localhost, 则在配置文件写host=localhost就是等效的。去掉符号就可以了。

具体来讲,配置文件的写法如下:

# coment, ; coment 

“#”,或者“;”开始的行,表示注释。特别对于“#”,可以在一行的任意位置使用,其后的内容也被识别为注释,不一定要放在行首。

[group]

group是一个MySQL程序名,或者一个组,对大小写不敏感。其后的选项表示特别为这个程序或组所使用。

例如:

[group1]
xxx
[group2]
***

xxx代表的选项为group1使用,***代表的选项为group2使用。

opt_name

与命令行中的–opt_name等效

opt_name=value

与命令行中的–opt_name=value等效。在配置文件中,“=”两边可以有空格,而这在命令行中不被允许。

value值可以用单引号或双引号引起来。例如value值中含有#符号的话,就可以用引号,否则会被识别为注释符。

对于选项值来说,如下的字符有特殊的含义:

\b #backspace
\t  #tab
\n  #new line 
\r  #carriage return 
\\  #backslash 即是\
\s  #space 

除开以上的情况,\仅仅是一个字符。

对于SQL语句中的字符,转义规则稍有不同。对于SQL语句,如果\x没有特殊的含义,也会识别为x,而不是\x

对于windows系统下的文件路径的讨论,此处暂时略去。


[client]组的设置,对于所有的客户端程序生效(不包括mysqld)。你可以在[client]组中设置password

这时注意要保证这个选项文件只对文件的属主用户具有可读写权限,避免其他人看到密码。

因为所有的客户端程序都会用到[client]下的选项,如果有的程序不能识别其中的个别选项,该程序会

返回错误并退出。


译者注,未验证:Section 4.2.3.2 Program Options Modifiers 提到–loose前缀此时应该就有用了。个别的选项前加上前缀如:loose-some-option,这样不能识别该选项的客户端程序在启动时,只会返回警告,不会返回错误和退出。


如下,是一个全局配置文件的示例:

[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M
[mysqldump]
quick

如下,是一个用户配置文件示例:

[client]
# The following password will be sent to all standard MySQL clients
password="my_password"
[mysql]
no-auto-rehash
connect_timeout=2
[mysqlhotcopy]
interactive-timeout

在配置文件中,还可以为某个版本的程序设置组,如下是属于5.6.x版本的MySQL服务程序的组:

[mysqld-5.6]
new

可使用!include来引用其他配置文件,可以用!includedir来引用包含配置文件的路径

如果引用/home/mydir/myopt.cnf文件,如下:

!include /home/mydir/myopt.cnf

如果引用/home/mydir中的配置文件,如下,注意其中的有多个配置文件的话,引用的顺序不确定,

且在Unix系统中,必须保证该路径下有以.cnf为后缀的文件:

!includedir /home/mydir

在处理引用配置文件时,不同的程序只读取其中与自身匹配的组下面的选项设置。

如下,如果my.cnf包含如下的行:

!include /home/mydir/myopt.cnf

/home/mydir/myopt.cnf中有如下的内容:

[mysqladmin]
force
[mysqld]
key_buffer_size=16M

如果是mysqld读取/home/mydir/myopt.cnf,只使用[mysqld]下的内容。如果是mysqladmin读取my.cnf,只使用[mysqladmin]下的内容。

!includedir的使用是类似的。


4.2.3.4 Command-Line Options that Affet Option-File Handling


前面讲过MySQL程序的启动参数可以通过一下三种方式设置,顺序如下:

1,环境变量

2,配置文件

3,命令行参数


而对于会影响到如何使用配置文件的特殊选项,需要在命令行中去设置,且为了保证这些选项发挥作用,

这种命令行选项必须放在其他选项的的前面,不过也有少数例外,先说几个例外情况:

–print-defaults –defaults-file 或 –defaults-extra-file一起使用时,需放在这两个选项之后。

(原文:may be used immediately after –defaults-file[257]or –defaults-extra-file)


这里有一条关于windows环境下的说明,暂略。


需要注意的是,在文件的路径名中不要使用~这个shell元字符,不一定能正确解读。


下面具体来说一说:


–defaults-extra-file=file_name

MySQL程序启动时会读取默认配置文件,而这个选项会指定一个额外的配置文件让MySQL程序读取。

Unix上,读取顺序是:默认配置文件(除了用户自定义的配置文件)–>file_name–>用户自定义配置文件。

file_name为相对路径时,以当前目录的路径为基础路径(对于本节的各个选项都是如此)


–defaults-file=file_name
只是用指定的选项文件。如果这个文件不存在,或者不能访问,程序会退出并返回错误。
file_name为相对路径时,以当前目录的路径为基础路径。

–defaults-group-suffix=str 

直接举例说明:mysql客户端程序启动时,会读取配置文件中的[client][mysql]组下的选项。

如果加上–defaults-group-suffix=—othermysql客户端也会去读取[client_other][mysql_other]

下的选项。


–login_path=name 

读取.mylogin.cnf文件中以name为组名的信息。如name=myloginpath,则读取以下的信息

[myloginpath]
user = myname
password = mypass
host = 127.0.0.1

这是MySQL 5.6.6新增特性,.mylogin.cnf只包含主机,用户,密码信息。是加密的。

具体不详细叙述。参看Section 4.6.6 mysql_config_editor–MySQL Configuration Utility

–no-defaults

禁止读取任何配置文件。如果程序因为读取了某些未知的选项而导致无法启动,可以使用这选项。

有一个例外是.mylogin.cnf,只要这个文件存在,始终都要被读取。

–print-defaults

打印程序名,以及该程序从配置文件中读取到的所有的选项。

4.2.3.5 Using Options to Set Program Variables 

许多MySQL程序都有内部变量,可以在程序运行时通过SET语句设定。

详见:Section 13.7.4 SET Syntax 和 Section 5.1.5 Using System Variables


大多数的内部变量也可以在mysql启动时通过参数设定。比如 max_allowed_packet选项

用来设置通信缓存的大小。如下:

shell> mysql --max_allowed_packet=16777216  #单位:字节
shell> mysql --max_allowed_packet=16M #单位:兆字节

配置文件中的设置方式如下:

[mysql]
max_allowed_packet=16777216
[mysql]
max_allowed_packet=16M

另外,短横线与下划线等效,如:

[mysqld]
key_buffer_size=512M
[mysqld]
key-buffer-size=512M

要注意的是,参数值后缀不适用于使用SET语句,在程序运行时设置,需使用表达式。

注意对比:

mysql> SET GLOBAL max_allowed_packet=16M; #错误
mysql> SET GLOBAL max_allowed_packet=16*1024*1024; #正确

而表达式形式的参数值,也不能用于配置文件,或命令行参数:

shell> mysql --max_allowed_packet=16M #正确
shell> mysql --max_allowed_packet=16*1024*1024 #错误

4.2.3.6 Option Defaults, Options Expecting Values, and the = Sign 

一般来说,完全形式的选项使用“=”作赋值,如下:

shell> mysql --host=tonfisk --user=jon

而对于要求填写选项参数的选项,如果该选项没有默认值,“=”也可不写:

shell> mysql --host tonfisk --user jon

考虑如下示例:

shell> mysql --host 85.224.35.45 --user jon
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.17 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| jon@%          |
+----------------+
1 row in set (0.00 sec)

–host–user都是要求填写参数值的,如果没写的话,是会报错的。下面的例子中,因为–user没有给参数,

所以报错:

shell> mysql --host 85.224.35.45 --user
mysql: option '--user' requires an argument

而下面的例子中,–host –user 被解读为了–host=–user,而–user并不是某个主机名,所以报错

shell> mysql --host --user jon
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)

如果是给设有默认值的选项赋值,要求使用“=”,否则返回错误。举一例,MySQL服务程序的–log-error选项

的默认值是host_name.err。假设host_name=tonfisk, 考虑如下示例:

启动MySQL服务程序:

shell> mysqld_safe &
[1] 11699
shell> 080112 12:53:40 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
shell>
After shuttin

关闭后,按如下方式重启:

shell> mysqld_safe --log-error &
[1] 11699
shell> 080112 12:53:40 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
shell>

运行的效果相同,因为–log-error后面没有跟任何参数,所以程序自己采用了默认值(&符号表示在后台

运行MySQL。但这个符号被MySQL忽略)。假设你想使用自定义的错误日志文件my-errors.err

使用选项–log-error my-errors,却达不到你想要的效果:

shell> mysqld_safe --log-error my-errors &
[1] 31357
shell> 080111 22:53:31 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080111 22:53:32 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
080111 22:53:34 mysqld_safe mysqld from pid file /usr/local/mysql/var/tonfisk.pid ended
[1]+ Done ./mysqld_safe --log-error my-errors

服务程序试图以 /usr/local/mysql/var/tonfisk.err作为错误日志文件,却因错误关闭:

shell> tail /usr/local/mysql/var/tonfisk.err
080111 22:53:32 InnoDB: Started; log sequence number 0 46409
/usr/local/mysql/libexec/mysqld: Too many arguments (first extra is 'my-errors').
Use --verbose --help to get a list of available options
080111 22:53:32 [ERROR] Aborting
080111 22:53:32 InnoDB: Starting shutdown...
080111 22:53:34 InnoDB: Shutdown completed; log sequence number 0 46409
080111 22:53:34 [Note] /usr/local/mysql/libexec/mysqld: Shutdown complete
080111 22:53:34 mysqld_safe mysqld from pid file /usr/local/mysql/var/tonfisk.pid ended

错误是:Too many arguments (first extra is ‘my-errors’). 参数太多了

如下的使用才是正确的:

shell> mysqld_safe --log-error=my-errors &
[1] 31437
shell> 080111 22:54:15 mysqld_safe Logging to '/usr/local/mysql/var/my-errors.err'.
080111 22:54:15 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
shell>

译者注:这一段有点晕,总之不管要求参数值的选项有没有默认值,要使用自定义参数值的时候,

最好就使用“=”赋值。


至于在配置文件中,情况也是类似,假设配置文件my.cnf包含有如下内容:

[mysql]
host
user

会被解读成–host –user 或者 –host=–user,使用的效果如下:

(译者注:从这一点看, –host选项和–user选项没有默认值才会被这样解读,

这一点与前面所讲的倒有点矛盾。)

shell> mysql
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)

如果没写“=”号,情况与命令行方式的稍有不同:

[mysql]
user jon
shell> mysql
mysql: unknown option '--user jon'

这里空格也被当做一个有意义的字符了,还是得这样写:

[mysql]
user=jon
shell> mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.17 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> SELECT USER();
+---------------+
| USER()        |
+---------------+
| jon@localhost |
+---------------+
1 row in set (0.00 sec)

这个效果是命令行中的效果一样了:

shell> mysql --user jon --host tonfisk
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.6.17 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> SELECT USER();
+---------------+
| USER() |
+---------------+
| jon@tonfisk |
+---------------+
1 row in set (0.00 sec)

而MySQL5.6版本mysqld程序又有点不同,对于要求写参数值的选项,如果没有填写参数值,就会直接退出并返回错误。

假设my.cnf有如下内容:

[mysqld]
log_error
relay_log
relay_log_index
shell> mysqld_safe &
090514 09:48:39 mysqld_safe Logging to '/home/jon/bin/mysql/var/tonfisk.err'.
090514 09:48:39 mysqld_safe Starting mysqld daemon with databases from /home/jon/bin/mysql/var
090514 09:48:39 mysqld_safe mysqld from pid file /home/jon/bin/mysql/var/tonfisk.pid ended

–log-error因为有默认值,所以可以不写参数。但–relay-log必须自己写参数值:

shell> tail -n 3 ../var/tonfisk.err
090514 09:48:39 mysqld_safe Starting mysqld daemon with databases from /home/jon/bin/mysql/var
090514 9:48:39 [ERROR] /home/jon/bin/mysql/libexec/mysqld: option '--relay-log' requires an argument
090514 9:48:39 [ERROR] Aborting

所以说5.6版本的mysqld对这种情况的处理要特殊一些,没有把:

relay_log

relay_log_index

解读为:

–relay-log=relay_log_index

这点与前面是不同的。

4.2.4 Setting Environment Variables

在命令行中设置环境变量,对于当前有效,退出再登陆就无效了。在配置文件中设置,则一直有效。


所有MySQL相关的环境变量,详见:Section 2.11 “Environment Variables”


Unix上的设置,与shell有关,一般的语法如下:

MYSQL_TCP_PORT=3306 #设置变量
export MYSQL_TCP_PORT #将之声明为环境变量

对于cshtcsh,可使用setenv,与export效果相同:

setenv MYSQL_TCP_PORT 3306

在命令行中的设置立即生效,但你退出后再登陆,之前的设置就没有了。

要想你的设置在每次登陆时生效,可在shell的启动文件中设置:

Unix中,对于不同的shell有所不同,对于bash一般的启动文件是.bashrc.bash_profile对于tcsh, 则是.tcshrc

bash有两个不同的启动文件,一个是.bashrc,提供给login shells使用,一个是.bash_profile,提供给

nonlogin shells使用。


假设MySQL程序安装在/usr/local/mysql/bin,你想把这个路径加入到PATH变量中以便调用,可作如下设置:

PATH=${PATH}:/usr/local/mysql/bin

如果你的shelltcsh,可在.tcshrc中设置:

setenv PATH ${PATH}:/usr/local/mysql/bin

如果启动文件不存在,可手动创建。

设置之后,重新登陆即可生效。或使用source file_name使启动文件立即生效。



原创文章,作者:guli3057,如若转载,请注明出处:http://www.178linux.com/815

评论列表(3条)

  • stanley
    stanley 2015-03-10 23:06

    文档功底相当不错,也非常认真,很出彩,加油 😎

    • guli3057
      guli3057 回复 stanley 2015-03-11 09:01

      😳

  • 灯火阑珊
    灯火阑珊 2015-03-11 11:44

    😮 文档写的很犀利,很认真!吓得我都不写了

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code