mysqld_multi 旨在管理多個 mysqld 處理序,這些處理序在不同的 Unix Socket 檔案和 TCP/IP 連接埠上監聽連線。它可以啟動或停止伺服器,或報告其目前的狀態。
對於某些 Linux 平台,從 RPM 或 Debian 套件安裝 MySQL 包含用於管理 MySQL 伺服器啟動和關閉的 systemd 支援。在這些平台上,不會安裝 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