如果您無法修復叢集,可以使用
命令從 InnoDB ClusterSet 中移除它。如果完全無法連線到叢集,則可以使用 clusterSet
.removeCluster()force
選項。
InnoDB ClusterSet 中的主要叢集無法使用此命令移除。如果您確實需要移除主要叢集,您必須先執行受控切換(請參閱第 8.7 節,「InnoDB ClusterSet 受控切換」)或緊急容錯移轉(請參閱第 8.8 節,「InnoDB ClusterSet 緊急容錯移轉」),將主要叢集降級為複本叢集,並將其中一個複本叢集升級為主要叢集。之後,即可使用此程序移除先前的主要叢集。
移除的 InnoDB 叢集無法重新加入 InnoDB ClusterSet 部署。如果您想再次使用部署中的伺服器執行個體,您將需要使用它們設定新的叢集。
若要從 InnoDB ClusterSet 移除叢集,請依照下列步驟操作
-
使用 MySQL Shell,使用 InnoDB 叢集管理員帳戶(使用
建立)連線至主要叢集或其中一個複本叢集中的任何成員伺服器。您也可以使用 InnoDB 叢集伺服器組態帳戶,該帳戶也具有所需的權限。連線建立後,使用cluster
.setupAdminAccount()dba.getClusterSet()
或
命令取得cluster
.getClusterSet()ClusterSet
物件。務必使用 InnoDB 叢集管理員帳戶或伺服器組態帳戶,以便儲存在ClusterSet
物件中的預設使用者帳戶具有正確的權限。例如mysql-js> \connect admin2@127.0.0.1:4410 Creating a session to 'admin2@127.0.0.1:4410' Please provide the password for 'admin2@127.0.0.1:4410': ******** Save password for 'admin2@127.0.0.1:4410'? [Y]es/[N]o/Ne[v]er (default No): Fetching schema names for autocompletion... Press ^C to stop. Closing old connection... Your MySQL connection id is 33 Server version: 8.0.27-commercial MySQL Enterprise Server - Commercial No default schema selected; type \use <schema> to set one. <ClassicSession:admin2@127.0.0.1:4410> mysql-js> myclusterset = dba.getClusterSet() <ClusterSet:testclusterset>
-
使用 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 執行個體將流量路由至您要移除的叢集。如果有的話,您必須使用clusterSet
.routingOptions()
命令將其設定變更為將流量路由至另一個叢集,如第 8.5 節,「將 MySQL Router 與 InnoDB ClusterSet 整合」中所述。如果 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 叢集會在移除程序期間隱含解散,以便所有成員都變成獨立執行個體。
請注意,群組複寫組態不會從伺服器執行個體中移除,因此在 InnoDB ClusterSet 部署中重新使用這些執行個體時,應謹慎行事,如第 8.1 節,「InnoDB ClusterSet 需求」中所述。由於執行個體是針對 InnoDB ClusterSet 部署設定的,因此發生問題的可能性較低,但您應該注意組態差異的可能性,尤其是在不同的 InnoDB ClusterSet 部署中重複使用執行個體時。