下載本手冊
PDF (US Ltr) - 2.2Mb
PDF (A4) - 2.3Mb


MySQL Shell 8.4  /  ...  /  建立 InnoDB 叢集

7.4.3 建立 InnoDB 叢集

準備好執行個體後,使用 dba.createCluster() 函數建立叢集,使用 MySQL Shell 連接的執行個體作為叢集的種子執行個體。種子執行個體會複寫到您新增至叢集的其他執行個體,使其成為種子執行個體的複本。在此程序中,ic-1 執行個體會用作種子。當您發出 dba.createCluster(名稱) 時,MySQL Shell 會建立與連線至 MySQL Shell 目前全域工作階段的伺服器執行個體的傳統 MySQL 通訊協定工作階段。例如,若要建立名為 testCluster 的叢集,並將傳回的叢集指派給名為 cluster 的變數

mysql-js> var cluster = dba.createCluster('testCluster')
Validating instance at icadmin@ic-1:3306...
This instance reports its own address as ic-1
Instance configuration is suitable.
Creating InnoDB cluster 'testCluster' on 'icadmin@ic-1:3306'...
Adding Seed Instance...
Cluster successfully created. Use Cluster.addInstance() to add MySQL instances.
At least 3 instances are needed for the cluster to be able to withstand up to
one server failure.
注意

叢集的名稱不得為空,且長度不得超過 63 個字元。它只能以字母數字字元或 _ (底線) 開頭,並且只能包含字母數字、_ (底線)、. (句點) 或 - (連字號) 字元。

這種將傳回的叢集指派給變數的模式,可讓您接著使用叢集物件的方法,對叢集執行進一步作業。傳回的叢集物件會使用新的工作階段,獨立於 MySQL Shell 的全域工作階段。這可確保如果您變更 MySQL Shell 全域工作階段,叢集物件會維持其與執行個體的工作階段。

為了能夠管理叢集,您必須確保您有具有必要權限的適當使用者。建議的方法是建立管理使用者。如果您在設定執行個體時未建立管理使用者,請使用 叢集.setupAdminAccount() 作業。例如,若要建立名為 icadmin 的使用者,其可以管理指派給變數 cluster 的 InnoDB 叢集,請發出

mysql-js> cluster.setupAdminAccount("icadmin")

如需有關 InnoDB 叢集管理員帳戶的詳細資訊,請參閱手動設定 InnoDB 叢集管理員帳戶

當您執行 dba.createCluster() 時,以及當您透過執行 叢集.addInstance() 將其他伺服器執行個體新增至 InnoDB 叢集時,下列錯誤會記錄到 MySQL 伺服器執行個體的錯誤記錄檔中。這些訊息是無害的,而且與 AdminAPI 啟動群組複寫的方式相關

2020-02-10T10:53:43.727246Z 12 [ERROR] [MY-011685] [Repl] Plugin
group_replication reported: 'The group name option is mandatory'
2020-02-10T10:53:43.727292Z 12 [ERROR] [MY-011660] [Repl] Plugin
group_replication reported: 'Unable to start Group Replication on boot'
注意

如果您遇到與無法存取中繼資料相關的錯誤,您可能已設定迴路網路介面。為了正確使用 InnoDB 叢集,請停用迴路介面。

若要檢查是否已建立叢集,請使用叢集執行個體的 status() 函數。請參閱使用 叢集.status() 檢查叢集狀態

提示

伺服器執行個體屬於叢集後,請務必僅使用 MySQL Shell 和 AdminAPI 來管理它們。不支援在執行個體新增至叢集後,嘗試手動變更執行個體上群組複寫的設定。同樣地,不支援在使用 AdminAPI 設定執行個體後,修改對 InnoDB 叢集至關重要的伺服器變數,例如 server_uuid

當您使用 MySQL Shell 建立叢集時,您可以設定將執行個體從叢集中逐出前等待的時間量,例如當它們變成無法連線時。將 expelTimeout 選項傳遞至 dba.createCluster() 作業,這會設定種子執行個體上的 group_replication_member_expel_timeout 變數。expelTimeout 選項可以接受 0 到 3600 範圍內的整數值。所有執行 MySQL 伺服器 8.0.13 和更新版本的執行個體,其新增至具有 expelTimeout 設定的叢集,都會自動設定為具有與種子執行個體上設定的相同 expelTimeout 值。

如需有關您可以傳遞至 dba.createCluster() 的其他選項的資訊,請參閱第 7.9 節「修改或解散 InnoDB 叢集」

可以使用 dba.createCluster() 啟用或停用 group_replication_paxos_single_leader

注意

這只能由 MySQL Shell 在 MySQL Server 8.0.31 或更高版本上設定,因為 MySQL Shell 需要 replication_group_communication_information 資料表中 WRITE_CONSENSUS_SINGLE_LEADER_CAPABLE 所提供的資訊,而該資訊是在 MySQL 8.0.31 中引入的。

InnoDB 叢集 replicationAllowedHost

當您建立叢集時,如果您有安全要求,要求 AdminAPI 自動建立的所有帳戶都具有嚴格的驗證要求,您可以設定 replicationAllowedHost 叢集設定選項的值。replicationAllowedHost 選項表示自動建立的所有帳戶只能使用嚴格的子網路式篩選,從允許的主機連線。先前,InnoDB 叢集建立的內部使用者帳戶,預設可從任何位置存取。

replicationAllowedHost 選項可以接受字串值。例如,若要建立名為 testCluster 的叢集,並將 replicationAllowedHost 選項設定為 192.0.2.0/24,請發出

mysql-js> dba.createCluster('testCluster', {replicationAllowedHost:'192.0.2.0/24'})

設定通訊堆疊

InnoDB 叢集支援 MySQL 8.0.27 中為群組複寫引入的 MySQL 通訊堆疊。

選項 communicationStack: XCOM|MYSQL 會設定群組複寫系統變數 group_replication_communication_stack 的值。

例如

       mysql-js> dba.createCluster("testCluster", {communicationStack: "xcom"})

MYSQL 通訊堆疊是為 MySQL 8.0.27 或更高版本建立的所有新叢集的預設值。

如需更多資訊,請參閱第 7.5.9 節「設定群組複寫通訊堆疊」