mysqld_multi 旨在管理多個 mysqld 處理程序,這些處理程序監聽不同 Unix socket 檔案和 TCP/IP 連接埠上的連線。它可以啟動或停止伺服器,或報告其目前狀態。
對於某些 Linux 平台,從 RPM 或 Debian 套件安裝 MySQL 包含 systemd 支援,以管理 MySQL 伺服器的啟動和關閉。在這些平台上,不會安裝 mysqld_multi,因為它是不必要的。有關使用 systemd 處理多個 MySQL 執行個體的資訊,請參閱 第 2.5.9 節,〈使用 systemd 管理 MySQL 伺服器〉。
mysqld_multi 在 my.cnf
中(或在 --defaults-file
選項所命名的檔案中)搜尋名為 [mysqld
的群組。N
]N
可以是任何正整數。以下討論中,此數字稱為選項群組編號或 GNR
。群組編號彼此區分選項群組,並用作 mysqld_multi 的引數,以指定您要啟動、停止或取得狀態報告的伺服器。這些群組中列出的選項與您在用於啟動 mysqld 的 [mysqld]
群組中使用的選項相同。(例如,請參閱 第 2.9.5 節,〈自動啟動和停止 MySQL〉。)但是,當使用多個伺服器時,每個伺服器都必須對 Unix socket 檔案和 TCP/IP 連接埠號碼等選項使用自己的值。有關在多伺服器環境中哪些選項必須每個伺服器都獨特的詳細資訊,請參閱 第 7.8 節,〈在一台機器上執行多個 MySQL 執行個體〉。
若要呼叫 mysqld_multi,請使用下列語法
mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...]
start
、stop
、reload
(停止並重新啟動)和 report
表示要執行的作業。您可以為單一伺服器或多個伺服器執行指定的作業,具體取決於選項名稱後面的 GNR
清單。如果沒有清單,mysqld_multi 會對選項檔案中的所有伺服器執行該作業。
每個 GNR
值都代表一個選項群組編號或群組編號範圍。該值應為選項檔案中群組名稱結尾的數字。例如,名為 [mysqld17]
的群組的 GNR
是 17
。若要指定數字範圍,請使用破折號分隔第一個和最後一個數字。GNR
值 10-13
代表群組 [mysqld10]
到 [mysqld13]
。可以在命令列上指定多個群組或群組範圍,並以逗號分隔。GNR
清單中不得有空白字元(空格或 Tab 鍵);空白字元之後的所有內容都會被忽略。
此命令使用選項群組 [mysqld17]
啟動單一伺服器
mysqld_multi start 17
此命令使用選項群組 [mysqld8]
和 [mysqld10]
到 [mysqld13]
停止多個伺服器
mysqld_multi stop 8,10-13
如需如何設定選項檔案的範例,請使用此命令
mysqld_multi --example
mysqld_multi 會依下列方式搜尋選項檔案
使用
--no-defaults
,不會讀取任何選項檔案。命令列格式 --no-defaults
類型 布林值 預設值 false
使用
--defaults-file=
,只會讀取指定的檔案。file_name
命令列格式 --defaults-file=filename
類型 檔案名稱 預設值 [無]
否則,會讀取標準位置清單中的選項檔案,包括由
--defaults-extra-file=
選項指定的任何檔案(如果有的話)。(如果多次指定此選項,則會使用最後一個值。)file_name
命令列格式 --defaults-extra-file=filename
類型 檔案名稱 預設值 [無]
有關這些和其他選項檔案選項的更多資訊,請參閱 第 6.2.2.3 節,「影響選項檔案處理的命令列選項」。
會搜尋讀取的選項檔案中是否有 [mysqld_multi]
和 [mysqld
選項群組。 N
][mysqld_multi]
群組可用於 mysqld_multi 本身 的選項。 [mysqld
群組可用於傳遞給特定 mysqld 執行個體的選項。N
]
[mysqld]
或 [mysqld_safe]
群組可用於所有 mysqld 或 mysqld_safe 執行個體讀取的通用選項。您可以指定 --defaults-file=
選項,以便為該執行個體使用不同的組態檔案,在這種情況下,將會使用該檔案中的 file_name
[mysqld]
或 [mysqld_safe]
群組作為該執行個體的設定。
mysqld_multi 支援下列選項。
-
命令列格式 --help
類型 布林值 預設值 false
顯示說明訊息並結束。
-
命令列格式 --example
類型 布林值 預設值 false
顯示範例選項檔案。
-
命令列格式 --log=路徑
類型 檔案名稱 預設值 /var/log/mysqld_multi.log
指定日誌檔案的名稱。如果檔案存在,則日誌輸出會附加到其中。
-
命令列格式 --mysqladmin=檔案
類型 檔案名稱 預設值 [無]
用於停止伺服器的 mysqladmin 二進位檔。
-
命令列格式 --mysqld=檔案
類型 檔案名稱 預設值 [無]
要使用的 mysqld 二進位檔。 請注意,您也可以將 mysqld_safe 指定為此選項的值。如果您使用 mysqld_safe 啟動伺服器,則可以在對應的
[mysqld
選項群組中包含N
]mysqld
或ledir
選項。這些選項指示 mysqld_safe 應啟動的伺服器名稱,以及伺服器所在目錄的路徑名稱。(請參閱 第 6.3.2 節,「mysqld_safe — MySQL 伺服器啟動指令碼」中對這些選項的描述。)範例[mysqld38] mysqld = mysqld-debug ledir = /opt/local/mysql/libexec
-
命令列格式 --no-log
類型 布林值 預設值 false
將日誌資訊列印到
stdout
而不是日誌檔案。預設情況下,輸出會傳送到日誌檔案。 -
命令列格式 --password=字串
類型 字串 預設值 [無]
在叫用 mysqladmin 時要使用的 MySQL 帳戶密碼。請注意,此選項的密碼值不是可選的,這與其他 MySQL 程式不同。
-
命令列格式 --silent
類型 布林值 預設值 false
靜音模式;停用警告。
-
命令列格式 --tcp-ip
類型 布林值 預設值 false
透過 TCP/IP 連接埠而不是 Unix Socket 檔案連線至每個 MySQL 伺服器。(如果遺失了 Socket 檔案,伺服器可能仍在執行,但只能透過 TCP/IP 連接埠存取。)預設情況下,連線是使用 Unix Socket 檔案進行。此選項會影響
stop
和report
操作。 -
命令列格式 --user=名稱
類型 字串 預設值 root
在叫用 mysqladmin 時要使用的 MySQL 帳戶使用者名稱。
-
命令列格式 --verbose
類型 布林值 預設值 false
更詳細。
-
命令列格式 --version
類型 布林值 預設值 false
顯示版本資訊並結束。
關於 mysqld_multi 的一些注意事項
最重要:在使用 mysqld_multi 之前,請務必了解傳遞給 mysqld 伺服器的選項的含義,以及您想要擁有獨立 mysqld 處理程序的原因。請注意使用相同資料目錄的多個 mysqld 伺服器的風險。請使用個別的資料目錄,除非您知道您在做什麼。在已執行緒化的系統中,使用相同的資料目錄啟動多個伺服器不會為您帶來額外的效能。請參閱 第 7.8 節,「在一部電腦上執行多個 MySQL 執行個體」。
重要事項請確保每個伺服器的資料目錄完全可供啟動特定 mysqld 處理程序的 Unix 帳戶存取。請勿將 Unix
root
帳戶用於此操作,除非您知道自己在做什麼。請參閱 第 8.1.5 節,「如何以一般使用者身分執行 MySQL」。請確保用於停止 mysqld 伺服器(使用 mysqladmin 程式)的 MySQL 帳戶,對每個伺服器都具有相同的使用者名稱和密碼。此外,請確保該帳戶具有
SHUTDOWN
權限。如果您想要管理的伺服器,其管理帳戶的使用者名稱或密碼不同,您可能需要在每個伺服器上建立具有相同使用者名稱和密碼的帳戶。例如,您可以為每個伺服器執行以下命令來設定通用的multi_admin
帳戶$> mysql -u root -S /tmp/mysql.sock -p Enter password: mysql> CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY 'multipass'; mysql> GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';
請參閱 第 8.2 節,「存取控制和帳戶管理」。您必須對每個 mysqld 伺服器執行此操作。連線至每個伺服器時,請適當變更連線參數。請注意,帳戶名稱的主機名稱部分必須允許您從您想要執行 mysqld_multi 的主機以
multi_admin
身分連線。每個 mysqld 的 Unix Socket 檔案和 TCP/IP 連接埠號碼必須不同。(或者,如果主機有多個網路位址,您可以設定
bind_address
系統變數,以使不同的伺服器監聽不同的介面。)如果您使用 mysqld_safe 來啟動 mysqld(例如,
--mysqld=mysqld_safe
),則--pid-file
選項非常重要。每個 mysqld 都應該有自己的處理程序 ID 檔案。使用 mysqld_safe 而不是 mysqld 的優點是,mysqld_safe 會監視其 mysqld 處理程序,並在該處理程序因使用kill -9
或其他原因(例如分段錯誤)傳送的訊號而終止時,重新啟動該處理程序。您可能想要使用 mysqld 的
--user
選項,但要執行此操作,您需要以 Unix 超級使用者 (root
) 身分執行 mysqld_multi 指令碼。選項是否在選項檔案中並不重要;如果您不是超級使用者,且 mysqld 處理程序是以您自己的 Unix 帳戶啟動,您只會收到警告。
以下範例說明如何設定選項檔案,以搭配 mysqld_multi 使用。 mysqld 程式的啟動或停止順序取決於它們在選項檔案中出現的順序。群組編號不需要形成連續的序列。範例中刻意省略了第一個和第五個 [mysqld
群組,以說明選項檔案中可以存在「間隙」。這能提供您更大的彈性。N
]
# This is an example of a my.cnf file for mysqld_multi.
# Usually this file is located in home dir ~/.my.cnf or /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
password = my_password
[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/data2/hostname.pid2
datadir = /usr/local/mysql/data2
language = /usr/local/mysql/share/mysql/english
user = unix_user1
[mysqld3]
mysqld = /path/to/mysqld_safe
ledir = /path/to/mysqld-binary/
mysqladmin = /path/to/mysqladmin
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/data3/hostname.pid3
datadir = /usr/local/mysql/data3
language = /usr/local/mysql/share/mysql/swedish
user = unix_user2
[mysqld4]
socket = /tmp/mysql.sock4
port = 3309
pid-file = /usr/local/mysql/data4/hostname.pid4
datadir = /usr/local/mysql/data4
language = /usr/local/mysql/share/mysql/estonia
user = unix_user3
[mysqld6]
socket = /tmp/mysql.sock6
port = 3311
pid-file = /usr/local/mysql/data6/hostname.pid6
datadir = /usr/local/mysql/data6
language = /usr/local/mysql/share/mysql/japanese
user = unix_user4