MYSQL配置读取

MYSQL配置读取

Posted by WangZiTao on Monday, August 19, 2019

配置文件读取

在Unix, Linux 或者 Mac OS X 系统中, MYSQL 从以下配置文件中读取启动配置, 读取顺序由上到下:

File Name Purpose
/etc/my.cnf 全局配置选项
/etc/mysql/my.cnf 全局配置选项
SYSCONFDIR/my.cnf 全局配置选项
$MYSQL_HOME/my.cnf 特定于服务器的选项(仅限服务器)
defaults-extra-file 命令行指定的额外配置文件路径
~/.my.cnf 用户特定选项
~/.mylogin.cnf 用户特定的登录路径选项(仅限客户端)

–defaults-extra-file 在读取全局配置文件之后,读取用户配置文件(~/.my.cnf)之前,读取extra指定的参数文件

~/.my.cnf
home目录下面的隐藏文件,my.cnf前面的点,说明my.cnf是隐藏文件

~/.mylogin.cnf
配置文件有点儿特殊,它不是一个纯文本文件(其他的配置文件都是纯文本文件),而是使用mysql_config_editor实用程序创建的加密文件。文件中只能包含一些用于启动客户端软件时连接服务器的一些选项,包括 host、user、password、port和 socket。而且它只能被客户端程序所使用。

读取顺序:

  • /etc/my.cnf
  • basedir/my.cnf
  • datadir/my.cnf
  • –defaults-extra-file
  • ~/.my.cnf
  • ~/.mylogin.cnf

最后两个以~开头的路径是用户相关的,~ 就代表这个用户目录. 用户可以在自己的用户目录下创建.my.cnf或者.mylogin.cnf,换句话说,不同登录用户使用的 .my.cnf或者 .mylogin.cnf 配置文件是不同的。

当多个文件中出现同一个配置时,以最后读取的配置为准

比方说/etc/my.cnf文件的内容是这样的:

[server]
default-storage-engine=InnoDB

而~/.my.cnf文件中的内容是这样的:

[server]
default-storage-engine=MyISAM

又因为~/.my.cnf/etc/my.cnf顺序靠后,所以如果两个配置文件中出现相同的启动选项,以~/.my.cnf中的为准,所以MySQL服务器程序启动之后,default-storage-engine的值就是MyISAM

文件中配置读取

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

[server]
(具体的启动选项...)

[mysqld]
(具体的启动选项...)

[mysqld_safe]
(具体的启动选项...)

[client]
(具体的启动选项...)

[mysql]
(具体的启动选项...)

[mysqladmin]
(具体的启动选项...)

配置文件中不同的选项组是给不同的启动命令使用的,[mysqld][mysql]组分别应用于mysqld服务器程序和mysql客户端程序。不过有两个选项组比较特别:

  • [server]组下边的启动选项将作用于所有的服务器程序。

  • [client]组下边的启动选项将作用于所有的客户端程序。

启动命令 类别 能读取的组
mysqld 启动服务器 [mysqld]、[server]
mysqld_safe 启动服务器 [mysqld]、[server]、[mysqld_safe]
mysql.server 启动服务器 [mysqld]、[server]、[mysql.server]
mysql 启动客户端 [mysql]、[client]
mysqladmin 启动客户端 [mysqladmin]、[client]
mysqldump 启动客户端 [mysqldump]、[client]

假如我们在/etc/mysql/my.cnf 中添加配置

[server]
skip-networking
default-storage-engine=MyISAM

然后直接用mysqld启动服务器程序:

mysqld

虽然在命令行没有添加启动选项,但是在程序启动的时候,就会默认的到我们上边提到的配置文件路径下查找配置文件,其中就包括/etc/mysql/my.cnf。又由于mysqld命令可以读取[server]选项组的内容,所以skip-networkingdefault-storage-engine=MyISAM这两个选项是生效的。你可以把这些启动选项放在[client]组里再试试用mysqld启动服务器程序,结果是不生效

同一个配置文件中多个组的优先级

我们说同一个命令可以访问配置文件中的多个组,比如mysqld可以访问[mysqld][server]组,如果在同一个配置文件中,比如~/.my.cnf,在这些组里出现了同样的配置项,比如这样:

[server]
default-storage-engine=InnoDB

[mysqld]
default-storage-engine=MyISAM

那么,将以最后一个出现的组中的启动选项为准,比方说例子中default-storage-engine既出现在[mysqld]组也出现在[server]组,因为[mysqld]组在[server]组后边,就以[mysqld]组中的配置项为准。

如果同一个启动选项既出现在命令行中,又出现在配置文件中,那么以命令行中的启动选项为准。

例如我们在配置文件中写了:

[server]
default-storage-engine=InnoDB

而我们的启动命令是:

mysql.server start --default-storage-engine=MyISAM

那最后default-storage-engine的值就是MyISAM


comments powered by Disqus