如果您無法修復叢集,可以使用 命令從 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 部署中重複使用執行個體時。