以 Amazon Aurora MySQL 進行複寫 - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

以 Amazon Aurora MySQL 進行複寫

Aurora MySQL 複寫功能是叢集高可用性和效能的關鍵。Aurora 可讓您輕鬆建立最多可有 15 Aurora 個複本的叢集,或調整其大小。

所有複本都從相同的基礎資料運作。如果部分資料庫執行個體離線,則其他資料庫執行個體仍可繼續用來處理查詢,或在需要時以寫入器的方式接管。Aurora 會自動將您的唯讀連線分散至多個資料庫執行個體,協助 Aurora 叢集以支援查詢密集的工作負載。

在以下主題中,您可以找到 Aurora MySQL 複寫如何運作,以及如何微調複寫設定以取得最佳可用性和效能的相關資訊。

使用 Aurora 複本

Aurora 複本是 Aurora 資料庫叢集中的獨立端點,最適合用於擴展讀取操作和提高可用性。最多 15 個 Aurora 複本可以分佈在 AWS 區域 內資料庫叢集跨越的可用區域。雖然資料庫叢集磁碟區由資料庫叢集的多個資料副本組成,但叢集磁碟區中的資料是以單一邏輯磁碟區的形式呈現給主要執行個體,以及資料庫叢集內的 Aurora 複本。如需 Aurora 複本的詳細資訊,請參閱 Aurora 複本

Aurora 複本很適用於讀取擴展,因為完全專用於叢集磁碟區上的讀取操作。寫入操作由主要執行個體管理。因為叢集磁碟區是在 Aurora MySQL 資料庫叢集的所有資料庫執行個體之間共用,所以不需要額外工作,即可複寫每一個 Aurora 複本的資料副本。相反地,MySQL 僅供讀取複本必須在單一執行緒上,從來源資料庫執行個體將所有寫入操作重播至其本機資料存放區。此限制可能導致 MySQL 僅供讀取複本難以支援大量讀取流量。

有了 Aurora MySQL,在刪除 Aurora 複本時,隨即會移除其執行個體端點,並且會從讀取器端點移除 Aurora 複本。如果在要刪除的 Aurora 複本上有陳述式正在執行,則會有三分鐘的寬限期。現有陳述式在寬限期期間可以從容地完成。在寬限期結束時,Aurora 複本會關閉並刪除。

重要

Aurora MySQL 的 Aurora 複本一律會對 InnoDB 資料表上的操作使用 REPEATABLE READ 預設交易隔離層級。您僅可以對 Aurora MySQL 資料庫叢集的主要執行個體使用 SET TRANSACTION ISOLATION LEVEL 命令來變更交易層級。此限制可避免 Aurora 複本上的使用者層級鎖定,並允許 Aurora 複本擴展來支援上千個作用中使用者的連線,同時將複本延遲保持在最小值。

注意

主要執行個體上執行的 DDL 陳述式可能會中斷相關聯 Aurora 複本上的資料庫連線。如果 Aurora 複本連線正在主動使用資料庫物件,例如資料表,並且在主要執行個體上使用 DDL 陳述式來修改該物件,則會中斷 Aurora 複本連線。

注意

中國 (寧夏) 區域不支援跨區域的僅供讀取複本。

Amazon Aurora MySQL 的複寫選項

您可以設定下列任何選項之間的複寫:

注意

重新啟動 Amazon Aurora 資料庫叢集的主要執行個體時,也會自動重新啟動該資料庫叢集的 Aurora 複本,以重新建立進入點來保證整個資料庫叢集的讀取/寫入一致性。

Amazon Aurora MySQL 複寫的效能考量

下列功能可協助您微調 Aurora MySQL 複寫的效能。

複本日誌壓縮功能會自動減少複寫訊息的網路頻寬。因為每則訊息都會傳輸至所有 Aurora 複本,所以叢集越大,得到的好處就越大。此功能涉及寫入器節點上執行壓縮的一些 CPU 額外負荷。它在 Aurora MySQL 第 2 版和第 3 版中一律為啟用狀態。

