文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  使用選項檔案

6.2.2.2 使用選項檔案

大多數 MySQL 程式可以從選項檔案(有時稱為組態檔案)讀取啟動選項。選項檔案提供一種方便的方式來指定常用的選項,這樣您每次執行程式時都不必在命令列中輸入這些選項。

若要判斷程式是否讀取選項檔案,請使用 --help 選項呼叫它。(對於 mysqld,請使用 --verbose--help。)如果程式讀取選項檔案,說明訊息會指出它尋找哪些檔案以及它辨識哪些選項群組。

注意

使用 --no-defaults 選項啟動的 MySQL 程式不會讀取 .mylogin.cnf 以外的任何選項檔案。

如果啟動伺服器時停用了 persisted_globals_load 系統變數,則不會讀取 mysqld-auto.cnf

許多選項檔案都是純文字檔案,使用任何文字編輯器建立。例外情況如下:

選項檔案處理順序

MySQL 會依據下列討論中說明的順序尋找選項檔案,並讀取任何存在的檔案。如果您要使用的選項檔案不存在,請使用適當的方法建立它,如剛剛所討論的。

注意

如需與 NDB Cluster 程式搭配使用的選項檔案相關資訊,請參閱 第 25.4 節,「NDB Cluster 的組態」

在 Windows 上,MySQL 程式會依照下表中顯示的順序從檔案讀取啟動選項(先列出的檔案會先讀取,稍後讀取的檔案具有優先權)。

表格 6.1:在 Windows 系統上讀取的選項檔案

檔案名稱 目的
%WINDIR%\my.ini%WINDIR%\my.cnf 全域選項
C:\my.iniC:\my.cnf 全域選項
BASEDIR\my.iniBASEDIR\my.cnf 全域選項
defaults-extra-file 使用 --defaults-extra-file 指定的檔案(如果有的話)
%APPDATA%\MySQL\.mylogin.cnf 登入路徑選項(僅限用戶端)
DATADIR\mysqld-auto.cnf 使用 SET PERSISTSET 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.4,其中 PROGRAMDIR 代表程式目錄(英文版本的 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 全域選項
SYSCONFDIR/my.cnf 全域選項
$MYSQL_HOME/my.cnf 伺服器專用選項(僅限伺服器)
defaults-extra-file 使用 --defaults-extra-file 指定的檔案(如果有的話)
~/.my.cnf 使用者專用選項
~/.mylogin.cnf 使用者專用登入路徑選項(僅限用戶端)
DATADIR/mysqld-auto.cnf 使用 SET PERSISTSET PERSIST_ONLY 持續的系統變數(僅限伺服器)

在上表中,~ 代表目前使用者的家目錄($HOME 的值)。

SYSCONFDIR 代表在建置 MySQL 時,使用 CMakeSYSCONFDIR 選項所指定的目錄。預設情況下,這是位於編譯時內建安裝目錄下的 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 在選項檔案中應指定為 quickhost=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,而不是 \x。請參閱 第 11.1.1 節,"字串常值"

選項檔案值的跳脫規則對於使用 \ 作為路徑名稱分隔符號的 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.cnfmysqld 處理,則只會使用 /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 是檔案中的最後一行,請確保在結尾附加一個換行符號;否則,該行將被忽略。