ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Mysql Server配置详解

Mysql Server配置详解

1. 概念及作用

多数Mysql程序能从选项文件(有时也称为配置文件)中读取启动选项。运行Mysql程序时,为了避免在命令行输入选项,可在选项文件中设置这些选项。
如果想知道一个程序是否读取选项文件,可以用--help选项运行该程序(mysqld用--verbose和--help,二者缺一不可。)。如果该程序读取选项文件,返回的信息会指示寻找的文件及选项组。
--注:
1)运行mysql --no-defaults只读取.mylogin.cnf文件。
2)选项文件是文本编辑器创建的纯文本文件,但包含”登录路径(login path)“选项的.mylogin.cnf是个例外,该文件为mysql_config_editor工具创建的加密文件。
3)“登录路径(login path)”选项组只允许设置某些选项,例如:host,user,password,port和socket等选项。
4)客户端程序通过.mylogin.cnf中的--login-path选项读取登录路径。
5)当设置其他登录路径文件名时,可以设置MYSQL_TEST_LOGIN_FILE环境变量,mysql-test-run.pl测试工具会使用该变量,但mysql_config_editor和mysql客户端,像:mysql,mysqladmin等,也可以识别和使用该变量。

2. 查找顺序

Mysql会按如下列出的顺序寻找并读取选项文件,如果不存在,可以用相应工具进行创建。
1)Windows上,Mysql程序会按如下顺序寻找选项文件,并从中读取启动选项(从前向后按序寻找和读取)。
a) %WINDIR%\my.ini,%WINDIR%\my.cnf 全局选项
b) C:\my.ini,C:\my.cnf 全局选项
c) BASEDIR\my.ini,BASEDIR\my.cnf 全局选项
d) defaults-extra-file defaults-extra-file选项确定的文件
e) %APPDATA%\MySQL\.mylogin.cnf 登录路径选项(仅客户端)
--注:
1)%WINDIR%表示Windows系统目录,其一般为“C:\windows”,可用如下命令查看%WINDIR%的具体值:C:\> echo %WINDIR%。
2)%APPDATA%表示Windows应用数据目录,可用如下命令查看%APPDATA%的具体值:C:\> echo %APPDATA%
3)BASEDIR表示Mysql安装目录。当用mysql installer安装Mysql5.7时,其典型安装目录为“C:\Program Files\MySQL\MySQL 5.7 Server”。
2)Unix和类Unix系统上,Mysql程序按如下顺序查找选项文件,并从中读取启动选项(从前向后按序寻找和读取)
--注:
1)Unix系统上,处于安全考虑,Mysql会忽略拥有通用写权限的选项文件。
a) /etc/my.cnf 全局选项
b) /etc/mysql/my.cnf 全局选项
c) SYSCONFDIR/my.cnf 全局选项
d) \$MYSQL_HOME/my.cnf 针对服务器特定的选项(仅服务器)
e) defaults-extra-file defaults-extra-file选项确定的文件
f) ~/.my.cnf 针对用户特定的选项
h) ~/.mylogin.cnf 针对用户特定的登录路径(login path)选项(仅客户端)
--注:
1)SYSCONFDIR表示编译mysql时SYSCONFDIR选项设置的目录。默认为,编译时设置安装目录下的etc目录。
2)MYSQL_HOME为包含服务器特定my.cnf文件所在目录的环境变量。如未设置MYSQL_HOME,且通过mysqld_safe程序启动Mysql,则mysqld_safe将其设定为BASEDIR,也就是Mysql的安装目录。
3)“~”表示当前用户的主目录($HOME的值)。

3. 语法及填写规则

