大多數 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_name
loose-
。opt_name
選項檔案中的空行會被忽略。非空行可以採用以下任何形式
#
,comment
;
comment
註解行以
#
或;
開頭。#
註解也可以從行的中間開始。[
group
]group
是您要設定選項的程式或群組的名稱。在群組行之後,任何選項設定行都會套用到指定的群組,直到選項檔案結束或出現另一個群組行為止。選項群組名稱不區分大小寫。opt_name
這相當於命令列上的
--
。opt_name
opt_name
=value
這相當於命令列上的
--
。在選項檔案中,您可以在opt_name
=value
=
字元周圍使用空格,這在命令列上是不允許的。值可以選擇性地以單引號或雙引號括起來,如果值包含#
註解字元,這會很有用。
選項名稱和值開頭和結尾的空格會自動刪除。
您可以在選項值中使用跳脫序列 \b
、\t
、\n
、\r
、\\
和 \s
來表示退格、Tab、換行、歸位、反斜線和空格字元。在選項檔案中,這些跳脫規則適用
反斜線後接有效的跳脫序列字元,會轉換為該序列代表的字元。例如,
\s
會轉換為空格。反斜線後未接有效的跳脫序列字元,則保持不變。例如,
\S
會保留原狀。
上述規則表示,可以將文字反斜線寫成 \\
,如果後面沒有接有效的跳脫序列字元,也可以寫成 \
。
選項檔案中跳脫序列的規則與 SQL 陳述式中字串文字的跳脫序列規則略有不同。在後者的情況下,如果 「x
」不是有效的跳脫序列字元,則 \
會變成 「x
x
」而不是 \
。請參閱章節 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/mydir
MySQL 不保證目錄中選項檔案的讀取順序。
在 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