binlog 篩選功能會自動減少複寫訊息的網路頻寬。因為 Aurora 複本不會使用複寫訊息中包含的 binlog 資訊,所以傳送至那些節點的訊息中會省略該資料。

在 Aurora MySQL 第 2 版中,您可以變更 aurora_enable_repl_bin_log_filtering 參數以控制此功能。此參數預設為開啟。因為此最佳化旨在透明化,所以您可能只在對複寫相關問題進行診斷或故障診斷期間才會關閉此設定。例如,比對無法使用此功能之舊版 Aurora MySQL 叢集的行為。

Binlog 篩選功能在 Aurora MySQL 第 3 版中一律為啟用狀態。

適用於 Amazon Aurora MySQL 的零停機時間重新啟動 (ZDR)

零停機重新啟動 (ZDR) 功能可以在特定類型的重新啟動期間,保留部分或所有資料庫執行個體的作用中連線。ZDR 適用於 Aurora 自動執行以解決錯誤狀況 (例如,當複本開始遠遠落後來源時) 的重新啟動。

重要

ZDR 機制會盡力運作。Aurora MySQL 版本、執行個體類別、錯誤條件、相容的 SQL 操作以及決定 ZDR 適用位置的其他因素都可能隨時變更。

適用於 Aurora MySQL 2.x 的 ZDR 需要 2.10 及更高版本。ZDR 是在 Aurora MySQL 3.x 的所有次要版本中可用。在 Aurora MySQL 第 2 版及第 3 版中,ZDR 機制預設為開啟,且 Aurora 不會使用 aurora_enable_zdr 參數。

Aurora 在 Events (事件) 頁面上報告與零停機重新啟動相關的活動。Aurora 會在嘗試使用 ZDR 機制重新啟動時記錄事件。此事件指出為什麼 Aurora 會執行重新啟動。然後 Aurora 會在重新啟動完成時記錄另一個事件。這個最後事件會報告程序所花的時間,以及重新啟動期間保留或中斷的連線數量。您可以查閱資料庫錯誤日誌,瞭解重新啟動期間所發生情況的相關詳細資訊。

雖然在 ZDR 操作成功後,連線會保持不變,但某些變數和功能會重新初始化。下列類型的資訊在零停機重新啟動所造成的重新啟動時不會保留:

  • 全域變數。Aurora 會恢復工作階段變數,但它不會在重新啟動後恢復全域變數。

  • 狀態變數。尤其會重設引擎狀態報告的正常執行時間值。

  • LAST_INSERT_ID.

  • 資料表的記憶體內 auto_increment 狀態。記憶體內的自動增量狀態會重新初始化。如需自動增量值的詳細資訊,請參閱 MySQL 參考手冊

  • 來自 INFORMATION_SCHEMAPERFORMANCE_SCHEMA 資料表的診斷資訊。這項診斷資訊也會出現在 SHOW PROFILESHOW PROFILES 等命令的輸出中。

下表顯示決定 Aurora 在叢集中重新啟動資料庫執行個體時是否可以使用 ZDR 機制的版本、執行個體角色和其他情況。

Aurora MySQL version ZDR 適用於作家? ZDR 適用於讀者? ZDR 一律啟用嗎? 備註

2. 倍,低於 2.10.0

N/A

ZDR 不適用於這些版本。

2.10.0—2.11.0

Aurora 會回復作用中連線上正在進行的任何交易。您的應用程式必須重試交易。

Aurora 會取消任何使用 TLS/SSL、暫存資料表、資料表鎖定或使用者鎖定的連線。

2.11.1 及更高版本

Aurora 會回復作用中連線上正在進行的任何交易。您的應用程式必須重試交易。

Aurora 會取消任何使用暫存資料表、資料表鎖定或使用者鎖定的連線。

3.01—3.03

