配置或者程序概述

MySQL程序首先检查环境变量,然后检查选项文件,然后检查命令行来确定给出了哪些选项。如果多次指定一个选项,最后出现的选项占先。
这说明环境变量具有最低的优先级,命令行选项具有最高优先级。

可以在选项文件中指定程序选项的默认值来让MySQL程序处理各选项。
不需要在每次运行程序时输入选项,但可以根据需要通过命令行选项来覆盖默认值。

在命令行中指定的程序选项遵从下述规则:
· 在命令名后面紧跟选项。
· 选项参量以一个和两个破折号开始,取决于它具有短名还是长名。许多选项有两种形式。
例如,-?和--help是指导MySQL程序显示帮助消息的选项的短名和长名。
· 选项名对大小写敏感。-v和-V均有效,但具有不同的含义。(它们是--verbose和--version选项的短名)。
· 部分选项在选项名后面紧随选项值。
例如,-h localhost或--host=localhost表示客户程序的MySQL服务器主机。选项值可以告诉程序MySQL服务器运行的主机名。
· 对于带选项值的长选项,通过一个‘=’将选项名和值隔离开来。
对于带选项值的短选项,选项值可以紧随选项字母后面,或者二者之间可以用一个空格隔开。
(-hlocalhost和-h localhost是等效的)。
该规则的例外情况是指定MySQL密码的选项。
该选项的形式可以为--password=pass_val或--password。
在后一种情况(未给出 密码值),程序将提示输入密码。也可以给出密码选项,短形式为-ppass_val或-p。
然而,对于短形式,如果给出了 密码值,必须紧跟在选项后面,中间不能插入空格。
这样要求的原因是如果选项后面有空格,程序没有办法来告知后面的参量是 密码值还是其它某种参量。
因此,下面两个命令的含义完全不同:

· shell> mysql -ptest
· shell> mysql -p test
第一个命令让mysql使用密码test,但没有指定默认数据库。
第二个命令让mysql提示输入 密码并使用test作为默认数据库。

要想禁用列名,可以使用下面的形式来指定选项:

--disable-column-names
--skip-column-names
--column-names=0
--disable和--skip前缀与=0后缀的效果相同:它们均关闭选项。

可以用下述方法“启用”选项:

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

如果选项有前缀--loose,如果程序未识别出选项不会提示错误退出,但是会发出一条警告:

shell> mysql --loose-no-such-option
mysql: WARNING: unknown option '--no-such-option'
当你从安装了多个MySQL的同一台机器上运行程序时,--loose前缀会很有用。当你在一个选项文件中列出选项时,该前缀会特别有用。有可能不能被程序的所有版本识别的选项可以冠以--loose前缀(或在选项文件中用loose)。不能识别选项的程序版本将会发出一条警告并忽视该选项。

对mysql偶尔有用的另一个选项是-e或--execute选项,可用来将SQL语句传递给服务器。
该语句必须用引号引起来(单引号或双引号)。(然而,如果想要在查询中将值引起来,则对于查询应使用双引号,查询中引用的值应使用单引号)。
当使用该选项时,语句被执行,然后mysql立即退出命令外壳。

shell> mysql -u root -p -e "SELECT User, Host FROM User" mysql

请注意mysql数据库名作为一个独立的参量传递。
然而,相同的查询可能已经使用mysql -u root -p -e "SELECT User,Host FROM mysql.User"从外壳中执行。

可以按这种方式传递多个SQL语句,用分号隔开:
shell> mysql -u root -p --execute="SELECT Name FROM Country WHERE Name LIKE 'AU%';SELECT COUNT(*) FROM City" world

请注意长形式(--execute)后面必须紧跟一个等号(=)。
-e选项也可以以类似方式用来将命令传递给MySQL簇的ndb_mgm管理客户端。

MySQL程序可以从选项文件(有时也称为配置文件)读取启动选项。
选项文件提供了一种很方便的方式来指定常用的选项,因此不需要每次运行程序时从命令行输入。

下面的程序支持选项文件:myisamchk、myisampack、mysql、mysql.server、mysqladmin、mysqlbinlog、mysqlcc、mysqlcheck、mysqld_safe、mysqldump、mysqld、mysqlhotcopy、mysqlimport和mysqlshow。

注释:在Unix平台上,MySQL忽略人人可写的配置文件。这是故意的,是一个安全措施。

任何可以在运行MySQL程序时在命令行给出的长选项也可以在选项文件中给出。要想列出程序的适用选项,用--help选项运行程序。

在选项文件中指定选项的语法类似于命令行语法,例外的是要忽略掉两个破折号。例如,命令行中的--quick或--host=localhost在选项文件中应指定为quick或host=localhost。要想在选项文件中指定--loose-opt_name形式的选项,应写为loose-opt_name。

选项文件中的空行被忽略掉。非空行可以采用下面任何形式:

· #注释,;注释

注释行以‘#’或‘;’开头。‘#’注释也可以从行的中部开始。
· [group]

