mysqld 是傳統的 MySQL 伺服器程序。若要與 NDB 叢集搭配使用,mysqld 需要以支援 NDB
儲存引擎的方式建置,如同可從 https://mysqldev.dev.org.tw/downloads/ 取得的預編譯二進位檔一樣。如果您從原始碼建置 MySQL,您必須使用 -DWITH_NDB=1
或(已過時)-DWITH_NDBCLUSTER=1
選項來叫用 CMake,以包含 NDB
的支援。
如需從原始碼編譯 NDB 叢集的詳細資訊,請參閱第 25.3.1.4 節,「在 Linux 上從原始碼建置 NDB 叢集」,以及第 25.3.2.2 節,「在 Windows 上從原始碼編譯和安裝 NDB 叢集」。
(如需與 NDB 叢集相關的 mysqld 選項和變數的相關資訊,除了本節討論的以外,請參閱第 25.4.3.9 節,「用於 NDB 叢集的 MySQL Server 選項和變數」。)
如果 mysqld 二進位檔是使用叢集支援建置的,則 NDBCLUSTER
儲存引擎預設仍為停用。您可以使用兩種可能的選項之一來啟用此引擎
在啟動 mysqld 時,在命令列上使用
--ndbcluster
作為啟動選項。在您的
my.cnf
檔案的[mysqld]
區段中插入包含ndbcluster
的行。
驗證您的伺服器是否在啟用 NDBCLUSTER
儲存引擎的情況下執行的簡單方法,是在 MySQL Monitor(mysql)中發出 SHOW ENGINES
陳述式。您應該會在 NDBCLUSTER
的列中看到值 YES
作為 Support
值。如果您在此列中看到 NO
,或如果輸出中沒有顯示此類列,則表示您並未執行啟用 NDB
的 MySQL 版本。如果您在此列中看到 DISABLED
,則您需要使用剛剛描述的兩種方式之一來啟用它。
若要讀取叢集組態資料,MySQL 伺服器至少需要三項資訊
MySQL 伺服器本身的叢集節點 ID
管理伺服器的主機名稱或 IP 位址
它可以連線至管理伺服器的 TCP/IP 連接埠編號
節點 ID 可以動態配置,因此嚴格來說並不需要明確指定它們。
mysqld 參數 ndb-connectstring
用於指定連線字串,可以在啟動 mysqld 時在命令列上指定,也可以在 my.cnf
中指定。連線字串包含管理伺服器所在的主機名稱或 IP 位址,以及它使用的 TCP/IP 連接埠。
在下列範例中,ndb_mgmd.mysql.com
是管理伺服器所在的主機,而管理伺服器在連接埠 1186 上接聽叢集訊息
$> mysqld --ndbcluster --ndb-connectstring=ndb_mgmd.mysql.com:1186
如需連線字串的詳細資訊,請參閱第 25.4.3.3 節,「NDB 叢集連線字串」。
有了此資訊,MySQL 伺服器就可以作為叢集的完整參與者。(我們通常將以這種方式執行的 mysqld 程序稱為 SQL 節點。)它完全知道所有叢集資料節點及其狀態,並建立與所有資料節點的連線。在此情況下,它能夠使用任何資料節點作為交易協調器,並讀取和更新節點資料。
您可以在 mysql 用戶端中,使用 SHOW PROCESSLIST
檢視 MySQL 伺服器是否連線至叢集。如果 MySQL 伺服器已連線至叢集,且您具有 PROCESS
權限,則輸出中的第一列如下所示
mysql> SHOW PROCESSLIST \G
*************************** 1. row ***************************
Id: 1
User: system user
Host:
db:
Command: Daemon
Time: 1
State: Waiting for event from ndbcluster
Info: NULL
若要參與 NDB 叢集,必須使用選項 --ndbcluster
和 --ndb-connectstring
(或 my.cnf
中的對等選項)兩者 來啟動 mysqld 程序。如果 mysqld 僅使用 --ndbcluster
選項啟動,或如果它無法連絡叢集,則無法使用 NDB
資料表,也無法建立任何新的資料表,而不論儲存引擎為何。後者限制是一種安全措施,目的是要防止在 SQL 節點未連線至叢集時,建立與 NDB
資料表名稱相同的資料表。如果您希望在 mysqld 程序未參與 NDB 叢集時,使用不同的儲存引擎建立資料表,您必須在沒有 --ndbcluster
選項的情況下重新啟動伺服器。