mysql 多个参数选项文件my.cnf优先级研究
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,my.cnf是mysql服务器在unix平台下默认的配置文件的文件名。输入my_print_defaults可以得出mysql server启动时所读取的my.cnf的顺序:(一般为该四个,根据安装方
千家信息网最后更新 2026年11月01日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安全错误
数据库的锁怎样保障安全
什么是科技互联网
广东猪兼强互联网科技有限公司
广州大一互联网络科技有限公司
互联网科技官网
互联网科技公司的优势
网络科技有限互联网
互联网科技开发公司
互联网 科技创新
贷财互联网科技
互联网科技公司介绍
顺网科技2021年互联网排名
深圳市运趣互联网科技有限公司
中国的互联网科技企业的崛起
互联网校园科技培训
互联网科技项目计划书材料类
互联网和黑科技的看法
长沙茂晟互联网科技有限公司
朱啸虎曾投资哪些互联网科技企业
科技赋能视角下互联网保险发展
互联网科技数字货币
互联网属科技
金诺互联网科技
互联网科技未来
科技与互联网发展
期待互联网科技
华中科技大学互联网
有木互联网科技
互联网科技大会
版纳互联网科技选哪家
上海互联网科技园景观