mysql客戶端讀取配置文件的順序

遇到一個奇怪的現象,mysql客戶端的默認user及host從root變爲了zhenxing,但常規的配置路徑均沒有明確指定配置

## mysql客戶端的默認行爲user變成了zhenxing
[[email protected] ~]# mysql --help|egrep "user|host|port"
  -h, --host=name     Connect to host.
  -P, --port=#        Port number to use for connection or 0 for default to, in
  -u, --user=name     User for login if not current user.
host                              127.0.0.1
port                              3306
user                              zhenxing
  
[[email protected] ~]# mysql --no-defaults --help|egrep "user|host|port"
  -h, --host=name     Connect to host.
  -P, --port=#        Port number to use for connection or 0 for default to, in
  -u, --user=name     User for login if not current user.
host                              127.0.0.1
port                              3306
user                              zhenxing

## 獲取mysqld的配置文件讀取順序,mysql客戶端的讀取行爲與mysqld一致
[[email protected] ~]# mysqld --verbose --help |grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf /usr/local/mysql/my.cnf ~/.my.cnf
                      my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default

## /etc/my.cnf中的客戶端配置行爲
[client]
port                                                    = 3306
user                                                    = root
socket                                                  = /data/mysql/data/mysql_3306.sock
password                                                = Uw5H7QG3h3f///4X
#database = sbtest
 
[mysql]
default-character-set                                   = utf8mb4
prompt                                                  = '\U[\d]> '
user                                                    = root
password                                                = Uw5H7QG3h3f///4X
show-warnings                                           = true

## /usr/local/mysql/etc/my.cnf中的客戶端配置行爲
## /usr/local/mysql/etc/my.cnf中的客戶端配置行爲 無實際含義,測試使用
[client]
user = /usr/local/mysql/etc/my.cnf
  
## ~/.my.cnf 中的客戶端配置行爲 無實際含義,測試使用
[client]
user = ~/.my.cnf

## 查看mysql客戶端實際讀取的配置文件行爲
[[email protected] ~]# mysql --print-defaults
--port=3306 --user=root --socket=/data/mysql/data/mysql_3306.sock --password=***** --default-character-set=utf8mb4 --prompt=\U[\d]>  --user=root --password=***** --show-warnings=true --user=/usr/local/mysql/etc/my.cnf --user=~/.my.cnf --user=zhenxing --password=***** --host=127.0.0.1 --port=3306

從輸出結果可以得到以下結論

  • 對配置文件的讀取是從上往下讀取,下面的參數配置覆蓋上面的
  • 對多個配置文件的讀取按照/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf /usr/local/mysql/my.cnf ~/.my.cnf的順序
  • 除了對/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf /usr/local/mysql/my.cnf ~/.my.cnf這些配置文件的讀取外,還額外的讀取了其他配置文件

MySQL提供了一個mysql_config_editor工具用來配置便捷的登錄操作別名,該操作會在當前用戶home目錄下生成.mylogin.cnf文件,如下所示

  • 定義了一個login-path爲zhenxing(不明確指定log-path不會使用)
  • 定義了一個login-path爲client(不明確指定log-path也會使用,作爲默認行爲)
[[email protected] ~]# mysql_config_editor print --all
[zhenxing]
user = zhenxing
password = *****
host = 127.0.0.1
port = 3306
[client]
user = zhenxing
password = *****
host = 127.0.0.1
port = 3306

結論

mysql客戶端除了會按照常規的順序從上到下讀取多個my.cnf以外,當使用了mysql_config_editor工具,該工具生成的默認配置也會被讀取,且讀取順序在所有配置文件之後
且即使指定了--no-defaults參數不讀取任何my.cnf配置, mysql客戶端依舊會去讀取login-path中指定的別名爲[client]或[mysql]的配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章