大多數 MySQL 程式可以從選項檔案(有時稱為組態檔案)讀取啟動選項。選項檔案提供一種便利的方式來指定常用的選項,因此每次執行程式時無需在命令列中輸入這些選項。
若要判斷程式是否讀取選項檔案,請使用 --help 選項叫用它。(對於 mysqld,請使用 --verbose 和 --help。)如果程式讀取選項檔案,則說明訊息會指出它尋找哪些檔案以及它識別哪些選項群組。
使用 --no-defaults 選項啟動的 MySQL 程式不會讀取除 .mylogin.cnf 以外的任何選項檔案。
使用停用的 persisted_globals_load 系統變數啟動的伺服器不會讀取 mysqld-auto.cnf。
許多選項檔案都是純文字檔案,使用任何文字編輯器建立。例外情況是
包含登入路徑選項的
.mylogin.cnf檔案。這是由 mysql_config_editor 公用程式建立的加密檔案。請參閱 第 6.6.7 節,「mysql_config_editor — MySQL 組態公用程式」。「登入路徑」是一個只允許特定選項的選項群組:host、user、password、port和socket。用戶端程式使用--login-path選項指定要從.mylogin.cnf讀取的登入路徑。若要指定替代的登入路徑檔案名稱,請設定
MYSQL_TEST_LOGIN_FILE環境變數。此變數由 mysql-test-run.pl 測試公用程式使用,但也由 mysql_config_editor 和 MySQL 用戶端(例如 mysql、mysqladmin 等等)識別。資料目錄中的
mysqld-auto.cnf檔案。此 JSON 格式檔案包含持續性的系統變數設定。它是透過執行SET PERSIST或SET PERSIST_ONLY語句由伺服器建立。請參閱 第 7.1.9.3 節,「持續性系統變數」。mysqld-auto.cnf的管理應留給伺服器,而非手動執行。
MySQL 會按照以下討論中描述的順序尋找選項檔案,並讀取任何存在的檔案。如果您想要使用的選項檔案不存在,請使用適當的方法建立它,如剛剛所討論的。
有關 NDB 叢集程式使用的選項檔案的資訊,請參閱 第 25.4 節,「NDB 叢集的組態」。
在 Windows 上,MySQL 程式會從下表中顯示的檔案讀取啟動選項,並按照指定的順序讀取(先列出的檔案會先讀取,稍後讀取的檔案會優先)。
表 6.1:在 Windows 系統上讀取的選項檔案
| 檔案名稱 | 目的 |
|---|---|
、 |
全域選項 |
C:\my.ini、C:\my.cnf |
全域選項 |
、 |
全域選項 |
defaults-extra-file |
使用 --defaults-extra-file 指定的檔案(如果有的話) |
|
登入路徑選項(僅限用戶端) |
|
使用 SET PERSIST 或 SET PERSIST_ONLY 持續性的系統變數(僅限伺服器) |
在上表中,%WINDIR% 代表您的 Windows 目錄的位置。這通常是 C:\WINDOWS。使用以下命令從 WINDIR 環境變數的值判斷其確切位置
C:\> echo %WINDIR%
%APPDATA% 代表 Windows 應用程式資料目錄的值。使用以下命令從 APPDATA 環境變數的值判斷其確切位置
C:\> echo %APPDATA%
BASEDIR 代表 MySQL 基本安裝目錄。當使用 MSI 安裝 MySQL 9.0 時,這通常是 C:\,其中 PROGRAMDIR\MySQL\MySQL Server 9.0PROGRAMDIR 代表程式目錄(對於英文版 Windows 通常為 Program Files)。
雖然 MySQL 組態工具將大多數檔案放置在 PROGRAMDIR 下,但預設情況下,它會將 my.ini 安裝在 C:\ProgramData\MySQL\MySQL Server 9.0\ 目錄下。
DATADIR 代表 MySQL 的資料目錄。它用於尋找 mysqld-auto.cnf,其預設值是 MySQL 編譯時內建的資料目錄位置,但可透過在處理 mysqld-auto.cnf 之前,指定 --datadir 作為選項檔案或命令列選項來變更。
在 Unix 和類 Unix 系統上,MySQL 程式會依以下表格中顯示的順序,從檔案中讀取啟動選項(先列出的檔案會先讀取,後讀取的檔案優先)。
在 Unix 平台上,MySQL 會忽略全域可寫入的設定檔。這是故意的,作為一種安全措施。
表格 6.2:在 Unix 和類 Unix 系統上讀取的選項檔案
| 檔案名稱 | 目的 |
|---|---|
/etc/my.cnf |
全域選項 |
/etc/mysql/my.cnf |
全域選項 |
|
全域選項 |
$MYSQL_HOME/my.cnf |
伺服器特定選項(僅限伺服器) |
defaults-extra-file |
使用 --defaults-extra-file 指定的檔案(如果有的話) |
~/.my.cnf |
使用者特定選項 |
~/.mylogin.cnf |
使用者特定登入路徑選項(僅限客戶端) |
|
使用 SET PERSIST 或 SET PERSIST_ONLY 持續性的系統變數(僅限伺服器) |
在上述表格中,~ 代表目前使用者的家目錄($HOME 的值)。
SYSCONFDIR 代表在建置 MySQL 時,使用 SYSCONFDIR 選項傳遞給 CMake 所指定的目錄。預設情況下,這是位於編譯時內建安裝目錄下的 etc 目錄。
MYSQL_HOME 是一個環境變數,包含伺服器特定 my.cnf 檔案所在的目錄路徑。如果未設定 MYSQL_HOME,且您使用 mysqld_safe 程式啟動伺服器,mysqld_safe 會將其設定為 BASEDIR,也就是 MySQL 的基本安裝目錄。
DATADIR 代表 MySQL 的資料目錄。它用於尋找 mysqld-auto.cnf,其預設值是 MySQL 編譯時內建的資料目錄位置,但可透過在處理 mysqld-auto.cnf 之前,指定 --datadir 作為選項檔案或命令列選項來變更。
如果找到同一個選項的多個實例,則最後一個實例優先,但有一個例外:對於 mysqld,為安全起見,會使用 --user 選項的第一個實例,以防止選項檔案中指定的使用者在命令列上被覆寫。
以下選項檔案語法的描述適用於您手動編輯的檔案。這不包括使用 mysql_config_editor 建立且已加密的 .mylogin.cnf,以及伺服器以 JSON 格式建立的 mysqld-auto.cnf。
在執行 MySQL 程式時,可以在命令列上指定的任何長選項,也可以在選項檔案中指定。若要取得程式可用的選項清單,請執行程式並使用 --help 選項。(對於 mysqld,請使用 --verbose 和 --help。)
在選項檔案中指定選項的語法與命令列語法類似(請參閱章節 6.2.2.1,「在命令列上使用選項」)。但是,在選項檔案中,您會省略選項名稱開頭的兩個破折號,並且每行只指定一個選項。例如,命令列上的 --quick 和 --host=localhost 應在選項檔案中分別指定為 quick 和 host=localhost。若要在選項檔案中指定格式為 --loose- 的選項,請將其寫成 opt_nameloose-。opt_name
選項檔案中的空行會被忽略。非空行可以採用以下任何形式
#,comment;comment註解行以
#或;開頭。#註解也可以從行的中間開始。[group]group是您要設定選項的程式或群組的名稱。在群組行之後,任何選項設定行都會套用到指定的群組,直到選項檔案結束或出現另一個群組行為止。選項群組名稱不區分大小寫。opt_name這相當於命令列上的
--。opt_nameopt_name=value這相當於命令列上的
--。在選項檔案中,您可以在opt_name=value=字元周圍使用空格,這在命令列上是不允許的。值可以選擇性地以單引號或雙引號括起來,如果值包含#註解字元,這會很有用。
選項名稱和值開頭和結尾的空格會自動刪除。
您可以在選項值中使用跳脫序列 \b、\t、\n、\r、\\ 和 \s 來表示退格、Tab、換行、歸位、反斜線和空格字元。在選項檔案中,這些跳脫規則適用
反斜線後接有效的跳脫序列字元,會轉換為該序列代表的字元。例如,
\s會轉換為空格。反斜線後未接有效的跳脫序列字元,則保持不變。例如,
\S會保留原狀。
上述規則表示,可以將文字反斜線寫成 \\,如果後面沒有接有效的跳脫序列字元,也可以寫成 \。
選項檔案中跳脫序列的規則與 SQL 陳述式中字串文字的跳脫序列規則略有不同。在後者的情況下,如果 「x」不是有效的跳脫序列字元,則 \ 會變成 「xx」而不是 \。請參閱章節 11.1.1,「字串文字」。x
選項檔案值的跳脫規則對於 Windows 路徑名稱尤其重要,因為 Windows 路徑名稱使用 \ 作為路徑名稱分隔符號。如果 Windows 路徑名稱中的分隔符號後面接著跳脫序列字元,則必須寫成 \\。如果後面沒有接跳脫序列字元,則可以寫成 \\ 或 \。或者,/ 也可以在 Windows 路徑名稱中使用,並且會被視為 \。假設您要在選項檔案中指定基礎目錄為 C:\Program Files\MySQL\MySQL Server 9.0。這可以用幾種方式完成。以下是一些範例
basedir="C:\Program Files\MySQL\MySQL Server 9.0"
basedir="C:\\Program Files\\MySQL\\MySQL Server 9.0"
basedir="C:/Program Files/MySQL/MySQL Server 9.0"
basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s9.0如果選項群組名稱與程式名稱相同,則群組中的選項會特別套用到該程式。例如,[mysqld] 和 [mysql] 群組分別套用到 mysqld 伺服器和 mysql 用戶端程式。
MySQL 發行版本中提供的所有用戶端程式都會讀取 [client] 選項群組(但 不包括 mysqld)。若要了解使用 C API 的協力廠商用戶端程式如何使用選項檔案,請參閱 C API 文件,網址為 mysql_options()。
[client] 群組可讓您指定套用於所有用戶端的選項。例如,[client] 是指定連線到伺服器密碼的適當群組。(但請確保選項檔案只有您自己可以存取,以免其他人發現您的密碼。)請務必不要在 [client] 群組中放置 所有 您使用的用戶端程式無法識別的選項。如果程式無法理解該選項,當您嘗試執行它們時,它們會在顯示錯誤訊息後終止。
先列出較通用的選項群組,然後列出較特定的群組。例如,[client] 群組更通用,因為所有用戶端程式都會讀取它,而 [mysqldump] 群組僅由 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=128M
[mysqldump]
quick以下是一個典型的使用者選項檔案
[client]
# The following password is sent to all standard MySQL clients
password="my password"
[mysql]
no-auto-rehash
connect_timeout=2若要建立只能由特定 MySQL 發行系列的 mysqld 伺服器讀取的選項群組,請使用名稱為 [mysqld-8.4]、[mysqld-9.0] 等的群組。以下群組表示 sql_mode 設定只能由版本號碼為 9.0.x 的 MySQL 伺服器使用
[mysqld-9.0]
sql_mode=TRADITIONAL
在選項檔案中可以使用 !include 指令來包含其他選項檔案,並使用 !includedir 來搜尋特定目錄中的選項檔案。例如,若要包含 /home/mydir/myopt.cnf 檔案,請使用以下指令:
!include /home/mydir/myopt.cnf若要搜尋 /home/mydir 目錄並讀取其中找到的選項檔案,請使用此指令:
!includedir /home/mydirMySQL 不保證目錄中選項檔案的讀取順序。
在 Unix 作業系統上,使用 !includedir 指令找到並包含的任何檔案必須以 .cnf 作為檔名結尾。在 Windows 上,此指令會檢查具有 .ini 或 .cnf 副檔名的檔案。
如同其他選項檔案,撰寫包含的選項檔案的內容。也就是說,它應該包含選項群組,每個群組前面都有一個 [ 行,指示該選項適用於哪個程式。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] 群組。如果該檔案由 mysqladmin 處理,則只會使用 [mysqladmin] 群組。如果該檔案由任何其他程式處理,則不會使用 /home/mydir/myopt.cnf 中的任何選項。
處理 !includedir 指令的方式類似,只是會讀取指定目錄中的所有選項檔案。
如果選項檔案包含 !include 或 !includedir 指令,則無論這些指令在檔案中的哪個位置,只要處理選項檔案時,就會處理這些指令所指定的檔案。
若要使包含指令生效,檔案路徑不應在引號內指定,且不應包含跳脫序列。例如,以下在 my.ini 中提供的陳述式會讀取選項檔案 myopts.ini:
!include C:/ProgramData/MySQL/MySQL Server/myopts.ini
!include C:\ProgramData\MySQL\MySQL Server\myopts.ini
!include C:\\ProgramData\\MySQL\\MySQL Server\\myopts.ini在 Windows 上,如果 !include 是檔案中的最後一行,請確保在結尾附加一個換行符號;否則,該行會被忽略。/path/to/extra.ini