選項文件(Option Files)/配置文件(Configuration Files)的使用

1.選項文件的概念及作用

大多數MySQL程序能從選項文件(有時稱爲配置文件)中讀取啓動選項.運行程序時,爲了不必在命令行輸入常用選項,選項文件爲確定這些常用選項提供了一個方便的途徑.
爲了決定程序是否讀取選項文件,可以--help選項運行該程序.(對mysqld,使用--verbose和--help,二者缺一不可.)如果讀取選項文件,返回的幫助信息會指示它將尋找哪個文件,以及遵從的選項組.
--注:
帶有--no-defaults選項運行的mysql程序不會讀取.mylogin.cnf外的選項文件.很多選項文件爲文本編輯器創建的純文本文件.但包含登錄路徑選項的.mylogin.cnf文件則是個例外,該文件爲mysql_config_editor工具創建的加密文件.“登錄路徑(login path)”爲一個只允許某些選項的選項組,例如:host,user,password,port和socket等.客戶端程序通過--login-path選項確定從.mylogin.cnf讀取登錄路徑.爲了確定其他登錄路徑文件名,可以設置MYSQL_TEST_LOGIN_FILE環境變量,mysql-test-run.pl測試工具會使用該變量,但mysql_config_editor和mysql客戶端,像:mysql,mysqladmin等,也可以識別使用該變量.

2.選項文件查找順序
mysql將會按照下面列出的順序尋找並讀取存在的選項文件,如果不存在,可以使用合適的工具進行創建.
Windows上,mysql程序按照下面的順序尋找選項文件,並從中讀取啓動選項(從前向後按序尋找和讀取).
1)%WINDIR%\my.ini, %WINDIR%\my.cnf       全局選項
2)C:\my.ini, C:\my.cnf                   全局選項
3)BASEDIR\my.ini,BASEDIR\my.cnf          全局選項
4)defaults-extra-file                    --defaults-extra-file選項確定的文件
5)%APPDATA%\MySQL\.mylogin.cnf           登錄路徑選項(僅客戶端)
%WINDIR%表示windows系統目錄的位置,其一般爲c:\windows,可以用以下命令確定%WINDIR%環境變量的確切位置:
C:\> echo %WINDIR%
%APPDATA%表示windows應用數據目錄,可以用以下的命令確定%APPDATA%環境變量的確切位置:
C:\> echo %APPDATA%
BASEDIR表示mysql基安裝目錄.當用mysql installer安裝mysql5.7時,其典型爲“C:\PROGRAMDIR\MySQL\MySQL 5.7 Server”目錄,這裏PROGRAMDIR表示程序目錄(通常爲windows英文版的程序文件).


Unix和類Unix系統上,mysql程序按照下面列出的順序尋找選項文件,並從中讀取啓動選項(從前向後按序尋找和讀取) 
--注:
Unix平臺上,mysql忽略擁有通用寫權限的配置文件.這主要出於安全考慮.
1)/etc/my.cnf                           全局選項               
2)/etc/mysql/my.cnf                     全局選項
3)SYSCONFDIR/my.cnf                     全局選項
4)$MYSQL_HOME/my.cnf                    針對服務器特定的選項(僅服務器)
5)defaults-extra-file                   --defaults-extra-file選項確定的文件
6)~/.my.cnf                             針對用戶特定的選項
7)~/.mylogin.cnf                        針對用戶特定的登錄路徑(login path)選項(僅客戶端)
前述中,“~”表示當前用戶的主目錄($HOME的值).
SYSCONFDIR表示編譯mysql時SYSCONFDIR選項指定的目錄.默認時,其爲編譯時指定安裝目錄下的etc目錄.
MYSQL_HOME爲指向包含服務器特定mysql.cnf文件所在目錄的環境變量.如果沒有設置MYSQL_HOME,且通過mysqld_safe程序啓動mysql,則mysqld_safe將其設定爲BASEDIR,也就是mysql的安裝基目錄.
雖然DATADIR可能因爲平臺或安裝方法不同的不同,但其通常爲/usr/local/mysql/data. 該值爲編譯mysql時指定的數據目錄位置,而非啓動mysql時--datadir選項指定的位置.運行時指定--datadir不會影響服務器處理任何選項前尋找和讀取的選項文件.

3.選項文件語法及填寫規則
如果某個選項在選項文件中被指定了多次,則以最後一次爲準,但對mysqld來說有個特例,處於安全考慮,--user選項則以第一次指定值爲準,這樣可以防止選項文件中指定的用戶被命令行覆蓋掉.
下述選項文件的語法使用手工編輯的文件.但不包括.mylogin.cnf,其通過mysql_config_editor創建和加密.運行mysql程序時可以在命令行指定的任何長選項,都可以在選項文件中指定.爲了得到某個程序可用選項,使用--help選項運行該程序.(mysqld得用--verbose和--help兩個選項).
選項文件中確定選項的語法和命令行語法類似.但選項文件中,需要去掉選項名前面的兩個破折號且每行只確定一個選項.例如:命令行的--quick和--host=localhost選項,在選項文件中應該分別在獨立行中確定爲quick和host=localhost.爲了在選項文件中確定

