MySQL Shell 9.0  /  ...  /  修復 InnoDB ClusterSet 中的成員伺服器和叢集

8.9.3 修復 InnoDB ClusterSet 中的成員伺服器和叢集

根據叢集的問題或維護需求,您可以使用下列操作來處理其成員伺服器。除非另有說明,請使用您使用 InnoDB 叢集管理員帳戶或伺服器組態帳戶擷取的 ClusterClusterSet 物件,以便儲存在 ClusterSet 物件中的預設使用者帳戶具有正確的權限。

  • 使用 cluster.addInstance() 命令,將更多伺服器執行個體新增至叢集,如第 8.4 節「部署 InnoDB ClusterSet」中的程序所述。如需命令的詳細資訊,請參閱第 7.4.4 節「將執行個體新增至 InnoDB 叢集」

    請注意,對於此操作,您需要使用 InnoDB 叢集伺服器組態帳戶以及使用該帳戶擷取的 Cluster 物件。如第 8.3 節「InnoDB ClusterSet 的使用者帳戶」中所述,該帳戶也必須存在於伺服器執行個體上。

    當您使用此命令將成員伺服器新增至屬於 InnoDB ClusterSet 部署一部分的 InnoDB 叢集時,伺服器執行個體會新增至叢集,並佈建 InnoDB ClusterSet 的資料。ClusterSet 複製通道會在執行個體上設定,並套用在 InnoDB ClusterSet 部署中運作所需的組態。

  • 使用 cluster.rejoinInstance() 命令,重新加入先前屬於叢集一部分但無法自動重新加入叢集的伺服器執行個體。如需此操作的詳細資訊,請參閱第 7.8.1 節「將執行個體重新加入叢集」

    當您使用此命令將成員伺服器重新加入屬於 InnoDB ClusterSet 部署一部分的 InnoDB 叢集時,伺服器執行個體會重新加入叢集,並佈建 InnoDB ClusterSet 的資料。ClusterSet 複製通道會在執行個體上設定,並套用在 InnoDB ClusterSet 部署中運作所需的組態。

  • 使用 cluster.removeInstance() 命令,從叢集中移除伺服器執行個體。指定要移除的伺服器執行個體的主機名稱和連接埠號碼。如需此操作的詳細資訊,請參閱從 InnoDB 叢集移除執行個體force 選項可用,但僅應在萬不得已時使用。

    當您在 InnoDB ClusterSet 部署中使用此命令搭配成員伺服器時,MySQL Shell 會重設所有為 InnoDB ClusterSet 套用的組態,並重設 ClusterSet 複製通道設定。

  • 使用 cluster.setPrimaryInstance(instance) 命令,將叢集的主要伺服器變更為另一個成員伺服器。變更主要伺服器可讓您在目前的主要伺服器上執行維護和升級,或在群組複寫的自身選舉程序未自動選出您想要的主要伺服器時,選取主要伺服器。

    指定要作為主要伺服器的伺服器執行個體的主機名稱和連接埠號碼。您可以使用 runningTransactionsTimeout 選項來指定介於 0 到 3600 秒之間的逾時,以用於在使用此函數時正在執行的交易,這也會停止新的傳入交易。逾時沒有預設設定,因此如果您未設定,則操作的等待時間沒有上限,而且新的交易可以在該期間開始。

    當您在 InnoDB ClusterSet 部署中使用此命令搭配成員伺服器時,MySQL Shell 會事先停止伺服器上的 ClusterSet 複製通道,然後在之後重新啟動。此外,如果叢集是複本叢集,MySQL Shell 會將主要伺服器保留為唯讀,而不是像 InnoDB 叢集的主要伺服器一樣使其成為讀寫。

  • 使用 cluster.forceQuorumUsingPartitionOf(instance) 命令,使用剩餘的執行個體強制仲裁,以還原已失去仲裁的叢集。指定具有正確中繼資料的線上伺服器執行個體的主機名稱和連接埠號碼。此操作會使叢集包含此執行個體和其他可連線的執行個體,並排除已分割的執行個體。此操作可能會建立分割大腦情況,因此應將其視為萬不得已的手段。如需此操作的詳細資訊,請參閱第 7.8.2 節「從仲裁遺失還原叢集」

    當您在 InnoDB ClusterSet 部署中使用此命令搭配成員伺服器時,MySQL Shell 會檢查目標叢集是否仍然是 ClusterSet 的有效部分,如果已失效,則會警告您。它也會在之後自動重新啟動 ClusterSet 複製通道。如果叢集是複本叢集,MySQL Shell 會將主要伺服器保留為唯讀,而不是像 InnoDB 叢集的主要伺服器一樣使其成為讀寫。

  • 使用 dba.rebootClusterFromCompleteOutage() 命令,重新啟動完全離線的叢集。如需此操作的詳細資訊,請參閱第 7.8.3 節「從重大中斷重新啟動叢集」

    當您在 InnoDB ClusterSet 部署中使用此命令搭配成員伺服器時,MySQL Shell 會檢查目標叢集是否仍然是 ClusterSet 的有效部分,如果已失效,則會警告您。

    如果叢集未失效,MySQL Shell 會在重新啟動後立即將其重新加入 InnoDB ClusterSet 部署。如果叢集已失效,您必須使用 clusterSet.rejoinCluster() 操作,將其重新加入 InnoDB ClusterSet 部署。如需執行此操作的指示,請參閱第 8.9.5 節「將叢集重新加入 InnoDB ClusterSet」

    MySQL Shell 也會在執行此操作後自動重新啟動 ClusterSet 複製通道。如果叢集是複本叢集,MySQL Shell 會將主要伺服器保留為唯讀,而不是像 InnoDB 叢集的主要伺服器一樣使其成為讀寫。

除非叢集是 ClusterSet 中唯一的叢集或叢集已失效,否則您無法解散目前屬於 InnoDB ClusterSet 部署一部分的 InnoDB 叢集。在所有其他組態中,您必須從 InnoDB ClusterSet 中移除它,如第 8.9.4 節「從 InnoDB ClusterSet 中移除叢集」中所述。

如果叢集是 ClusterSet 中唯一的叢集或叢集已失效,您可以在叢集上使用 dba.dropMetadataSchema()cluster.dissolve()