Aurora 會回復作用中連線上正在進行的任何交易。您的應用程式必須重試交易。

Aurora 會取消任何使用 TLS/SSL、暫存資料表、資料表鎖定或使用者鎖定的連線。

3.04 及更高版本

Aurora 會回復作用中連線上正在進行的任何交易。您的應用程式必須重試交易。

Aurora 會取消任何使用暫存資料表、資料表鎖定或使用者鎖定的連線。

使用 Aurora MySQL 設定複寫篩選條件

您可以使用複寫篩選條件來指定要與僅供讀取複本一起複寫的資料庫和資料表。複寫篩選條件可以包含複寫中的資料庫和資料表,或將其排除在複寫之外。

下列是複寫篩選條件的一些應用案例:

  • 要縮小僅供讀取複本的大小。使用複寫篩選,您可以排除僅供讀取複本不需要的資料庫和資料表。

  • 基於安全考量,要將資料庫和資料表從僅供讀取複本中排除。

  • 為不同僅供讀取複本的特定應用案例複寫不同的資料庫和資料表。例如,您可以使用特定僅供讀取複本進行分析或分區。

  • 對於在不同 AWS 區域 中具有僅供讀取複本的資料庫叢集,可在不同 AWS 區域 中複寫不同的資料庫或資料表。

  • 指定要與 Aurora MySQL 資料庫叢集 (設定為輸入複寫拓撲中的複寫) 一起複寫的資料庫和資料表。如需此組態的詳細資訊,請參閱「Aurora 與 MySQL 之間或 Aurora 與另一個 Aurora 資料庫叢集之間的複寫 (二進位複寫)」。

設定適用於 Aurora MySQL 的複寫篩選參數

若要設定複製篩選器,請設定下列參數:

  • binlog-do-db - 將變更複寫到指定的二進位日誌。當您為 binlog 來源叢集設定此參數時,只會複寫參數中指定的二進位記錄檔。

  • binlog-ignore-db - 請不要將變更複寫到指定的二進位日誌。為 binlog 來源叢集設定binlog-do-db參數時,不會評估此參數。

  • replicate-do-db – 將變更複寫至指定的資料庫。當您為 binlog 複本叢集設定此參數時,只會複寫參數中指定的資料庫。

  • replicate-ignore-db – 請勿將變更複寫至指定的資料庫。為 binlog 複本叢集設定replicate-do-db參數時,不會評估此參數。

  • replicate-do-table – 將變更複製到指定的資料表。當您為僅供讀取複本設定此參數時,只會複寫參數中指定的資料表。此外,設定replicate-do-dbreplicate-ignore-db參數時,請務必在 binlog 複本叢集的複寫中包含包含指定表格的資料庫。

  • replicate-ignore-table – 請勿將變更複寫至指定的資料表。為 binlog 複本叢集設定replicate-do-table參數時,不會評估此參數。

  • replicate-wild-do-table – 根據指定的資料庫和資料表名稱模式複寫資料表。支援 %_ 萬用字元。設定replicate-do-dbreplicate-ignore-db參數時,請務必在 binlog 複本叢集的複寫中包含包含指定表格的資料庫。

  • replicate-wild-ignore-table – 請勿根據指定的資料庫和資料表名稱模式複寫資料表。支援 %_ 萬用字元。為 binlog 複本叢集設定replicate-do-tablereplicate-wild-do-table參數時,不會評估此參數。

系統會按照列出的順序對參數進行評估。如需有關這些參數如何運作的詳細資訊,請參閱 MySQL 文件:

根據預設,這些參數中的每個參數都有一個空值。在每個 binlog 叢集上,您可以使用這些參數來設定、變更和刪除複寫篩選器。當您設定其中一個參數時,請使用逗號將每個篩選條件與其他篩選條件分隔。

您可以在 %_ 參數中使用 replicate-wild-do-tablereplicate-wild-ignore-table 萬用字元。% 萬用字元等同於任意數目的字元,而 _ 萬用字元只會等同於一個字元。