--loose-opt_name,應該寫爲loose-opt_name.
選項文件中的空行將被忽視.非空行可以爲如下格式:
• #comment, ;comment
註釋行以#或;開始.一個#註釋也可以在一行中間開始.Comment lines start with # or ;. A # comment can start in the middle of a line as well.
• [group]
group爲程序或想爲其設置選項的組的名字.group行後,任何設置選項行將會應用於被命名的group,直到選項文件末尾或另一個group行被設置.選項group名大小寫不敏感.
• opt_name
--opt_name命令行選項的等同物.
• opt_name=value
命令行--opt_name=value的等同物. 選項文件中,"="旁邊可以有空格,但命令行則不行.其後的值可以選擇是否用單引號或雙引號括起來,當選項值中包含"#"等特殊字符時會用到.


選項名和值前後的空格將被自動刪掉.其中,可以在選項值中用轉義序列 \b, \t, \n, \r, \\, 和\s等表示空格,tab鍵,新行,回車,反斜槓和空格等.選項文件中,下列轉義規則將適用:
• 反斜槓後跟一個有效序列字符被轉換成序列表示的字符.例如:\s被轉換成空格.
• 反斜槓後不跟有效轉義序列字符將保持不變.例如:\S依然爲\S.
前述規則意味着文本反斜槓可以用\\表示,或當後面不跟一個有效轉義序列字符時用\表示.
選項文件中的轉義序列規則與SQL語句中文本串中的轉義序列規則不同.
後者上下文中,如果"x"不是一個有效的轉義序列字符,\x將變爲"x"而非\x.選項文件值的轉義規則尤其與windows路徑名相關,其用\作爲一個路徑名分隔符.如果後面跟一個轉義序列字符,windows路徑名分隔符必須被寫成\\.否則,可以寫成\\或\.或者,/也可以用作windows路徑名且將被認作\.假設像在選項文件中用“C:\Program Files\MySQL\MySQL Server 5.7”做基目錄.可以有多個方法.例如:
basedir="C:\Program Files\MySQL\MySQL Server 5.7"
basedir="C:\\Program Files\\MySQL\\MySQL Server 5.7"
basedir="C:/Program Files/MySQL/MySQL Server 5.7"
basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s5.7


如果選項group名和程序名相同,該group中的選項將用於該程序.例如:[mysqld]和[mysql]groups將會分別應用於mysqld服務器和mysql客戶端程序.
[client]選項group將被mysql發佈版本中提供的所有客戶端(但不包括mysqld)讀取.
[client]group使得用戶可以爲所有的客戶端確定選項.例如:[client]適於用來指定連接服務器的口令.(但要確定只有你可以存取該選項文件,以防口令泄露.除非某個選項能被所有客戶端程序使用,否則,不要講該選項放於[client]group.如果某個程序不能識別該選項,當你運行時將顯示錯誤信息後退出.選項文件中,應該將更通用的選項組放在前面,而更特定的組放在後面.例如:[client]group更通用,因爲所有客戶端程序將讀取,而[mysqldump]group只被mysqldump讀取.後面確定的將會覆蓋前面確定的同個選項的值,因此,按照先[client]後[mysqldump]的順序將使mysqldump特定選項覆蓋[client]選項.下面爲一個典型的全局選項文件:
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M
[mysqldump]
quick
下面爲一個典型的用戶選項文件:
[client]
# The following password will be sent to all standard MySQL clients
password="my password"
[mysql]
no-auto-rehash
connect_timeout=2
爲了創建確定mysql版本系列mysqld服務器讀取的選項groups,使用[mysqld-5.6], [mysqld-5.7]等名字的groups.下面的group指示mysql 5.7.x版本的servers使用sql_mode設置:
[mysqld-5.7]
sql_mode=TRADITIONAL

4.嵌套包含選項文件方法及指令
選項文件中可以使用!include指令來包含其他選項文件,以及!includedir搜索特定目錄作爲選項文件.例如:爲了包含/home/mydir/myopt.cnf文件,用如下指令:
!include /home/mydir/myopt.cnf
爲了搜索/home/mydir目錄和讀取發現的選項文件,用如下指令:
!includedir /home/mydir
mysql並不保證該目錄中選項文件被讀取的順序.
--注:
unix操作系統上,任何被發現及用!includedir指令包含的任何文件都必須有以“.cnf”結尾的文件名.windows,該指令將檢查帶".ini"或"cnf"擴展名的文件.
被包含選項文件的內容與任何其他選項文件類似.即,其應該包含選項groups,每個group以[group]行開始,以指示這些選項將應用的程序.
當被包含文件被處理時,僅當前程序正尋找的groups中的那些選項被用.其他group將被忽略.假設my.cnf文件包含如下行:
!include /home/mydir/myopt.cnf
且假設/home/mydir/myopt.cnf如下所示:
[mysqladmin]
force
[mysqld]
key_buffer_size=16M
如果my.cnf被mysqld處理,僅/home/mydir/myopt.cnf中的[mysqld] group被用.如果文件被mysqladmin處理,則僅[mysqladmin]group被用.如果文件被其他程序處理,則/home/mydir/myopt.cnf中的選項都不被用.
如果一個選項文件包含!include或!includedir指令,當選項文件被處理時,無論指令出現於文件的什麼位置,指令指示的文件都將被處理.
 

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