my.cnf是mysql服务器在unix平台下默认的配置文件的文件名。
输入my_print_defaults可以得出mysql server启动时所读取的my.cnf的顺序:(一般为该四个,根据安装方式、OS发行版、mysql版本而定)
或者
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/my.cnf(有的版本写作/usr/local/mysql/etc/my.cnf) ~/.my.cnf
也就是说,先读取/etc/my.cnf,再去读/etc/mysql/my.cnf,第三个读/usr/local/mysql/my.cnf,其中,第三个为basedir,即mysql安装目录。
第四个为~/.my.cnf,这个~即为/home/$USERNAME,而$USERNAME为服务器启动用户。
在手册中给出的顺序是(由上至下读取)
但通用的读取 先后顺序为:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
省略部分路径。
其中/etc/my.cnf与/etc/mysql/my.cnf为全局选项文件
而~/.my.cnf为用户选项文件
场景一:
Global options与Global options同时存在。
即/etc/my.cnf与/etc/mysql/my.cnf同时存在
疑问:如果/etc/my.cnf存在,还会去找/etc/mysql/my.cnf吗?
如果是,那么是直接使用/etc/mysql/my.cnf文件
还是先使用/etc/my.cnf,再用/etc/mysql/my.cnf中呢?如果参数相同,后者覆盖前者吗?
实验:
/etc/my.cnf
[mysqld]
long_query_time = 15
slow_query_log = on
autocommit = off
/etc/mysql/my.cnf
[mysqld]
long_query_time = 12
slow_query_log = on
查询:
此时先用了/etc/my.cnf中的autocommit=off。
虽然slow_query_log都有设置,但是参数相同,/etc/mysql/my.cnf优先级更大,故为12s。
继续实验:
删除/etc/my.cnf
$ sudo mv /etc/my.cnf /etc/my.cnf.bk
重启服务器,查询:
此时只用了/etc/mysql/my.cnf。
场景二:
Global options与User-specific options同时存在
即/etc/my.cnf与~/.my.cnf同时存在
实验:
同样先删除其他配置文件,确保只剩如下两个位置:
/etc/my.cnf
[mysqld]
long_query_time = 15
slow_query_log = on
autocommit = off
~/.my.cnf
[mysqld]
long_query_time = 12
slow_query_log = on
编辑好后保存退出
查询:
autocommit默认是on
long_query_time默认是10
说明/etc/my.cnf已经生效
autocommit = off
虽然有设置
long_query_time = 15
但是
~/.my.cnf
中有设置
long_query_time = 12
故~/.my.cnf也有生效,在存在相同选项时,优先级高于Global options的/etc/my.cnf。
结论:
当多个my.cnf存在时:
Global options 与 User-specific options同时存在时, User-specific options优先级高于 Global options并两者都会 读取,若选项相同,则优先级高者覆盖前者
虽然/etc/my.cnf与/etc/mysql/my.cnf均为 Global options, 但是规则 也同样和 Global options与 User-specific options一致。
作者微信公众号(持续更新)
输入my_print_defaults可以得出mysql server启动时所读取的my.cnf的顺序:(一般为该四个,根据安装方式、OS发行版、mysql版本而定)
或者
- $ mysql --help | grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/my.cnf(有的版本写作/usr/local/mysql/etc/my.cnf) ~/.my.cnf
也就是说,先读取/etc/my.cnf,再去读/etc/mysql/my.cnf,第三个读/usr/local/mysql/my.cnf,其中,第三个为basedir,即mysql安装目录。
第四个为~/.my.cnf,这个~即为/home/$USERNAME,而$USERNAME为服务器启动用户。
在手册中给出的顺序是(由上至下读取)
- File Name Purpose
- /etc/my.cnf Global options
- /etc/mysql/my.cnf Global options
- SYSCONFDIR/my.cnf Global options
- $MYSQL_HOME/my.cnf Server-specific options
- defaults-extra-file The file specified with --defaults-extra-file=path, if any
- ~/.my.cnf User-specific options
- ~/.mylogin.cnf Login path options
但通用的读取 先后顺序为:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
省略部分路径。
其中/etc/my.cnf与/etc/mysql/my.cnf为全局选项文件
而~/.my.cnf为用户选项文件
场景一:
Global options与Global options同时存在。
即/etc/my.cnf与/etc/mysql/my.cnf同时存在
疑问:如果/etc/my.cnf存在,还会去找/etc/mysql/my.cnf吗?
如果是,那么是直接使用/etc/mysql/my.cnf文件
还是先使用/etc/my.cnf,再用/etc/mysql/my.cnf中呢?如果参数相同,后者覆盖前者吗?
实验:
/etc/my.cnf
[mysqld]
long_query_time = 15
slow_query_log = on
autocommit = off
/etc/mysql/my.cnf
[mysqld]
long_query_time = 12
slow_query_log = on
查询:
- mysql> show variables like 'autocommit';
- +---------------+-------+
- | Variable_name | Value |
- +---------------+-------+
- | autocommit | OFF |
- +---------------+-------+
- 1 row in set (0.00 sec)
-
- mysql> show variables like 'long_query_time';
- +-----------------+-----------+
- | Variable_name | Value |
- +-----------------+-----------+
- | long_query_time | 12.000000 |
- +-----------------+-----------+
- 1 row in set (0.01 sec)
此时先用了/etc/my.cnf中的autocommit=off。
虽然slow_query_log都有设置,但是参数相同,/etc/mysql/my.cnf优先级更大,故为12s。
继续实验:
删除/etc/my.cnf
$ sudo mv /etc/my.cnf /etc/my.cnf.bk
重启服务器,查询:
- mysql> show variables like 'autocommit';
- +---------------+-------+
- | Variable_name | Value |
- +---------------+-------+
- | autocommit | ON |
- +---------------+-------+
- 1 row in set (0.00 sec)
-
- mysql> show variables like 'long_query_time';
- +-----------------+-----------+
- | Variable_name | Value |
- +-----------------+-----------+
- | long_query_time | 12.000000 |
- +-----------------+-----------+
- 1 row in set (0.01 sec)
此时只用了/etc/mysql/my.cnf。
场景二:
Global options与User-specific options同时存在
即/etc/my.cnf与~/.my.cnf同时存在
实验:
同样先删除其他配置文件,确保只剩如下两个位置:
/etc/my.cnf
[mysqld]
long_query_time = 15
slow_query_log = on
autocommit = off
~/.my.cnf
[mysqld]
long_query_time = 12
slow_query_log = on
编辑好后保存退出
查询:
- mysql> show variables like 'autocommit';
- +---------------+-------+
- | Variable_name | Value |
- +---------------+-------+
- | autocommit | OFF |
- +---------------+-------+
- 1 row in set (0.00 sec)
-
- mysql> show variables like 'long_query_time';
- +-----------------+-----------+
- | Variable_name | Value |
- +-----------------+-----------+
- | long_query_time | 12.000000 |
- +-----------------+-----------+
- 1 row in set (0.01 sec)
autocommit默认是on
long_query_time默认是10
说明/etc/my.cnf已经生效
autocommit = off
虽然有设置
long_query_time = 15
但是
~/.my.cnf
中有设置
long_query_time = 12
故~/.my.cnf也有生效,在存在相同选项时,优先级高于Global options的/etc/my.cnf。
结论:
当多个my.cnf存在时:
Global options 与 User-specific options同时存在时, User-specific options优先级高于 Global options并两者都会 读取,若选项相同,则优先级高者覆盖前者
虽然/etc/my.cnf与/etc/mysql/my.cnf均为 Global options, 但是规则 也同样和 Global options与 User-specific options一致。
作者微信公众号(持续更新)
![](http://img.blog.itpub.net/blog/attachment/201805/23/29773961_1527063354CKf3.png?x-oss-process=style/bb)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29773961/viewspace-1976461/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29773961/viewspace-1976461/