group是你想要设置选项的程序名或组名。在组行后面,任何opt_name或set-variable行适用于组名,直到选项文件结尾或给出其它组行。

· opt_name

等价于命令行中的--opt_name。

· opt_name=value

等价于命令行中的--opt_name=value。在选项文件中,‘=’字符附近可以有空格,而在命令行中是不允许的。你可以用单引号或双引号来引用值。如果值包含一个‘#’注释字符或空格时很有用。

选项名和值前后的空白将自动删除掉。你可以在选项值中使用转义序列‘\b’、‘\t’、‘\n’、‘\r’、‘\\’以及‘\s’来表示退格、tab、换行符、回车以及空格字符。

从5.0系列的MySQL 5.0.4开始,可以在选项文件中使用!include指令来包括具体文件和!includedir来搜索选项文件的具体目录。例如,要包括文件/home/mydir/myopt.cnf,可以使用:

!include /home/me/myopt.cnf
要搜索所有以.cnf结尾的文件的目录/home/mydir并作为选项文件读取,应使用:

!includedir /home/mydir

请注意这些选项与节有关。例如,假定你想要使用my.cnf中的某些内容,如下所示:

[mysqld]
!include /home/mydir/myopt.cnf
在这种情况下,只为该服务器处理文件myopt.cnf,并且!include指令将被客户应用程序忽略。然而,如果你使用下面的部分:

[mysqldump]
!includedir /home/mydir/my-dump-option
则只有mysqldump为以.cnf结尾的文件检查目录/home/mydir/my-dump-option,服务器或其它客户应用程序均不检查。

注释:目前,在Unix操作系统中,所发现的使用!includedir指令包括的文件的文件名必须以.cnf为扩展名。
在Windows中,该指令也为有.ini扩展名(包括.cnf)的文件做检查。

如果你想要创建只由一个具体mysqld服务器发布系列读取的选项组,选项组可以用[mysqld-5.0]、[mysqld-5.1]等名称。
下面的组表示--new选项只能用于5.1.x 版本的MySQL服务器:

[mysqld-5.1]
new

下面是一个典型的全局选项文件:

[client]
port=3306
socket=/tmp/mysql.sock

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

[mysqldump]
quick

在上述的选项文件中,设置key_buffer_size和max_allowed_packet变量的行使用了var_name=value语法。

下面是一个典型的用户选项文件:

[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

注释:在Windows中,可以不显示.cnf选项文件的扩展名。

所有支持选项文件的MySQL程序可以处理下面的命令行选项:

· --no-defaults

不读取任何选项文件。

· --print-defaults

打印从选项文件中获得的程序名和所有选项。

· --defaults-file=path_name

只使用给出的选项文件。path_name是文件的全路径名。

· --defaults-extra-file=path_name

在全局选项文件后但在用户选项文件前读该选项文件。path_name是文件的全路径名。

在shell脚本中,可以使用my_print_defaults程序来分析选项文件。
下面的例子显示了当要求显示[client]和[mysql]组内发现的选项时my_print_defaults产生的输出:

shell> my_print_defaults client mysql

要想用环境变量指定选项,使用适用注释处理器的语法来设置变量。例如,在Windows或NetWare中,可以设置USER变量来指定MySQL账户名。要想实现,使用语法:

SET USER=your_name
在Unix中的语法取决于你的外壳。假定你想要使用MYSQL_TCP_PORT变量指定TCP/IP端口号。典型的语法为(例如sh、bash、zsh等等):

MYSQL_TCP_PORT=3306
export MYSQL_TCP_PORT
第1个命令设置变量,export命令将变量导出到外壳环境,以便其值可供MySQL和其它进程访问。

csh和tcsh有类似的问题。运行这些外壳时,使用setenv使外壳变量适用环境:

setenv MYSQL_TCP_PORT 3306

可以在命令提示符下执行设置环境变量的命令,以便立即生效。这些设定值持续到你注销。
要向让这些设定值在你每次登录时生效,将相应命令放入每次启动时命令解释符所读的启动文件中。
在Windows中典型启动文件为AUTOEXEC.BAT,bash为.bash_profile,或者tcsh为.tcshrc。

许多MySQL程序有一些内部变量可以在运行时设置。程序变量的设置与带有值的其它长选项相同。例如,mysql有一个max_allowed_packet变量,可以控制其通信缓冲区的最大长度。要想为mysql将max_allowed_packet变量的值设置为16MB,使用下面的任何一个命令:

shell> mysql --max_allowed_packet=16777216
shell> mysql --max_allowed_packet=16M
第1个命令以字节指定值。第2个命令以兆字节指定值。变量值可以有一个后缀K、M或者G(可以为大写或小写)来表示千字节、兆字节或者十亿字节的单位。

在选项文件中,变量设定值没有引导破折号:

[mysql]
max_allowed_packet=16777216
或:

[mysql]
max_allowed_packet=16M
如果你喜欢,变量名的下划线可以为破折号。

 

posted @ 2013-05-18 10:32  1406425891  阅读(147)  评论(0编辑  收藏  举报