大多數人們都在指定的機器上運行單一MySQL伺服器,但在某些情況下,運行多個伺服器是有好處的: 您可以在成品伺服器運行的狀態下測試新版本的伺服器。在這種情況下,將運行不同的伺服器。
作業系統通常將總進程限制施加於開啟檔案的描述符數量。如果系統提高該限制值有困難,則運行多個伺服器是解決該限制的辦法(例如,提高限制可能需要重新編譯該內核,並且,如果該機器不是您的管轄範圍,可能還不能這樣做)。在這種情況中,您可能會執行相同伺服器的多個執行個體。
網路服務經常提供給顧客他們自己的MySQL安裝程序,它需要單獨的伺服器。在這種情況下,您可能會執行相同伺服器或不同伺服器的多個實例,如果不同的顧客需要不同MySQL版本的話。
當然,同時運行幾個伺服器比只運行一個更複雜。如果您打算安裝多個版本,則不能將它們都安裝在相同的位置。當伺服器運行時,某些參數對於每個伺服器必須是唯一的。其中有些參數包括在伺服器安裝的地方:資料目錄的路徑名、TCP/IP 連接埠和UNIX 網域的套接字路徑名,以及用於執行多個伺服器的UNIX 帳號(如果不在相同的帳號下執行所有的伺服器的話)。如果決定運行多個伺服器,則必須保持對正在使用的參數有良好說明,以便不失去對運行的追蹤。
配置和安裝多個伺服器
如果打算運行不同版本的伺服器而非相同伺服器的多個實例,則應該在不同的位置安裝它們。如果安裝二進位(不是RPM)分發包,它們將在包含版本號的目錄名下安裝。如果從原始程式分發包中安裝,則使不同的分發包分開的最容易的方法是,當在每個版本的MySQL安裝過程中執行configure 時使用--with-prefix 選項。這將導致在單獨的目錄下進行安裝,並且可以連接該目錄到該分發包的版本號上。例如,您可以如下設定一個MySQL分發包,這裡的version 是MySQL的版本號碼:
% ./configure ..with-prefix=/usr/local/mysql-version
with-prefix 選項也會決定伺服器的唯一資料目錄。您可能會增加選項來配置其他的伺服器專有的值,例如TCP/IP 連接埠和套接字路徑名稱( --with-tcp-port 和- - with - un ix - socket)。
如果打算運行相同伺服器的多個實例,則伺服器專用的任何選項將需要在執行時指定。
多個伺服器的啟動過程
啟動多個伺服器比使用單一伺服器複雜,因為safe_mysqld 和mysql.server 二者均在單一伺服器上運作良好。作者建議您仔細研究safe_mysqld 並用它作為啟動過程的基礎,除非您使用按自己的需求修改得更精細的拷貝。
必須處理的一個問題是如何在選項檔案中指定選項。對於多個伺服器,不能對在總伺服器基礎上變更了的設定使用/ etc / my.cnf,只能為所有伺服器都相同的設定使用該檔案。如果每個伺服器都有不同的資料目錄位置,可以在每個伺服器資料目錄的my.cnf 檔案中指定伺服器專有的參數。換句話說,應為所有伺服器都使用的設定使用/ etc / my.cnf,並且為伺服器專有的設定使用DATA DIR/ my.cnf,這裡的DATADIR 隨每個伺服器變化。
指定伺服器選項的另一種方法是:使用- - defa ul ts - file =path _ name 作為該命令列的第一個選項,以便告訴伺服器從path_name 指定的檔案中讀取選項。這樣,可以將該檔案中的伺服器選項唯一地放置到該伺服器中,然後告訴伺服器在啟動時讀取該檔案。請注意,如果指定該選項,則沒有任何通常的選項檔案(如/ etc / my.cnf)將被使用。