1) 如果某个选项在选项文件中被设置了多次,则以最后一次为准,但对mysqld有个特例,处于安全考虑,--user选项则以第一次设置值为准,这样可以防止选项文件中设置的用户被命令行覆盖掉。
2)选项文件的语法适用于手工编辑的文件。但不包括.mylogin.cnf,其通过mysql_config_editor创建和加密。
3)运行mysql程序时,可以在命令行设置的任何长选项,都可以在选项文件中设置。为了知道某个程序可用的选项,使用--help选项运行该程序(mysqld必须用--verbose和--help两个选项)。
4)选项文件中设置选项的语法与命令行语法类似。但选项文件中,需要去掉选项名前面的两个破折号,且每行只能设置一个选项。例如:命令行的--quick和--host=localhost选项,选项文件中应该分别在独立行中设置为quick和host=localhost。
5)选项文件中的空行将被忽略,非空行可以为如下格式:
a)#comment, ;comment
注释行以#或;开始。一个#注释也可以在一行中间开始。
b)[group]
group为程序名字,或想为其设置选项的选项组名字。group行后,任何选项设置将会被应用于该group,直到选项文件末尾或另一个group行被设置,选项group名大小写不敏感。
c)opt_name
等同于--opt_name命令行选项。
d)opt_name=value
等同于--opt_name=value命令行选项。选项文件中。“=”旁边可以有空格,但命令行则不行。
e)当选项值中包含“#”等特殊字符时,需用单引号或双引号将选项值括起来。选项名及值前后的空格将被自动删掉。
f)选项值中可以用转义序列 \b、\t、\n、\r、\\、\s,表示退格、tab、新行、回车、反斜杠和空格等。选项文件中,将适用下列转义规则:
• 反斜杠后跟一个有效序列字符被转换成序列表示的字符。例如:\s被转换成空格。
• 反斜杠后跟非有效转义序列字符将保持不变。例如:\S依然为\S。
前述规则意味着文本反斜杠可以用\\表示,或当后面跟一个非有效转义序列字符时,用\表示。
g)选项文件中的转义序列规则与SQL语句中文本串中的转义序列规则不同。
后者中,如果x不是一个有效的转义序列字符,\x将变为x而非\x。选项值的转义规则尤其与Windows路径名相关,其用\作为一个路径名分隔符。如果后面跟一个转义序列字符,Windows路径名分隔符必须被写成\\,否则,可以写成\\,\或/。选项文件中用“C:\Program Files\MySQL\MySQL Server 5.7”做基目录,可以有多个方法设置。例如:
basedir="C:\Program Files\MySQL\MySQL Server 5.7"
basedir="C:\\Program Files\\MySQL\\MySQL Server 5.7"
basedir="C:/Program Files/MySQL/MySQL Server 5.7"
basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s5.7
h)如果选项组(group)名字和程序名字相同,该选项组中的选项将用于该程序。例如:选项组[mysqld]和[mysql]将分别应用于mysqld服务器和mysql客户端程序。
i)选项组[client]将被应用于Mysql发布版本中提供的所有客户端(但不包括mysqld)。用户可在选项组[client]中为所有客户端设置选项。例如:[client]用于设置连接服务器的口令(但一定注意选项文件权限控制,以防口令泄露。除非某个选项能被所有客户端程序使用,否则,不要将该选项放于选项组[client]中 。如果某个程序不能识别该选项,运行时将显示错误信息后退出。选项文件中,应将更通用的选项组放在前面,而更特定的组放在后面。例如:选项组[client]更通用,而选项组[mysqldump]只被mysqldump读取,后面确定的选项值将会覆盖前面确定的相同选项的值,因此,按照先[client]后[mysqldump]的顺序,将使mysqldump特定选项覆盖[client]选项。如下为一个典型的全局选项文件:
[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]
#下列password将送到所有标准Mysql客户端
password="my password"
[mysql]
no-auto-rehash
connect_timeout=2
j)为了创建特定Mysql版本系列mysqld服务器读取的选项组,可以用[mysqld-5.6], [mysqld-5.7]等名字的选项组。下列的选项组指示mysql 5.7.x版本的servers使用sql_mode设置:
[mysqld-5.7]
sql_mode=TRADITIONAL

4. 嵌套方法及指令

1)选项文件中可通过!include指令包含其他选项文件,还可以通过!includedir指令搜索特定目录中的选项文件。例如:为了包含/home/mydir/myopt.cnf文件,用如下指令:

!include /home/mydir/myopt.cnf
为了搜索和读取/home/mydir目录中发现的选项文件,用如下指令:
!includedir /home/mydir
--注:
1)mysql并不保证该目录中选项文件被读取的顺序。
2)Unix系统上,!includedir设置目录中包含及被发现的选项文件都必须有以“.cnf”结尾。Windows系统中,该指令将检查带“.ini”或“cnf”扩展名的文件。
2)被包含选项文件的内容与任何其他选项文件类似。即,其应该包含选项组,每个选项组以[group]行开始,以设置这些选项所应用的程序。
当处理被包含文件时,仅当前程序寻找的选项组中的选项被使用,其他选项组将被忽略,假设my.cnf文件包含如下行:
!include /home/mydir/myopt.cnf
且假设/home/mydir/myopt.cnf内容如下所示:
[mysqladmin]
force
[mysqld]
key_buffer_size=16M
如果myopt.cnf被mysqld处理,仅其中的选项组[mysqld]被用。如果文件被mysqladmin处理,则仅选项组[mysqladmin]被用。如果文件被其他程序处理,则/home/mydir/myopt.cnf中的选项都不被用。
如果一个选项文件包含!include或!includedir指令,当选项文件被处理时,无论该指令出现于文件的什么位置,该指令设置的文件都将被处理。

返回列表