使用 MySQL Clone 的 InnoDB 叢集提供下列額外行為。
預設情況下,當在 MySQL Clone 外掛程式可用的執行個體上建立新的叢集時,會自動安裝該外掛程式,並設定叢集以支援複製。InnoDB 叢集復原帳戶會以所需的 BACKUP_ADMIN
權限建立。
將 disableClone
布林選項設定為 true
以停用叢集的 MySQL Clone。在此情況下,會為此設定新增中繼資料項目,如果已安裝 MySQL Clone 外掛程式,則會將其解除安裝。您可以在發出 dba.createCluster()
時設定 disableClone
選項,或在叢集使用
執行的任何時間設定。Cluster
.setOption()
如果新執行個體正在執行 MySQL 8.0.17 或更新版本,而且叢集中至少有一個捐贈者 (包含在 group_replication_group_seeds
清單中) 正在執行 MySQL 8.0.17 或更新版本,則 MySQL Clone 可用於加入 instance
。使用 MySQL Clone 的叢集會遵循 第 7.4.4 節〈將執行個體新增至 InnoDB 叢集〉 中記載的行為,並額外提供一種可能的選擇,即如何傳輸從叢集復原執行個體所需的資料。
的行為取決於下列因素Cluster
.addInstance(instance
)
是否支援 MySQL Clone。
是否可能進行增量復原,這取決於二進位日誌的可用性。例如,如果捐贈者執行個體擁有所有需要的二進位日誌 (
GTID_PURGED
為空),則可以進行增量復原。如果沒有叢集執行個體擁有所有需要的二進位日誌,則無法進行增量復原。-
增量復原是否適當。即使可能進行增量復原,因為它可能會與執行個體上已有的資料衝突,因此會檢查捐贈者和接收者上的 GTID 集,以確定增量復原是否適當。以下是比較的可能結果
新增:接收者具有空的
GTID_EXECUTED
GTID 集相同:接收者具有與捐贈者的 GTID 集相同的 GTID 集
可復原:接收者的 GTID 集遺失交易,但這些交易可以從捐贈者復原
不可復原:捐贈者的 GTID 集遺失交易,可能已清除
已分歧:捐贈者和接收者的 GTID 集已分歧
當比較結果確定為「相同」或「可復原」時,則認為增量復原適當。當比較結果確定為「不可復原」或「已分歧」時,則認為增量復原不適當。
對於被視為「新增」的執行個體,無法認為增量復原適當,因為無法確定是否已清除二進位日誌,甚至是否已重設
GTID_PURGED
和GTID_EXECUTED
變數。或者,伺服器可能在啟用二進位日誌和 GTID 之前就已處理過交易。因此,在互動模式下,您必須確認您想要使用增量復原。 -
gtidSetIsComplete
選項的狀態。如果您確定已使用完整的 GTID 集建立叢集,因此可以在不需要額外確認的情況下將具有空 GTID 集的執行個體新增至其中,請將叢集層級的gtidSetIsComplete
布林選項設定為true
。警告將
gtidSetIsComplete
選項設定為true
表示會復原加入的伺服器,而不管它們包含的任何資料,請謹慎使用。如果您嘗試新增已套用交易的執行個體,您可能會導致資料損毀。
這些因素的組合會影響當您發出
時,執行個體如何加入叢集。Cluster
.addInstance()recoveryMethod
選項預設設定為 auto
,這表示在 MySQL Shell 的互動模式中,叢集會選取從叢集復原執行個體的最佳方式,並提示您如何繼續。換句話說,叢集會根據最佳方法和伺服器支援的方法,建議使用 MySQL Clone 或增量復原。如果您未使用互動模式,而是在編寫 MySQL Shell 的指令碼,則必須將 recoveryMethod
設定為您想要使用的復原類型,即 clone
或 incremental
。本節說明不同的可能案例。
當您在互動模式中使用 MySQL Shell 時,加入執行個體的所有可能選項的主提示為
Please select a recovery method [C]lone/[I]ncremental recovery/[A]bort (default Clone):
根據提及的因素,您可能不會獲得所有這些選項。本節稍後描述的案例會說明提供給您的選項。此提示提供的選項為
複製:選擇此選項可將捐贈者複製到您要新增至叢集的執行個體,刪除執行個體包含的任何交易。會自動安裝 MySQL Clone 外掛程式。InnoDB 叢集復原帳戶會以所需的
BACKUP_ADMIN
權限建立。假設您新增的執行個體為空 (未處理任何交易) 或包含您不想保留的交易,請選取 [複製] 選項。然後,叢集會使用 MySQL Clone 以來自捐贈者叢集成員的快照完全覆寫加入的執行個體。若要預設使用此方法並停用此提示,請將叢集的recoveryMethod
選項設定為clone
。增量復原 選擇此選項以使用增量復原,將叢集處理的所有交易,使用非同步複製復原到加入的執行個體。如果您確定叢集處理的所有更新都已啟用 GTID,且沒有清除的交易,並且新的執行個體包含與叢集相同的 GTID 集或其子集,則增量復原是合適的。若要預設使用此方法,請將
recoveryMethod
選項設定為incremental
。
上述因素的組合會影響提示中可用的選項,如下所示:
如果 group_replication_clone_threshold
系統變數在 AdminAPI 外部被手動變更,則叢集可能會決定使用 Clone 復原,而不是遵循這些情境。
-
在以下情境中:
增量復原是可行的
增量復原不合適
支援 Clone
您可以選擇任何選項。建議您使用預設的 MySQL Clone。
-
在以下情境中:
增量復原是可行的
增量復原是合適的
您不會收到提示,且會使用增量復原。
-
在以下情境中:
增量復原是可行的
增量復原不合適
不支援或已停用 Clone
您無法使用 MySQL Clone 將執行個體加入叢集。您會收到提示,建議的選項是繼續使用增量復原。
-
在以下情境中:
增量復原是不可行的
不支援或已停用 Clone
您無法將執行個體加入叢集,並且會顯示 錯誤:目標執行個體必須先被複製或完全佈建,才能加入目標叢集。Cluster.addInstance:需要佈建執行個體 (RuntimeError)。這可能是因為二進制日誌已從所有叢集執行個體中清除。建議使用 MySQL Clone,方法是升級叢集或將
disableClone
選項設定為false
。 -
在以下情境中:
增量復原是不可行的
支援 Clone
您只能使用 MySQL Clone 將執行個體加入叢集。這可能是因為叢集遺失二進制日誌所導致,例如當它們已被清除時。
一旦您從提示中選擇一個選項,預設情況下會顯示執行個體從叢集復原交易的進度。此監控功能可讓您檢查復原階段是否正常運作,以及執行個體加入叢集並上線需要多長時間。若要取消監控復原階段,請發出 CONTROL+C。