來源資料庫執行個體的二進位記錄格式對複寫非常重要,因為它會決定資料變更的記錄。binlog_format 參數的設定會決定複寫是以資料列為基礎還是以陳述式為基礎。如需詳細資訊,請參閱 設定適用於 MySQL 二進位記錄的 Aurora

注意

無論來源資料庫執行個體上的 binlog_format 設定為何,所有資料定義語言 (DDL) 陳述式都會複寫為陳述式。

Aurora MySQL 的複寫篩選限制

下列限制適用於 Aurora MySQL 的複寫篩選:

  • 僅 Aurora MySQL 第 3 版支援複寫篩選。

  • 每個複寫篩選參數都有 2,000 個字元的限制。

  • 複寫篩選條件不支援逗號。

  • 複寫篩選不支援 XA 交易。

    如需詳細資訊,請參閱 MySQL 文件中的 XA 交易的限制

Aurora MySQL 的複寫篩選範例

若要設定僅供讀取複本的複寫篩選,請修改與僅供讀取複本關聯之資料庫叢集參數群組中的複寫篩選參數。

注意

您無法修改預設資料庫叢集參數群組。如果僅供讀取複本使用預設參數群組,請建立新的參數群組,並將它與僅供讀取複本建立關聯。如需資料庫叢集參數群組的詳細資訊,請參閱 使用參數群組

您可以使用 AWS Management Console、AWS CLI 或 RDS API 在資料庫叢集參數群組中設定參數。如需有關設定參數的詳細資訊,請參閱 修改資料庫參數群組中的參數。當您在資料庫叢集參數群組中設定參數時,與參數群組關聯的所有資料庫叢集都會使用參數設定。如果您在資料庫叢集參數群組中設定複寫篩選參數,請確定參數群組僅與僅供讀取複本叢集相關聯。將來源資料庫執行個體的複寫篩選參數保留空白。

下列範例會使用 AWS CLI 設定參數。這些範例將 ApplyMethod 設定為 immediate,以便在 CLI 命令完成後立即發生參數變更。如果您想要在僅供讀取複本重新啟動後套用擱置變更,請將設定 ApplyMethodpending-reboot

下列範例會設定複寫篩選條件:

範例 在複寫中包含資料庫

下列範例包含複寫中的 mydb1mydb2 資料庫。

對於LinuxmacOS、或Unix:

aws rds modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-do-db,ParameterValue='mydb1,mydb2',ApplyMethod=immediate"

在Windows中:

aws rds modify-db-cluster-parameter-group ^ --db-cluster-parameter-group-name myparametergroup ^ --parameters "ParameterName=replicate-do-db,ParameterValue='mydb1,mydb2',ApplyMethod=immediate"
範例 在複寫中包含資料表

下列範例包含複寫資料庫 table1 中的 table2mydb1 資料表。

對於LinuxmacOS、或Unix:

aws rds modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-do-table,ParameterValue='mydb1.table1,mydb1.table2',ApplyMethod=immediate"

在Windows中:

aws rds modify-db-cluster-parameter-group ^ --db-cluster-parameter-group-name myparametergroup ^ --parameters "ParameterName=replicate-do-table,ParameterValue='mydb1.table1,mydb1.table2',ApplyMethod=immediate"
範例 使用萬用字元在複寫中包含資料表

下列範例包含複寫時在資料庫 order 中名稱開頭為 returnmydb 的資料表。

對於LinuxmacOS、或Unix:

aws rds modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-wild-do-table,ParameterValue='mydb.order%,mydb.return%',ApplyMethod=immediate"

在Windows中:

aws rds modify-db-cluster-parameter-group ^ --db-cluster-parameter-group-name myparametergroup ^ --parameters "ParameterName=replicate-wild-do-table,ParameterValue='mydb.order%,mydb.return%',ApplyMethod=immediate"
範例 從複寫中排除資料庫

