大多數 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 Cluster 程式搭配使用的選項檔案相關資訊,請參閱 第 25.4 節,「NDB Cluster 的組態」。
在 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 8.4 時,通常為 C:\
,其中 PROGRAMDIR
\MySQL\MySQL Server 8.4PROGRAMDIR
代表程式目錄(英文版本的 Windows 通常是 Program Files
)。
雖然 MySQL Configurator 將大多數檔案放置在 PROGRAMDIR
下,但它預設會將 my.ini
安裝在 C:\ProgramData\MySQL\MySQL Server 8.4\
目錄下。
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 時,使用 CMake 的 SYSCONFDIR
選項所指定的目錄。預設情況下,這是位於編譯時內建安裝目錄下的 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
選項的第一個執行個體會作為安全預防措施使用,以防止在選項檔案中指定的使用者在命令列上被覆寫。
以下選項檔案語法的描述適用於您手動編輯的檔案。這不包括 .mylogin.cnf
(使用 mysql_config_editor 建立且已加密的檔案)和 mysqld-auto.cnf
(伺服器以 JSON 格式建立的檔案)。
在執行 MySQL 程式時,可以在選項檔案中指定任何可以在命令列上使用的長選項。若要取得程式的可用選項清單,請使用 --help
選項執行它。(對於 mysqld,請使用 --verbose
和 --help
。)
在選項檔案中指定選項的語法與命令列語法類似(請參閱 第 6.2.2.1 節,"在命令列上使用選項")。不過,在選項檔案中,您會省略選項名稱開頭的兩個破折號,且每行只指定一個選項。例如,命令列上的 --quick
和 --host=localhost
在選項檔案中應指定為 quick
和 host=localhost
(各佔一行)。若要在選項檔案中指定 --loose-
形式的選項,請將其寫為 opt_name
loose-
。opt_name
選項檔案中的空白行會被忽略。非空白行可以採用下列任何一種形式
#
、註解
;
註解
註解行以
#
或;
開頭。#
註解也可以從行中間開始。[
群組
]群組
是您想要設定選項的程式或群組名稱。在群組行之後,任何選項設定行都會套用至指定的群組,直到選項檔案結尾或給定另一個群組行為止。選項群組名稱不區分大小寫。opt_name
這相當於命令列上的
--
。opt_name
opt_name
=值
這相當於命令列上的
--
。在選項檔案中,您可以讓opt_name
=值
=
字元周圍有空格,這在命令列上是不成立的。值可以選擇性地用單引號或雙引號括起來,如果值包含#
註解字元,這會很有用。
選項名稱和值的開頭和結尾空格會自動刪除。
您可以在選項值中使用跳脫序列 \b
、\t
、\n
、\r
、\\
和 \s
來代表退格鍵、跳格鍵、換行字元、歸位字元、反斜線和空格字元。在選項檔案中,這些跳脫規則適用
後接有效跳脫序列字元的反斜線會轉換為序列所代表的字元。例如,
\s
會轉換為空格。後接無效跳脫序列字元的反斜線會保持不變。例如,
\S
會保留原樣。
先前的規則表示,可以將常值反斜線寫為 \\
,或如果後面沒有接有效跳脫序列字元,則可以寫為 \
。
選項檔案中跳脫序列的規則與 SQL 陳述式中字串常值中跳脫序列的規則略有不同。在後者的情況下,如果 「x
」不是有效的跳脫序列字元,\
會變成 「x
x
」,而不是 \
。請參閱 第 11.1.1 節,"字串常值"。x
選項檔案值的跳脫規則對於使用 \
作為路徑名稱分隔符號的 Windows 路徑名稱尤其重要。Windows 路徑名稱中的分隔符號,如果後面接著跳脫序列字元,則必須寫為 \\
。如果後面沒有接著跳脫序列字元,則可以寫為 \\
或 \
。或者,可以在 Windows 路徑名稱中使用 /
,並將其視為 \
。假設您想要在選項檔案中指定基本目錄為 C:\Program Files\MySQL\MySQL Server 8.4
。這可以用幾種方式來完成。以下是一些範例
basedir="C:\Program Files\MySQL\MySQL Server 8.4"
basedir="C:\\Program Files\\MySQL\\MySQL Server 8.4"
basedir="C:/Program Files/MySQL/MySQL Server 8.4"
basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s8.4
如果選項群組名稱與程式名稱相同,則群組中的選項會特別套用至該程式。例如,[mysqld]
和 [mysql]
群組分別套用至 mysqld 伺服器和 mysql 用戶端程式。
[client]
選項群組會由 MySQL 發行版本中提供的所有用戶端程式讀取(但不是由 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.3]
、[mysqld-8.4]
等的群組。以下群組表示 sql_mode
設定僅應由版本號碼為 8.4.x 的 MySQL 伺服器使用
[mysqld-8.4]
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
的檔案。
如同任何其他選項檔案一樣,撰寫包含的選項檔案內容。也就是說,它應包含選項群組,每個群組前面都加上 [
行,表示選項套用的程式。群組
]
在處理包含的檔案時,只會使用目前程式正在尋找的群組中的選項。其他群組則會被忽略。假設 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