mysql 多个参数选项文件my.cnf优先级研究
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,my.cnf是mysql服务器在unix平台下默认的配置文件的文件名。输入my_print_defaults可以得出mysql server启动时所读取的my.cnf的顺序:(一般为该四个,根据安装方
千家信息网最后更新 2025年11月11日mysql 多个参数选项文件my.cnf优先级研究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一致。
作者微信公众号(持续更新)

文件
同时
优先级
相同
服务器
顺序
实验
服务
查询
参数
三个
场景
版本
用户
配置
多个
一致
由上至下
两个
也就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
达内网络运维与网络安全
点点服务器
vba自动更新网站数据库
宁夏广物互联网科技公司
查重论文会上传数据库吗
中国植物饲料数据库
信息时代的网络技术
建网站数据库
哈工大 网络安全基础 试卷
高校老师数据库
河北博程软件开发有限公司怎么样
我国制定了网络安全的目的是为了
两台数据库备份到一台服务器
选修网络安全好过吗
健全网络安全法制
电信宽带服务器设置
互联网界的黑科技
数据库服务器配置清单
pcb测试软件开发
江苏阿里云服务器
天山区网络安全应急指挥中心
市网络安全应急指挥中心事业单位
艾尔登法环老是与服务器断开
闻远科技农村互联网超市
软件开发的高级语言
怎么避免两人同时操作数据库
应用软件开发技术价格
监控数据库资源
通州区技术软件开发服务供应
杭州金成软件开发公司