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一致。
作者微信公眾號(持續更新)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-1976461/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Mysql關於my.cnf引數檔案的讀取順序及各項配置的覆蓋優先順序MySql
- NLS引數優先順序解析
- HttpClient和HttpGet 引數的優先順序HTTPclient
- SpringBoot配置檔案優先順序載入順序Spring Boot
- js中同名變數或者引數的優先順序JS變數
- 同一個元素中有多個class,優先順序
- css 選擇器優先順序CSS
- MySQL配置檔案my.cnf引數優化和中文詳解MySql優化
- [20180131]啟動時引數檔案的優先順序.txt
- oracle啟動例項時使用引數檔案的順序Oracle
- css選擇器的優先順序CSS
- CSS 選擇器的優先順序CSS
- Oracle RAC引數設定優先順序別問題分析Oracle
- CSS優先順序CSS
- ansible 變數優先順序示例變數
- CSS 選擇器優先順序規則CSS
- CSS之選擇器及其優先順序CSS
- MySQL log_timestamps引數與mysql資料庫讀取my.cnf的順序MySql資料庫
- 中斷優先順序
- 深入理解CSS選擇器優先順序CSS
- CSS3選擇器及優先順序CSSS3
- ***CSS魔法堂:選擇器及其優先順序CSS
- 驗證at.allow 和at.deny 檔案的優先順序
- 多優先順序執行緒池實踐執行緒
- python運算子及優先順序順序Python
- C/C++多引數函式引數的計算順序與壓棧順序C++函式
- Python例項屬性的優先順序分析Python
- 同名函式的 帶 params 引數 與 不帶 params 引數的執行優先順序函式
- MySQL:讀取my.cnf的順序問題MySql
- Spring Boot、Nacos配置檔案properties、yml、yaml的優先順序Spring BootYAML
- Android程式優先順序Android
- SQL 優先順序join>whereSQL
- java運算子優先順序Java
- nginx快取優先順序Nginx快取
- php運算子優先順序PHP
- css優先順序彙總CSS
- CSS入門十二:選擇器的優先順序CSS
- 真正理解"CSS選擇器的優先順序"CSS