此處的討論使用 mysqld_safe 來啟動多個 MySQL 實例。對於使用 RPM 發行的 MySQL 安裝,伺服器啟動和關閉由數個 Linux 平台上的 systemd 管理。在這些平台上,mysqld_safe 不會安裝,因為它是不必要的。有關使用 systemd 處理多個 MySQL 實例的資訊,請參閱 第 2.5.9 節,「使用 systemd 管理 MySQL 伺服器」。
在 Unix 上執行多個 MySQL 實例的一種方法是編譯具有不同預設 TCP/IP 連接埠和 Unix Socket 檔案的不同伺服器,以便每個伺服器在不同的網路介面上接聽。在每個安裝中使用不同的基本目錄進行編譯也會自動產生每個伺服器的個別、編譯內建的資料目錄、日誌檔案和 PID 檔案位置。
假設現有的 8.4 伺服器已設定為預設 TCP/IP 連接埠號碼 (3306) 和 Unix Socket 檔案 (/tmp/mysql.sock
)。若要設定新的 9.0.0 伺服器以具有不同的操作參數,請使用類似以下的 CMake 命令
$> cmake . -DMYSQL_TCP_PORT=port_number \
-DMYSQL_UNIX_ADDR=file_name \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-9.0.0
在這裡,port_number
和 file_name
必須與預設 TCP/IP 連接埠號碼和 Unix Socket 檔案路徑名稱不同,且 CMAKE_INSTALL_PREFIX
值應指定與現有 MySQL 安裝所在的目錄不同的安裝目錄。
如果您有一個 MySQL 伺服器正在給定的連接埠號碼上接聽,您可以使用以下命令來找出它正在使用哪些操作參數,用於數個重要的可設定變數,包括基本目錄和 Unix Socket 檔案名稱
$> mysqladmin --host=host_name --port=port_number variables
使用該命令顯示的資訊,您可以知道在設定其他伺服器時不要使用哪些選項值。
如果您將主機名稱指定為 localhost
,mysqladmin 預設會使用 Unix socket 檔案,而不是 TCP/IP。若要明確指定傳輸協定,請使用 --protocol={TCP|SOCKET|PIPE|MEMORY}
選項。
您無需為了使用不同的 Unix socket 檔案和 TCP/IP 連接埠號碼而重新編譯新的 MySQL 伺服器。也可以使用相同的伺服器二進制檔案,並在每次執行時使用不同的參數值啟動它。其中一種方法是使用命令列選項。
$> mysqld_safe --socket=file_name --port=port_number
若要啟動第二個伺服器,請提供不同的 --socket
和 --port
選項值,並傳遞 --datadir=
選項給 mysqld_safe,以便伺服器使用不同的資料目錄。dir_name
或者,將每個伺服器的選項放在不同的選項檔案中,然後使用指定相應選項檔案路徑的 --defaults-file
選項來啟動每個伺服器。例如,如果兩個伺服器實例的選項檔案分別命名為 /usr/local/mysql/my.cnf
和 /usr/local/mysql/my.cnf2
,則像這樣啟動伺服器:command
$> mysqld_safe --defaults-file=/usr/local/mysql/my.cnf
$> mysqld_safe --defaults-file=/usr/local/mysql/my.cnf2
實現類似效果的另一種方法是使用環境變數來設定 Unix socket 檔案名稱和 TCP/IP 連接埠號碼。
$> MYSQL_UNIX_PORT=/tmp/mysqld-new.sock
$> MYSQL_TCP_PORT=3307
$> export MYSQL_UNIX_PORT MYSQL_TCP_PORT
$> bin/mysqld --initialize --user=mysql
$> mysqld_safe --datadir=/path/to/datadir &
這是一種快速啟動第二個伺服器以進行測試的方法。此方法的優點是,環境變數設定適用於您從同一個 shell 呼叫的任何用戶端程式。因此,這些用戶端的連線會自動導向第二個伺服器。
第 6.9 節,「環境變數」包含可用來影響 MySQL 程式的其他環境變數清單。
在 Unix 上,mysqld_multi 腳本提供了另一種啟動多個伺服器的方法。請參閱第 6.3.4 節,「mysqld_multi — 管理多個 MySQL 伺服器」。