在某些情況下,您可能想要在單一機器上執行多個 MySQL 執行個體。您可能想要在不干擾現有生產設定的情況下測試新的 MySQL 版本。或者您可能想要讓不同的使用者存取他們自己管理的不同 mysqld 伺服器。(例如,您可能是想要為不同客戶提供獨立 MySQL 安裝的網際網路服務提供者。)
可以使用每個執行個體不同的 MySQL 伺服器二進位檔,或為多個執行個體使用相同的二進位檔,或兩種方法的任何組合。例如,您可能會執行來自 MySQL 8.3 的伺服器和來自 MySQL 8.4 的伺服器,以查看不同版本如何處理給定的工作負載。或者,您可能會執行目前生產版本的多個執行個體,每個執行個體管理不同的資料庫集。
無論您是否使用不同的伺服器二進位檔,您執行的每個執行個體都必須設定數個操作參數的唯一值。這消除了執行個體之間發生衝突的可能性。參數可以在命令列、選項檔案中設定,或透過設定環境變數來設定。請參閱第 6.2.2 節「指定程式選項」。若要查看給定執行個體使用的值,請連線到它並執行 SHOW VARIABLES
陳述式。
MySQL 執行個體管理的主要資源是資料目錄。每個執行個體都應使用不同的資料目錄,其位置是使用 --datadir=
選項指定。如需為每個執行個體設定其自己的資料目錄的方法,以及未能這樣做的危險警告,請參閱第 7.8.1 節「設定多個資料目錄」。dir_name
除了使用不同的資料目錄之外,每個伺服器執行個體的多個其他選項也必須具有不同的值
--port
控制 TCP/IP 連線的連接埠號碼。或者,如果主機有多個網路位址,您可以設定bind_address
系統變數,以使每個伺服器監聽不同的位址。--socket={
file_name
|pipe_name
}--socket
控制 Unix 上的 Unix Socket 檔案路徑或 Windows 上的具名管道名稱。在 Windows 上,只有為允許具名管道連線設定的伺服器才需要指定不同的管道名稱。--shared-memory-base-name=
name
此選項僅在 Windows 上使用。它指定 Windows 伺服器用來允許用戶端使用共用記憶體連線的共用記憶體名稱。只有為允許共用記憶體連線設定的伺服器才需要指定不同的共用記憶體名稱。
此選項指出伺服器寫入其處理序 ID 的檔案路徑名稱。
如果您使用下列日誌檔案選項,則它們的值必須對每個伺服器都不同
關於記錄檔選項的進一步討論,請參閱第 7.4 節,「MySQL 伺服器記錄檔」。
為了獲得更好的效能,您可以為每個伺服器指定不同的選項,以便在多個實體磁碟之間分散負載。
使用不同的暫存目錄也更容易判斷哪個 MySQL 伺服器建立了特定的暫存檔。
如果您在不同的位置有多個 MySQL 安裝,您可以使用 --basedir=
選項指定每個安裝的基本目錄。這會導致每個執行個體自動使用不同的資料目錄、記錄檔和 PID 檔案,因為這些參數的預設值是相對於基本目錄的。在這種情況下,您唯一需要指定的其他選項是 dir_name
--socket
和 --port
選項。假設您使用 tar
檔案二進位發行版安裝不同版本的 MySQL。這些安裝在不同的位置,因此您可以使用其對應基本目錄下的 bin/mysqld_safe 命令來啟動每個安裝的伺服器。mysqld_safe 會決定要傳遞給 mysqld 的正確 --basedir
選項,而您只需要指定傳遞給 mysqld_safe 的 --socket
和 --port
選項。
如下面章節所述,可以透過指定適當的命令選項或設定環境變數來啟動其他伺服器。但是,如果您需要在更永久的基礎上執行多個伺服器,則使用選項檔案為每個伺服器指定必須唯一的值會更方便。--defaults-file
選項對於此目的非常有用。