今天在RHEL7上,嚴格按以前的安裝規範文檔,部署MySQL環境時,發現經過服務的方式啓動MySQL失敗:
關鍵錯誤是:mysql
log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'.
規範的配置文件是:/etc/mysql/my.cnf,其中也有對應 log-error 參數的值,並非上面錯誤提示的路徑。
並且爲什麼會有mariadb字樣呢,猜想多是RHEL7默認配套mariadb的緣由,可是查詢安裝相關的rpm包,也未發現有mariadb的服務端。
最後對比發現,RHEL7默認的/etc/my.cnf有默認值,即便mariadb沒有安裝,而這個默認值裏配置的 log-error 參數值正好匹配報錯信息。
解決方案有兩個:sql
我這裏選擇了第二種方案,成功解決問題。shell
最後覆盤時發現用:socket
mysql --help|more
能夠看到參數文件的順序是以下:code
Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
也就是說優先級:/etc/my.cnf > /etc/mysql/my.cnf
但咱們知道優先級低的配置文件由於最後被讀到,若是有同一參數在不一樣配置文件中設置有差別,反而優先級低的配置文件,反而應該會覆蓋以前優先級高的配置文件中的對應參數內容。
那麼這又是怎麼回事呢?文檔
實際上仔細觀察,會發現RHEL7中默認的my.cnf內容以下:部署
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid # # include all files from the config directory # !includedir /etc/my.cnf.d
實際上log-error的配置是在標籤[mysqld_safe]下,而不是[mysqld]下,而[mysqld_safe]標籤下的內容在以後優先級低的配置文件中並無再次設置;
換句話說,若是log-error在各個配置文件中,都是統一配置在[mysqld]下,就能夠實現被後面優先級低的用戶配置文件覆蓋。it