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