mysqld_multi可以管理多個幀聽不同Unix套接字文件和TCP/IP端口的連接的mysqld 進程。它可以啟動或停止服務器,或報告它們的當前狀態。
程序尋找my.cnf中的[mysqldN]組(或--config-file選項指定的文件)。N 可以為任何正整數。在下面的討論中該數字指選項組號,或GNR。組號區別各選項組,并用作mysqld_multi的參數來指定想要啟動、停止哪個服務器或獲取哪個服務器的狀態報告。這些組中的選項與將用來啟動mysqld的[mysqld]組中的相同。(例如,參見2.9.2.2節,“自動啟動和停止MySQL”)。但是,當使用多個服務器時,需要每個服務器使用自己的選項值,例如Unix套接字文件和TCP/IP端口號。關于在多服務器環境中,每個服務器對應唯一選項的詳細信息,參見5.12節,“在同一臺機器上運行多個MySQL服務器”。
要想調用mysqld_multi,使用下面的語法:
shell> mysqld_multi [options] {start|stop|report} [GNR[,GNR] ...]
start、stop和report表示你想要執行的操作。你可以在單個服務器或多個服務器上執行指定的操作,取決于選項名后面的GNR 列。如果沒有該列,mysqld_multi為選項文件中的所有服務器執行該操作。
每個GNR值代表一個選項組號或組號范圍。GNR值應為選項文件中組名末尾的號。例如,組[mysqld17]的GNR為17。要想指定組號的范圍,用破折號間隔開第1個和最后1個號。GNR值10-13代表組[mysqld10]到[mysqld13]。可以在命令行中指定多個組或組范圍,用逗號間隔開。GNR列不能有空格字符(空格或tab);空格字符后面的內容將被忽略掉。
該命令使用選項組[mysqld17]啟動單個服務器:
shell> mysqld_multi start 17
該命令停止多個服務器,使用選項組[mysql8]和[mysqld10]至[mysqld13]:
shell> mysqld_multi stop 8,10-13
使用該命令列出設置選項文件的示例:
shell> mysqld_multi --example
mysqld_multi支持下面的選項:
· --config-file=name
指定選項文件名。這關系到mysqld_multi從哪里尋找[mysqldN]選項組。沒有該選項,從通用my.cnf文件讀所有選項。選項不影響 mysqld_multi從哪里讀取自己的選項,總是從通用my.cnf文件的[mysqld_multi]組讀取。
· --example
顯示示例選項文件。
· --help
顯示幫助消息并退出。
· --log=name
指定日志文件名。如果該文件存在,后面為日志輸出。
· --mysqladmin=prog_name
用來停止服務器的mysqladmin二進制。
· --mysqld=prog_name
可用的mysqld二進制。請注意你還可以將該選項的值指定為mysqld_safe。選項被傳遞給 mysqld。確保在PATH環境變量設定值或mysqld_safe中有mysqld所在目錄。
· --no-log
按照標準輸出打印日志信息,不要寫入日志文件。默認情況下,輸出寫入日志文件。
· --password=password
調用mysqladmin時使用的MySQL賬戶的密碼。請注意該密碼值不是可選項,不象其它MySQL程序。
· --silent
禁用警告。
· --tcp-ip
通過TCP/IP端口而不是Unix套接字文件來連接每個MySQL服務器。(如果找不到套接字文件, 服務器仍然可以運行,但只能通過 TCP/IP端口訪問)。默認情況下,使用Unix套接字文件進行連接。該選項影響stop和report操作。
· --user=user_name
調用mysqladmin時使用的MySQL賬戶的用戶名。
· --verbose
更詳細。
· --version
顯示版本信息并退出。
關于mysqld_multi的一些注解:
· 確保停止mysqld服務器(用mysqladmin程序)的MySQL賬戶在各個服務器中的用戶名和密碼相同。并且應確保賬戶具有SHUTDOWN權限。如果你想要管理的服務器的管理賬戶有許多不同的用戶名或密碼,你需要在每個服務器上創建一個賬戶,并具有相同的用戶名和密碼。例如,你可以執行下面的命令為每個服務器設置一個普通multi_admin賬戶:
· shell> mysql -u root -S /tmp/mysql.sock -proot_password
· mysql> GRANT SHUTDOWN ON *.*
· -> TO 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';
參見5.7.2節,“權限系統工作原理”。你必須為每個mysqld服務器執行該操作。當連接時適當更改連接參數。請注意賬戶名的主機部分必須允許你用multi_admin從你想要運行mysqld_multi的主機進行連接。
· 如果你使用mysqld_safe來啟動mysqld(例如,--mysqld=mysqld_safe),--pid-file選項很重要。每個mysqld應有自己的進程ID文件。使用mysqld_safe而不使用mysqld的好處是mysqld_safe“守護”其mysqld進程,如果用kill –9發送的信號或由于其它原因(例如分段故障)進程終止,則重啟進程。請注意mysqld_safe腳本需要你從某個位置啟動它。這說明運行mysqld_multi前你必須進入某個目錄。如果啟動時有問題,請參見mysqld_safe腳本。特別是要檢查下列行:
· ----------------------------------------------------------------
· MY_PWD=`pwd`
· # Check if we are starting this relative (for the binary release)
· if test -d $MY_PWD/data/mysql -a -f ./share/mysql/english/errmsg.sys -a
· -x ./bin/mysqld
· ----------------------------------------------------------------
參見5.1.3節,“mysqld_safe:MySQL服務器啟動腳本”。上述行執行的測試應成功,否則你可能遇到了問題。
· 每個mysqld的Unix套接字文件和TCP/IP端口號必須不同。
· 你可能想要為mysqld使用--user選項,但為此你需要用Unix root用戶運行mysqld_multi腳本。選項文件中有選項不要緊;如果你不是超級用戶,并且你用自己的Unix賬戶重啟mysqld進程,你只會得到警告。
· 重要:確保mysqld進程啟動所用Unix賬戶可以完全訪問數據目錄。不要使用Unix root賬戶,除非你知道你在做什么。
· 非常重要:使用mysqld_multi前,確保理解傳遞給mysqld服務器的選項的含義以及你為什么想要獨立的mysqld進程。應清楚 在相同的數據目錄下使用多個mysqld服務器的危險。使用單獨的數據目錄,除非你知道你在做什么。在線程系統中,在相同的數據目錄下啟動多個服務器不會得到超性能。參見5.12節,“在同一臺機器上運行多個MySQL服務器”。
下面的示例顯示了你如何設置選項文件來使用mysqld_multi。專門省去第1個和第5個[mysqldN]組來說明你的選項文件可以稍有不同。這樣給你更大的靈活性。mysqld程序重啟或停止的順序由它們在選項文件中的順序決定。
# This file should probably be in your home dir (~/.my.cnf)
# or /etc/my.cnf
# Version 2.1 by Jani Tolonen
[mysqld_multi]
mysqld = /usr/local/bin/mysqld_safe
mysqladmin = /usr/local/bin/mysqladmin
user = multi_admin
password = multipass
[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/var2/hostname.pid2
datadir = /usr/local/mysql/var2
language = /usr/local/share/mysql/english
user = john
[mysqld3]
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/var3/hostname.pid3
datadir = /usr/local/mysql/var3
language = /usr/local/share/mysql/swedish
user = monty
[mysqld4]
socket = /tmp/mysql.sock4
port = 3309
pid-file = /usr/local/mysql/var4/hostname.pid4
datadir = /usr/local/mysql/var4
language = /usr/local/share/mysql/estonia
user = tonu
[mysqld6]
socket = /tmp/mysql.sock6
port = 3311
pid-file = /usr/local/mysql/var6/hostname.pid6
datadir = /usr/local/mysql/var6
language = /usr/local/share/mysql/japanese
user = jani
參見4.3.2節,“使用選項文件”。