配置文件格式
与在命令行中指定启动选项不同的是,配置文件中的启动选项被划分为若干个组,每个组有一个组名,用中括号 [ ] 括起来, 像这样
[server](具体的启动选项....)[mysqld](具体的启动选项....)[mysqld_safe](具体的启动选项....)[client](具体的启动选项....)[mysql](具体的启动选项....)[mysqladmin](具体的启动选项....)
像这个配置文件里就定义了许多各组,组名分别是 [server],[mysqld],[mysqld_safe],[client],[mysql],[mysqladmin]。每个组下面可以定义若干个启动选项,我们以[server] 组为例来看一下填写启动选项的形式(其他组启动选项形式是一样的)。(my.cnf文件下查看) vim /etc/my.cnf
[server]
option1 # 这是option1,该选项不需要选项值
option2=value2 # 这是option2,该选项需要选项值
在配置文件中指定启动选项的语法类似于命令行语法,但是配置文件中指定的启动选项不允许添加—前缀,并且每行指定一个选项,而且 = 周围可以有空白字符(命令行中选项名,=,选项值之间不允许有空白字符)。另外,在配置文件中,我们可以使用 # 来添加注释,从 # 出现直到行尾的内容都属于注释内容,读取配置文件会忽略这些注释内容。
启动命令与选项组
配置文件中不同的选项组是给不同的启动命令使用的,不过有两个选项组比较特别:
- [server] 组下面的启动选项将作用于 所有的服务器 程序
- [client] 组下面的启动选项将作用于 所有的客户端 程序
下面是启动命令能读取的选项组都有哪些:
| 启动命令 | 类别 | 能读取的组 |
|---|---|---|
| mysqld | 启动服务器 | [mysqld],[server] |
| mysqld_safe | 启动服务器 | [mysqld],[server],[mysql_safe] |
| mysql.server | 启动服务器 | [mysqld],[server],[mysql_server] |
| mysql | 启动客户端 | [mysqld],[client] |
| mysqladmin | 启动客户端 | [mysqladmin],[client] |
| mysqldump | 启动客户端 | [mysqldump],[client] |
比如,在 /etc/mysql/my.cnf 这个配置文件,添加一些内容:
[server]
skip-networking
default-storage-engine=MyISAM
然后直接用mysqld启动服务器程序:
mysqld
虽然在命令行没有添加启动选项,但是在程序启动的时候,就会默认的到我们提到的配置文件路径下查找配置文件,其中就包括/etc/my.cnf ,又由于 mysqld 命令 可以读取 [server]选项组的内容,所以 skip-networking 和 default-storage-engine=MyISAM 这两个选项是生效的,你可以把这些启动选项放在 [client] 组里面再试试用 mysqld 启动服务器程序,就不生效。
特定MySQL版本的专用选项组
我们可以在选项组中的名称后加上特定的MySQL版本号,比如对于[mysqld]选择组来说,我们可以定义一个[mysqld-5.7]的选项组,它的含义和[mysqld]一样,只不过只有版本号为5.7的mysqld程序才能使用这个选项组中的选项
同一个配置文件中多个组的优先级
我们说同一个命令可以访问配置文件的多个组,比如 mysqld 可以访问 [mysqld],[server] 组,如果在同一个配置文件中,比如 ~/.my.cnf 在这些组里出现了同样的配置项,比如这样:
[server]
default-storage-engine=InnoDB
[mysqld]
default-storage-engine=MyISAM
那么,将以最后一个出现的组的启动选项为准,比方说 default-storage-engine 出现在[server] 组 也出现在 [mysqld] 组 ,因为 [mysqld] 组 在 [server] 组 后面 ,就以 [mysqld] 组中的配置项为准。
命令行和配置文件中启动选项的区别
在命令行上指定的绝大部分 启动选项 都可以放在配置文件中,但是有一些是专门设计命令行而设计的,比方说 default-extra-file,default-file 这样的选项本身 就是为了指定配置文件路径的,在放在配置文件,再放在配置文件中使用就没啥意义了。
如果同一个启动选项即出现在命令行中,又出现在配置文件中,那么以命令行中的启动选项为准!比如我们在配置文件中写了
[server]
defalut-storage-engine=InnoDB
而我们的启动命令是:
mysql.server start --default-storage-engine=MyISAM
那最后 default-storage-engine 的值就是MyISAM。
