测试验证MySQL配置文件的生效顺序

  • 2019-09-02
  • 0
  • 0

在MySQL中,配置文件出现的位置有:

  1. /etc/my.cnf
  2. /etc/mysql/my.cnf
  3. $basedir/my.cnf
  4. defaults-extra-file —类似include
  5. ~/.my.cnf

做一简单测试:

测试一:在每个配置文件中写入一个server_id

/etc/my.cnf         ------>server_id=6
/etc/mysql/my.cnf   ------>server_id=5
$basedir/my.cnf     ------>server_id=4
~/.my.cnf           ------>server_id=3

重启MySQL

[root@mysql50 ~]# mysqladmin -uroot -p shutdown
# 注意不要在system管理里面指定MySQL启动的配置文件路径

#使用mysqld_safe启动
[root@mysql50 system]# mysqld_safe &   

验证

[root@mysql50 system]# mysql -uroot -p -e "show variables like 'server_id'"
Enter password: 
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 3     |
+---------------+-------+

发现在都设置的情况下,MySQL找到了~/.my.cnf的配置文件

测试二:注释~/.my.cnf中的信息再重启MySQL

# 先注释配置文件`~/.my.cnf`
# 关闭服务
[root@mysql50 system]# mysqladmin -uroot -p shutdown
Enter password: 
# 确认已关闭
[root@mysql50 system]# netstat -lntp|grep 330
# 启动服务
[root@mysql50 system]# mysqld_safe 
190710 19:56:59 mysqld_safe Logging to '/var/log/mysql.log'.
190710 19:56:59 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data

[4]+  Stopped                 mysqld_safe
[root@mysql50 system]# netstat -lntp|grep 330
tcp6       0      0 :::3306                 :::*                    LISTEN      12320/mysqld     

# 验证查看   
[root@mysql50 system]# mysql -uroot -p -e "show variables like 'server_id'"
Enter password: 
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 4     |
+---------------+-------+

发现$basedir/my.cnf启动文件中的配置文件优先级第二高

测试三:注释$basedir/my.cnf中的配置文件

# 注释---重启与上述步骤相同
[root@mysql50 system]# mysql -uroot -p -e "show variables like 'server_id'"
Enter password: 
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 5     |
+---------------+-------+

发现/etc/mysql/my.cnf的优先级第三

最后得出/etc/my.cnf的优先级最低。

若将MySQL加入systemd管理,在配置中指定了 --defaults-file=<配置文件的绝对路径>,这时只会使用这个参数指定的配置文件。

ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
#发现其他配置都不生效,只生效systemd下面配置指定的配置文件
[root@mysql50 system]# mysql -uroot -p -e "show variables like 'server_id'"
Enter password: 
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 6     |
+---------------+-------+

socket文件在配置文件中的启动顺序也是如此。

对于启动优先级的顺序

安装方式不同,mysql.sock文件位置也会不同

在启动MySQL时候,可以指定socket文件的位置有

#预编译的
socket=/tmp/mysql.sock

#命令行指定
--socket=/tmp/ssh.sock

#配置文件
/etc/my.cnf中[mysqld]标签下:socket=/opt/mysql.sock

#default参数:
--defaults-file=/tmp/a.txt配置文件中[mysqld]标签下:socket=/tmp/test.sock

做一测试:

准备:

# 停止MySQL服务

# 修改default参数:
[root@mysql50 ~]# vim /usr/lib/systemd/system/mysqld.service
 ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/tmp/a.txt
[root@mysql50 ~]# vim /tmp/a.txt
[mysqld]
socket=/tmp/test.sock
# 修改配置文件
[root@mysql50 ~]# vim /etc/my.cnf
socket=/opt/mysql.sock

测试

[root@mysql50 ~]# mysqld_safe --defaults-file=/tmp/a.txt --socket=/tmp/ssh.sock
[root@mysql50 ~]# ll /tmp/
total 4
-rw-r--r-- 1 root  root  31 Jul 10 20:28 a.txt
srwxrwxrwx 1 mysql mysql  0 Jul 10 20:30 ssh.sock

结论

可以发现在命令行中指定socket文件的优先级最高,--defaults-file文件次之~,再是配置文件,预编译的最低。

评论

还没有任何评论,你来说两句吧

提供支持 - 友情链接 - 衫小寨