此處的討論使用 mysqld_safe 來啟動 MySQL 的多個實例。對於使用 RPM 發行的 MySQL 安裝,伺服器的啟動和關閉由數個 Linux 平台上的 systemd 管理。在這些平台上,由於不必要,因此不會安裝 mysqld_safe。有關使用 systemd 來處理多個 MySQL 實例的資訊,請參閱 第 2.5.9 節,「使用 systemd 管理 MySQL 伺服器」。
在 Unix 上執行多個 MySQL 實例的一種方法是使用不同的預設 TCP/IP 埠和 Unix socket 檔案編譯不同的伺服器,以便每個伺服器監聽不同的網路介面。在每個安裝使用不同的基本目錄進行編譯也會自動導致每個伺服器有單獨的、編譯至其中的資料目錄、日誌檔案和 PID 檔案位置。
假設現有的 8.3 伺服器已設定為預設的 TCP/IP 埠號碼 (3306) 和 Unix socket 檔案 (/tmp/mysql.sock
)。若要將新的 8.4.0 伺服器設定為具有不同的操作參數,請使用類似以下的 CMake 命令
$> cmake . -DMYSQL_TCP_PORT=port_number \
-DMYSQL_UNIX_ADDR=file_name \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-8.4.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
,請使用以下命令啟動伺服器:
$> 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 伺服器」。