下載本手冊
PDF (美式信紙) - 2.3Mb
PDF (A4) - 2.3Mb


MySQL Shell 9.0  /  ...  /  修改或移除讀取副本

7.11.3 修改或移除讀取副本

本節說明如何修改或從叢集中移除讀取副本。

移除讀取副本

若要從叢集中移除讀取副本,請使用 Cluster.removeInstance()。此操作會執行下列工作

  • 從叢集中捨棄複寫使用者。

  • 從叢集的中繼資料中移除讀取副本。

  • 停止複寫通道,並將讀取副本的組態重設為預設值。

注意

如果在也是讀取副本來源的叢集成員上執行 Cluster.removeInstance(),則會觸發容錯移轉程序,且讀取副本會嘗試連線至另一個來源。如果沒有其他可用的來源,則會停止複寫通道。移除的叢集成員也會從讀取副本的來源清單中移除。

以下範例會從叢集中移除讀取副本 host4:4110

Cluster.removeInstance("host4:4110")
Removing Read-Replica 'ipaddress:4110' from the Cluster 'myCluster'.

* Waiting for the Read-Replica to synchronize with the Cluster...
** Transactions replicated  ############################################################  100%

* Stopping and deleting the Read-Replica managed replication channel...

Read-Replica 'ipaddress:4110' successfully removed from the Cluster 'myCluster'.

移除讀取副本時,交易會與來源同步。您可以定義交易複寫程序的逾時 (以秒為單位)。例如

Cluster.removeInstance("host4:4110", {timeout:30})

這會在同步程序中定義 30 秒的逾時。如果同步程序未在 30 秒內完成,則會回復 removeInstance 操作,且不會從叢集中移除讀取副本。

預設逾時值為 0 (零) 或無逾時。

您可以使用 dryRun 選項測試此操作。包含此選項並設定為 true 會執行命令,但不進行任何變更。這可讓您測試變更。

將讀取副本重新加入叢集

若要將讀取副本重新加入叢集,請使用 Cluster.rejoinInstance()

Cluster.rejoinInstance(instance [, options])

若要將讀取副本重新加入叢集,執行個體必須符合下列需求

  • 目標執行個體必須是叢集的成員。

  • 目標執行個體必須符合讀取副本的必要條件。請參閱第 7.11.1 節「必要條件」

  • 目標執行個體的 GTID 集必須與叢集的 GTID 集相同。如果 recoveryMethod: clone,則不適用。

注意

如果讀取副本的所有已設定來源都無法連線,或不再是叢集的一部分,則 rejoinInstance() 操作將會失敗。在這種情況下,您必須使用 Cluster.setInstanceOption() 更新讀取副本的複寫來源。

此程序與將叢集成員重新加入叢集相同,但下列例外情況除外

  • recoveryMethodclone 和選項 cloneDonor 僅適用於讀取副本。

  • timeout 選項僅適用於讀取副本。

以下範例顯示嘗試使用預設復原方法將讀取副本 host4:4110 重新加入叢集

Cluster.rejoinInstance('host4:4110')

重新加入讀取副本時,交易會與主要節點同步。您可以定義交易複寫程序的逾時 (以秒為單位)。以下範例會將交易同步程序的逾時設定為 60 秒

Cluster.rejoinInstance('host4:4110', {timeout: 60})

這會在同步程序中定義 60 秒的逾時。如果同步程序未在 60 秒內完成,則會回復 rejoinInstance 操作,且不會將讀取副本重新加入叢集。

預設逾時值為 0 (零) 或無逾時。

您可以使用 dryRun 選項測試此操作。包含此選項並設定為 true 會執行命令,但不進行任何變更。這可讓您測試變更。

注意

無法使用 rejoinInstance 重新加入使用 removeInstance 從叢集中移除的讀取副本。removeInstance 會從叢集中移除讀取副本,並移除讀取副本的中繼資料。

若要重新加入此類執行個體,您必須使用 addReplicaInstance

路由讀取副本

叢集的預設路由原則是將所有唯讀流量導向至次要成員。Cluster.setRoutingOption() 可讓您使用 read_only_targets 選項,將路由原則設定為下列其中一個值

  • all:所有讀取副本和次要叢集成員都用於唯讀流量。

  • read_replicas:只有讀取副本用於唯讀流量。

  • secondaries:只有次要叢集成員用於唯讀流量。

以下範例會將名為 machine1::router1 的路由器唯讀路由原則設定為僅限讀取副本

Cluster.setRoutingOption("machine1::router1", "read_only_targets", "read_replicas")

若要檢視名為 machine1::router1 的路由器的目前路由原則,請執行以下操作

Cluster.routingOptions("machine1::router1")