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


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

6.2.2.2 使用選項檔案

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

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

注意

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

使用停用的 persisted_globals_load 系統變數啟動的伺服器不會讀取 mysqld-auto.cnf

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

選項檔案處理順序

MySQL 會按照以下討論中描述的順序尋找選項檔案,並讀取任何存在的檔案。如果您想要使用的選項檔案不存在,請使用適當的方法建立它,如剛剛所討論的。

注意

有關 NDB 叢集程式使用的選項檔案的資訊,請參閱 第 25.4 節,「NDB 叢集的組態」

在 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 9.0 時,這通常是 C:\PROGRAMDIR\MySQL\MySQL Server 9.0,其中 PROGRAMDIR 代表程式目錄(對於英文版 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 全域選項
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 時,使用 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 應在選項檔案中分別指定為 quickhost=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而不是 \x。請參閱章節 11.1.1,「字串文字」

選項檔案值的跳脫規則對於 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.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 是檔案中的最後一行,請確保在結尾附加一個換行符號;否則,該行會被忽略。