配置文件格式

与在命令行中指定启动选项不同的是,配置文件中的启动选项被划分为若干个组,每个组有一个组名,用中括号 [ ] 括起来, 像这样

  1. [server]
  2. (具体的启动选项....)
  3. [mysqld]
  4. (具体的启动选项....)
  5. [mysqld_safe]
  6. (具体的启动选项....)
  7. [client]
  8. (具体的启动选项....)
  9. [mysql]
  10. (具体的启动选项....)
  11. [mysqladmin]
  12. (具体的启动选项....)

像这个配置文件里就定义了许多各组,组名分别是 [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。

系统变量:

系统变量.pdf