若要從 InnoDB ClusterSet 移除叢集,請使用
命令。如果根本無法聯絡到叢集,則可以使用 clusterSet
.removeCluster()force
選項。
的語法如下clusterSet
.removeCluster()
clusterSet.removeCluster(clusterName[, options])
叢集可以從 ClusterSet 移除,方法是移除叢集但保持其完整性,或者移除叢集並將其解散為其成員執行個體。兩種方法都會保留所有使用者資料。
依預設,移除的叢集會解散為其組件執行個體。這是由 dissolve
選項設定,預設值為 true
。
InnoDB ClusterSet 中的主要叢集無法使用此命令移除。如果您確實需要移除主要叢集,您必須先執行受控制的切換 (請參閱 第 8.7 節,「InnoDB ClusterSet 控制切換」) 或緊急容錯移轉 (請參閱 第 8.8 節,「InnoDB ClusterSet 緊急容錯移轉」),將主要叢集降級為複本叢集,並將其中一個複本叢集升級為主要叢集。之後,就可以使用此程序移除先前的主要叢集。
解散的 InnoDB 叢集無法重新加入 InnoDB ClusterSet 部署。如果您想再次使用部署中的伺服器執行個體,您可以使用它們來設定新的叢集,並將該叢集加入 ClusterSet。
若要從 InnoDB ClusterSet 移除叢集並解散叢集,請遵循此程序
使用 MySQL Shell,使用 InnoDB Cluster 管理員帳戶 (使用
建立) 連線到主要叢集或其中一個複本叢集中的任何成員伺服器。您也可以使用 InnoDB Cluster 伺服器組態帳戶,該帳戶也具有必要的權限。建立連線後,請使用cluster
.setupAdminAccount()dba.getClusterSet()
或
命令取得cluster
.getClusterSet()ClusterSet
物件。請務必使用 InnoDB Cluster 管理員帳戶或伺服器組態帳戶,以便儲存在ClusterSet
物件中的預設使用者帳戶具有正確的權限。-
使用 MySQL Shell 中 AdminAPI 的
函式檢查整個部署的狀態。例如clusterSet
.status()mysql-js> myclusterset.status({extended: 1})
如需輸出的說明,請參閱 第 8.6 節,「InnoDB ClusterSet 狀態與拓撲」。
當您發出
命令時,InnoDB ClusterSet 部署中必須有一個作用中且可連線的主要叢集,而且這不能是您正在移除的叢集。您正在移除的叢集目前必須具有複本叢集的狀態。它可以是無效的,並且不一定要可連線。clusterSet
.removeCluster() 透過在連線到 InnoDB ClusterSet 部署中的任何成員伺服器時,在 MySQL Shell 中發出
來檢查為每個 MySQL Router 執行個體設定的路由選項,以及 InnoDB ClusterSet 部署的全域原則。確認沒有任何 MySQL Router 執行個體將流量路由到您要移除的叢集。如果有,您必須變更其設定,以使用 第 8.5 節,「整合 MySQL Router 與 InnoDB ClusterSet」 中所述的clusterSet
.routingOptions()
命令將流量路由到另一個叢集。如果 InnoDB ClusterSet 部署已知的任何 MySQL Router 執行個體將流量路由到叢集,則無法移除該叢集。clusterSet
.setRoutingOption()-
發出
命令,命名您要從 InnoDB ClusterSet 移除的叢集。例如clusterSet
.removeCluster()mysql-js> myclusterset.removeCluster('clusterone') The Cluster 'clusterone' will be removed from the InnoDB ClusterSet. * Waiting for the Cluster to synchronize with the PRIMARY Cluster... ** Transactions replicated ############################################################ 100% * Updating topology ** Transactions replicated ############################################################ 100% * Stopping and deleting ClusterSet managed replication channel... The Cluster 'clusterone' was removed from the ClusterSet.
clusterName
參數是必要的,並指定 InnoDB ClusterSet 中用於叢集的識別碼,如
命令的輸出所示。在範例中,clusterSet
.status()
是要移除的叢集。clusterone
如果您想要執行驗證並記錄變更,而實際上不執行它們,請使用
dryRun
選項。使用
timeout
選項來指定等待叢集與 InnoDB ClusterSet 中的主要叢集同步的最大秒數。當叢集的主要執行個體無法連線時,請使用
force
選項從 ClusterSet 移除叢集。
當您發出
命令時,MySQL Shell 會檢查 InnoDB ClusterSet 部署中的主要叢集是否可連線、目標叢集是否不是主要叢集,以及是否沒有 MySQL Router 執行個體將流量路由到目標叢集。如果未滿足任何這些條件,則會傳回錯誤。如果滿足這些條件,MySQL Shell 會執行下列工作,從 InnoDB ClusterSet 中移除目標叢集clusterSet
.removeCluster()捨棄在目標叢集上為 ClusterSet 複寫通道建立的複寫使用者。
將目標叢集的主要伺服器與 InnoDB ClusterSet 的主要叢集同步,並等待所有交易在本機套用。如果在此完成之前逾時到期,則作業會失敗。如果同步無法運作,請嘗試使用
force
選項再次執行。停止 ClusterSet 複寫通道,然後移除通道並將其組態重設為預設值。
從 InnoDB ClusterSet 中繼資料移除目標叢集的中繼資料和成員資訊。
將所有成員伺服器上的
super_read_only
系統變數設定為確保不會對它們執行任何更新。
再次使用
extended
選項發出
命令,以驗證 InnoDB ClusterSet 部署的狀態。clusterSet
.status()-
移除的 InnoDB 叢集無法重新加入 InnoDB ClusterSet 部署,因此如果您想再次使用部署中的伺服器執行個體,您需要使用獨立執行個體設定新的叢集。InnoDB 叢集會在移除過程中隱含地解散,以便所有成員都成為獨立執行個體。
請注意,群組複製 (Group Replication) 設定並不會從伺服器執行個體中移除,因此當您在 InnoDB ClusterSet 部署中重複使用這些執行個體時應謹慎,如第 8.1 節「InnoDB ClusterSet 需求」中所述。由於這些執行個體已設定為 InnoDB ClusterSet 部署,因此發生問題的可能性較低,但您仍應注意組態差異的可能性,尤其是在不同的 InnoDB ClusterSet 部署中重複使用這些執行個體時。
若要從 ClusterSet 中移除叢集,並保持叢集完整作為獨立叢集,請將 dissolve
選項設定為 false
。
以下範例顯示名為 clustertwo 的叢集,從 ClusterSet 中完整移除。
myclusterset.removeCluster('clustertwo', {dissolve: false})
如果 {dissolve: false}
且未啟用 force
,則當一個或多個成員無法連線時,該指令將無法繼續。
如果 {dissolve: false, force: true}
,則即使一個或多個叢集成員無法連線,該指令仍會繼續執行。叢集會從 ClusterSet 中完整移除,但無法連線的成員不會同步。但是,如果叢集的主要節點無法連線,則叢集會解散為其組件執行個體。如果主要節點不可用,則無法保持叢集完整。