mysql 多个参数选项文件my cnf优先级研发
发布时间:2022-04-06 18:05:28 所属栏目:编程 来源:互联网
导读:my.cnf是mysql服务器在unix平台下默认的配置文件的文件名。 输入my_print_defaults可以得出mysql server启动时所读取的my.cnf的顺序:(一般为该四个,根据安装方式、OS发行版、mysql版本而定) 或者 $ mysql --help | grep my.cnf /etc/my.cnf /etc/mysql/m
my.cnf是mysql服务器在unix平台下默认的配置文件的文件名。 输入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一致。 (编辑:广西网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