下列範例會從複寫中排除 mydb5mydb6 資料庫。

對於LinuxmacOS、或Unix:

aws rds modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-ignore-db,ParameterValue='mydb5,mydb6',ApplyMethod=immediate"

在Windows中:

aws rds modify-db-cluster-parameter-group ^ --db-cluster-parameter-group-name myparametergroup ^ --parameters "ParameterName=replicate-ignore-db,ParameterValue='mydb5,mydb6,ApplyMethod=immediate"
範例 從複寫中排除資料表

下列範例會從複寫中排除資料庫 mydb5 中的資料表 table1 和資料庫 mydb6 中的 table2

對於LinuxmacOS、或Unix:

aws rds modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-ignore-table,ParameterValue='mydb5.table1,mydb6.table2',ApplyMethod=immediate"

在Windows中:

aws rds modify-db-cluster-parameter-group ^ --db-cluster-parameter-group-name myparametergroup ^ --parameters "ParameterName=replicate-ignore-table,ParameterValue='mydb5.table1,mydb6.table2',ApplyMethod=immediate"
範例 使用萬用字元從複寫中排除資料表

下列範例會從複寫中排除資料庫 order 中名稱開頭為 returnmydb7 的資料表。

對於LinuxmacOS、或Unix:

aws rds modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-wild-ignore-table,ParameterValue='mydb7.order%,mydb7.return%',ApplyMethod=immediate"

在Windows中:

aws rds modify-db-cluster-parameter-group ^ --db-cluster-parameter-group-name myparametergroup ^ --parameters "ParameterName=replicate-wild-ignore-table,ParameterValue='mydb7.order%,mydb7.return%',ApplyMethod=immediate"

檢視僅供讀取複本的複寫篩選條件

您可以使用下列方式檢視僅供讀取複本的複寫篩選條件:

  • 檢查與僅供讀取複本關聯之參數群組中複寫篩選參數的設定。

    如需說明,請參閱「檢視資料庫參數群組的參數值」。

  • 在 MySQL 用戶端中,連線至僅供讀取複本並執行 SHOW REPLICA STATUS 陳述式。

    在輸出中,下列欄位會顯示僅供讀取複本的複寫篩選條件:

    • Binlog_Do_DB

    • Binlog_Ignore_DB

    • Replicate_Do_DB

    • Replicate_Ignore_DB

    • Replicate_Do_Table

    • Replicate_Ignore_Table

    • Replicate_Wild_Do_Table

    • Replicate_Wild_Ignore_Table

    如需有關這些欄位的詳細資訊,請參閱 MySQL 文件中的檢查複寫狀態

監控 Amazon Aurora MySQL 複寫

讀取擴展和高可用性取決於最短延遲時間。您可以監控 Amazon CloudWatch AuroraReplicaLag 指標,監視 Aurora 複本落後於 Aurora MySQL 資料庫叢集主要執行個體的距離。AuroraReplicaLag 指標會記錄在每個 Aurora 複本中。

主資料庫執行個體也會記錄AuroraReplicaLagMaximumAuroraReplicaLagMinimum Amazon CloudWatch 指標。AuroraReplicaLagMaximum 指標會記錄主要執行個體與資料庫叢集中各個 Aurora 資料庫執行個體之間的最大延遲量。AuroraReplicaLagMinimum 指標會記錄主要執行個體與資料庫叢集中各個 Aurora 資料庫執行個體之間的最小延遲量。

如果您需要 Aurora 複本延遲的最新值,則可以在 Amazon 中查看AuroraReplicaLag指標 CloudWatch。Aurora 複本延遲也會記錄在 information_schema.replica_host_status 資料表中 Aurora MySQL 資料庫叢集中的每個 Aurora 複本上。如需此資料表的詳細資訊,請參閱 information_schema.replica_host_status

如需監控 RDS 執行個體和 CloudWatch 指標的詳細資訊,請參閱在 Amazon Aurora 叢集中監控指標