mysql 多个参数选项文件my.cnf优先级研究
发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,my.cnf是mysql服务器在unix平台下默认的配置文件的文件名。输入my_print_defaults可以得出mysql server启动时所读取的my.cnf的顺序:(一般为该四个,根据安装方
千家信息网最后更新 2024年11月22日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安全错误
数据库的锁怎样保障安全
tis服务器靠谱吗
二级数据库和三级数据库关系
佛山微信软件开发电话
软件开发费用 账务处理
单机版软件要数据库技术吗
朝阳区网络安全常见问题
我爱自学网计算机网络技术
小学生网络安全教育队会方案
江苏app软件开发定做
方舟生存进化官方服务器会删档吗
W7服务器管理器在哪里打开
emc服务器断电后无法启动
软件开发好还是电商好
优家园互联网科技有限公司
软件开发工程师晋升的途径
dns服务器四川移动服务器
浙江常用软件开发价格表
软件开发设计视频教程
妇联开网络安全班子会议
电脑定时连接不上服务器
怎么连接本机数据库
软件开发的两个版本
贵州农信软件开发
西安库连网络技术有限公司
软件开发需要用到什么工具
网络安全与维护备课
黑龙江党员教育软件开发公司
戴尔r740服务器能装win7
数据库瘦身的方法
什么公司需要网络安全员