文件首頁
MySQL Shell 8.4
下載本手冊
PDF (美式信紙) - 2.2Mb
PDF (A4) - 2.3Mb


MySQL Shell 8.4  /  ...  /  修改或移除讀取複本

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 集不得與叢集的不同。如果 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")