Aurora 與 MySQL 之間或 Aurora 與另一個 Aurora 資料庫叢集之間的複寫 (二進位複寫) - Amazon Aurora

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

Aurora 與 MySQL 之間或 Aurora 與另一個 Aurora 資料庫叢集之間的複寫 (二進位複寫)

因為 Amazon Aurora MySQL 與 MySQL 相容,您可以設定 MySQL 資料庫與 Amazon Aurora MySQL 資料庫叢集之間的複寫。這種類型的複寫使用 MySQL 二進位記錄複寫,也稱為 binlog 複寫。如果您使用二進位複寫搭配 Aurora,我們建議您的 MySQL 資料庫執行 5.5 版或更新版本。您可以設定複寫,其中您的 Aurora MySQL 資料庫叢集是複寫來源或複本。您可以使用 Amazon RDS MySQL 資料庫執行個體、Amazon RDS 外部 MySQL 資料庫或其他 Aurora MySQL 資料庫叢集進行複寫。

注意

您無法對特定類型的 Aurora 資料庫叢集使用 Binlog 複寫。特別是 Binlog 複寫不適用於 Aurora Serverless v1 叢集。如果 SHOW MASTER STATUSSHOW SLAVE STATUS (Aurora MySQL 第 2 版) 或 SHOW REPLICA STATUS (Aurora MySQL 第 3 版) 陳述式未傳回任何輸出,請檢查您使用的叢集是否支援 binlog 複寫。

在 Aurora MySQL 第 3 版中,二進位日誌複寫並不會複寫至 mysql 系統資料庫。在 Aurora MySQL 第 3 版中,Binlog 複寫不會複寫密碼和帳戶。因此,資料控制語言 (DCL) 陳述式 (例如 CREATE USERGRANTREVOKE) 不會受到複寫。

您也可以在另一個 AWS 區域中使用 RDS for MySQL 資料庫執行個體或 Aurora MySQL 資料庫叢集來進行複寫。當您執行跨複寫時 AWS 區域,請確定您的資料庫叢集和資料庫執行個體可公開存取。如果 Aurora MySQL 資料庫叢集位於 VPC 的私有子網路中,請在 AWS 區域之間使用 VPC 對等互連。如需詳細資訊,請參閱 由不同 VPC 中的 EC2 叢集存取 VPC 中的資料庫執行個體

如果您想要在 Aurora MySQL 資料庫叢集與另一個叢集中的 Aurora MySQL 資料庫叢集之間設定複寫 AWS 區域,您可以在不同 AWS 區域 於來源資料庫叢集中建立一個 Aurora MySQL 資料庫叢集做為僅供讀取複本。如需詳細資訊,請參閱 跨 AWS 區域 複寫 Amazon Aurora MySQL 資料庫叢集

在 Aurora MySQL 第 2 版本和第 3 版,您可以在 Aurora MySQL 與外部資源之間進行複寫,或是使用全域交易識別碼 (GTIDs) 的目標進行複寫。確保資料庫叢集 Aurora MySQL 中GTID 相關的參數,設定為相容外部資料庫的狀態。若要了解如何操作,請參閱 使用 GTID 式複寫。在 Aurora MySQL 3.01 版及更新版本中,您可以選擇如何將 GTID 指派給從不使用 GTID 的來源複寫的交易。如需控制該設定之預存程序的相關資訊,請參閱 mysql.rds_assign_gtids_to_anonymous_transactions (Aurora MySQL 第 3 版)

警告

在 Aurora MySQL 與 MySQL 之間進行複寫時,請確定您僅使用 InnoDB 資料表。如果有您想要複寫的 MyISAM 資料表,您可以在使用下列命令設定複寫之前,將它們轉換為 InnoDB。

alter table <schema>.<table_name> engine=innodb, algorithm=copy;

使用 MySQL 或另一個 Aurora 資料庫叢集設定複寫

使用 Aurora MySQL 設定 MySQL 複寫涉及下列詳細討論的步驟:

1. 在複寫來源上開啟二進位日誌

2. 在複寫來源上保留二進位日誌,直到不再需要為止

3. 建立複寫來源的快照或傾印

4. 將快照或傾印載入至複本目標

5. 在複製來源上建立複寫使用者

6. 在複本目標上開啟複寫

7. 監控複本

1. 在複寫來源上開啟二進位日誌

在以下尋找如何在資料庫引擎的複寫來源上開啟二進位日誌的相關指示。

2. 在複寫來源上保留二進位日誌,直到不再需要為止

使用 MySQL 二進位日誌複寫時,Amazon RDS 不會管理複寫程序。因此,您需要確保會保留複寫來源上的 binlog 檔案,直到變更已套用至複本後為止。此維護可協助您在發生故障時將您的來源資料庫還原。

使用以下保留資料庫引擎二進位日誌的相關指示。

3. 建立複寫來源的快照或傾印

您可以使用複寫來源的快照或傾印,將資料的基準複本載入到複本上,然後從該點開始複寫。

使用以下為資料庫引擎建立複寫來源快照或傾印的相關指示。

4. 將快照或傾印載入至複本目標

如果您計劃從位於 Amazon RDS 外部的 MySQL 資料庫傾印載入資料,那麼,您可能需要建立供複製傾印檔案的 EC2 執行個體,然後將資料從 EC2 執行個體載入至資料庫叢集或資料庫執行個體。使用此方法,您可以在將傾印檔案複製到 EC2 執行個體之前加以壓縮,以便減少與複製資料至 Amazon RDS 相關聯的網路成本。您也可以加密一或多個傾印檔案,以於網路間傳輸資料時加以保護。

使用以下為資料庫引擎將複寫來源的快照或傾印載入複寫目標的相關指示。

5. 在複製來源上建立複寫使用者

在僅供複寫使用的資源上建立使用者 ID。下列範例適用於 MySQL 版 RDS 或外部 MySQL 來源資料庫。

mysql> CREATE USER 'repl_user'@'domain_name' IDENTIFIED BY 'password';

對於 Aurora MySQL 來源資料庫,資料庫叢集參數設定為 1 (ON) 且無法修改,因此您必須使用主機的 IP 位址,而非網域名稱。skip_name_resolve如需詳細資訊,請參閱 MySQL 文件中的跳轉名稱。

mysql> CREATE USER 'repl_user'@'IP_address' IDENTIFIED BY 'password';

使用者需要 REPLICATION CLIENTREPLICATION SLAVE 權限。授予這些權限給該使用者。

如果需要使用加密複寫,請對複寫使用者要求 SSL 連接。例如,您可以使用下列其中一個陳述式來要求使用者帳戶上的 SSL 連線repl_user

GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'IP_address';
GRANT USAGE ON *.* TO 'repl_user'@'IP_address' REQUIRE SSL;
注意

如果未包含 REQUIRE SSL,則複寫連線可能會以無訊息方式回復為未加密的連線。

6. 在複本目標上開啟複寫

開啟複寫之前,建議您手動取得 Aurora MySQL 資料庫叢集的快照或 RDS for MySQL 資料庫執行個體複本目標。如果發生問題,而您需要使用資料庫叢集或資料庫執行個體複本目標重新建立複寫,則可以從此快照還原資料庫叢集或資料庫執行個體,而不需再次將資料匯入至複本目標。

使用以下開啟資料庫引擎複寫功能的相關指示。

如果複寫失敗,可能會導致複本上的非預期輸入/輸出大幅增加,進而降低效能。如果複寫失敗或不再需要複寫,可以執行 mysql.rds_reset_external_master (Aurora MySQL 第 2 版)mysql.rds_reset_external_source (Aurora MySQL 第 3 版) 預存程序來移除複寫組態。

設定位置以停止僅供讀取複本的複寫作業

在 Aurora MySQL 3.04 版及更新版本中,您可以使用 mysql.rds_start_replication_until (Aurora MySQL 3 版) 預存程序開始複寫,然後在指定的二進位日誌檔案位置讓它停止。

啟動僅供讀取複本的複寫作業,並在特定位置停止複寫
  1. 使用 MySQL 用戶端,以主要使用者身分連線至 Aurora MySQL 資料庫叢集複本。

  2. 執行 mysql.rds_start_replication_until (Aurora MySQL 3 版) 預存程序。

    以下範例會啟動複寫並複寫變更,直到達到 120 二進位日誌檔案中的位置 mysql-bin-changelog.000777 為止。若要使用災難復原功能,請在發生損毀前將位置預設為 120

    call mysql.rds_start_replication_until( 'mysql-bin-changelog.000777', 120);

達到停止點時,複寫作業即會自動停止。而且,系統還會產生以下 RDS 事件:Replication has been stopped since the replica reached the stop point specified by the rds_start_replication_until stored procedure

如果您使用 GTID 式複寫,請使用 mysql.rds_start_replication_until_gtid (Aurora MySQL 3 版) 預存程序,而非 mysql.rds_start_replication_until (Aurora MySQL 3 版) 預存程序。如需 GTID 式複寫的詳細資訊,請參閱使用 GTID 式複寫

7. 監控複本

設定使用 Aurora MySQL 資料庫叢集的 MySQL 複寫時,當 Aurora MySQL 資料庫叢集為複本目標時,您必須監控其容錯移轉事件。若發生容錯移轉,則屬於複本目標的資料庫叢集可能會以不同的網路地址,在新主機上重新建立。如需如何監控容錯移轉事件的資訊,請參閱使用 Amazon RDS 事件通知

您也可以監控複本目標落後複寫來源的程度,方法是連接至複本目標並執行 SHOW SLAVE STATUS (Aurora MySQL 第 2 版) 或 SHOW REPLICA STATUS (Aurora MySQL 第 3 版) 命令。在命令輸出中,Seconds Behind Master 欄位會告知您複本目標落後於來源的程度。

同步複寫來源和目標之間的密碼

當您使用 SQL 陳述式變更複寫來源上的使用者帳戶和密碼時,這些變更會自動複寫到複寫目標。

如果您使用 AWS Management Console AWS CLI、或 RDS API 變更複寫來源上的主要密碼,則這些變更不會自動複寫到複寫目標。如果您要同步來源系統和目標系統之間的主要使用者和主要密碼,則必須自行對複寫目標進行相同的變更。

停用 Aurora 與 MySQL 之間或 Aurora 與另一個 Aurora 資料庫叢集之間的複寫

若要停止 MySQL 資料庫執行個體、外部 MySQL 資料庫,或另一個 Aurora 資料庫叢集的二進位日誌複寫,請遵循這些步驟,本主題後面將詳細討論此部分。

1. 在複本目標上停止二進位日誌複寫

2. 在複寫來源上關閉二進位日誌

1. 在複本目標上停止二進位日誌複寫

請遵循下列指示,為資料庫引擎停止二進位日誌複寫。

2. 在複寫來源上關閉二進位日誌

請遵循下表指示,為資料庫引擎關閉複寫來源上的二進位日誌。

使用 Amazon Aurora 為 MySQL 資料庫擴展讀取

您可以使用 Amazon Aurora 搭配 MySQL 資料庫執行個體來利用 Amazon Aurora 的讀取擴展功能,並為 MySQL 資料庫執行個體擴展讀取工作負載。若要使用 Aurora 來讀取擴展 MySQL 資料庫執行個體,請建立 Amazon Aurora MySQL 資料庫叢集,並讓它成為您 MySQL DB 執行個體的讀取複本。這可套用至 RDS for MySQL 資料庫執行個體,或在 Amazon RDS 外部執行的 MySQL 資料庫。

如需建立 Amazon Aurora 資料庫叢集的詳細資訊,請參閱建立 Amazon Aurora 資料庫叢集

設定 MySQL 資料庫執行個體與 Amazon Aurora 資料庫叢集之間的複寫時,務必遵循這些準則:

  • 參考 Amazon Aurora MySQL 資料庫叢集時,請使用 Amazon Aurora 資料庫叢集端點地址。如果發生容錯移轉,則提升至 Aurora MySQL 資料庫叢集主要執行個體的 Aurora 複本,將繼續使用資料庫叢集端點地址。

  • 直到您已驗證二進位日誌已套用至 Aurora 複本前,都要將二進位日誌保存在寫入器執行個體上。如此一來,發生故障時,您就可以還原寫入器執行個體。

重要

使用自我管理的複寫時,您需負責監控和解決可能發生的任何複寫問題。如需詳細資訊,請參閱 診斷和解決僅供讀取複本之間的延遲

注意

在 Aurora MySQL 資料庫叢集上啟動複寫功能所需的許可受到限制,並無法供 Amazon RDS 主要使用者使用。因此,您必須使用 mysql.rds_set_external_master (Aurora MySQL 第 2 版)mysql.rds_set_external_source (Aurora MySQL 第 3 版)mysql.rds_start_replication 程序,設定 Aurora MySQL 資料庫叢集與 MySQL 資料庫執行個體之間的複寫。

啟動外部來源執行個體與 Aurora MySQL 資料庫叢集之間的複寫

  1. 將來源 MySQL 資料庫執行個體設成唯讀:

    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  2. 在來源 MySQL 資料庫執行個體上執行 SHOW MASTER STATUS 命令,以確定二進位記錄檔的位置。您會獲得類似下列範例的輸出結果:

    File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------
  3. 使用 mysqldump,從外部 MySQL 資料庫執行個體將資料庫複製到 Amazon Aurora MySQL 資料庫叢集。若為非常大型的資料庫,您可能想要使用《Amazon Relational Database Service 使用者指南》中減少將資料匯入 MySQL 或 MariaDB 資料庫執行個體時的停機時間中的程序。

    對於LinuxmacOS、或Unix:

    mysqldump \ --databases <database_name> \ --single-transaction \ --compress \ --order-by-primary \ -u local_user \ -p local_password | mysql \ --host aurora_cluster_endpoint_address \ --port 3306 \ -u RDS_user_name \ -p RDS_password

    在 Windows 中:

    mysqldump ^ --databases <database_name> ^ --single-transaction ^ --compress ^ --order-by-primary ^ -u local_user ^ -p local_password | mysql ^ --host aurora_cluster_endpoint_address ^ --port 3306 ^ -u RDS_user_name ^ -p RDS_password
    注意

    請注意 -p 選項與輸入的密碼之間不能有空格。

    --host 命令中,使用 --user (-u)--port-pmysql 選項來指定主機名稱、使用者名稱、連接埠和密碼,以連接至 Aurora 資料庫叢集。主機名稱是來自 Amazon Aurora 資料庫叢集端點的 DNS 名稱,例如 mydbcluster.cluster-123456789012.us-east-1.rds.amazonaws.com。您可在 Amazon RDS 管理主控台中的叢集詳細資訊中,找到端點值。

  4. 將來源 MySQL 資料庫執行個體重新設為可寫入:

    mysql> SET GLOBAL read_only = OFF; mysql> UNLOCK TABLES;

    如需如何製作備份以搭配複寫作業使用的詳細資訊,請參閱 MySQL 文件中的 Backing up a source or replica by making it read only

  5. 在 Amazon RDS 管理主控台,將託管來源 MySQL 資料庫之伺服器的 IP 地址,新增至 Amazon Aurora 資料庫叢集的 VPC 安全群組。如需有關修改 VPC 安全群組的詳細資訊,請參閱《Amazon Virtual Private Cloud 使用者指南》中的 VPC 安全群組

    您可能還需要設定本機網路,以允許來自 Amazon Aurora 資料庫叢集之 IP 地址的連線,這樣就能與來源 MySQL 執行個體通訊。若要找出 Amazon Aurora 資料庫叢集的 IP 地址,請使用 host 命令。

    host aurora_endpoint_address

    主機名稱是來自 Amazon Aurora 資料庫叢集端點的 DNS 名稱。

  6. 使用您選擇的用戶端,連接至外部 MySQL 執行個體,並建立用於複寫的 MySQL 使用者。此帳戶只供複寫作業使用,務必限制其存取您的網域,以提升安全性。以下是範例。

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  7. 若為外部 MySQL 執行個體,請將 REPLICATION CLIENTREPLICATION SLAVE 權限授予複寫使用者。舉例來說,若要將所有資料庫的 REPLICATION CLIENTREPLICATION SLAVE 權限授予您網域中的「repl_user」使用者,請發出下列命令。

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
  8. 設定複寫之前,手動取得要成為讀取複本之 Aurora MySQL 資料庫叢集的快照。如果您需要對資料庫叢集重新建立複寫做為讀取複本,您可以從這個快照還原 Aurora MySQL 資料庫叢集,而不需從 MySQL 資料庫執行個體匯入資料至新的 Aurora MySQL 資料庫叢集。

  9. 將 Amazon Aurora 資料庫叢集變成複本。以主要使用者身分連接至 Amazon Aurora 資料庫叢集,然後使用 mysql.rds_set_external_master (Aurora MySQL 第 2 版)mysql.rds_set_external_source (Aurora MySQL 第 3 版)mysql.rds_start_replication 程序,將來源 MySQL 資料庫辨識為複寫主節點。

    使用您在步驟 2 中所確定的主控端日誌檔案名稱與主控端日誌位置。以下是範例。

    For Aurora MySQL version 2: CALL mysql.rds_set_external_master ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 0); For Aurora MySQL version 3: CALL mysql.rds_set_external_source ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 0);
  10. 在 Amazon Aurora 資料庫叢集上,呼叫 mysql.rds_start_replication 程序以開始複寫。

    CALL mysql.rds_start_replication;

建立來源 MySQL 資料庫執行個體與 Amazon Aurora 資料庫叢集之間的複寫之後,您可以將 Aurora 複本新增至 Amazon Aurora 資料庫叢集。您接著可以連接至 Aurora 複本來讀取擴展您的資料。如需建立 Aurora 複本的詳細資訊,請參閱將 Aurora 複本新增至資料庫叢集

最佳化二進位日誌複寫

接下來,您可以學習如何最佳化二進位日誌複寫效能,並對 Aurora MySQL 中的相關問題進行疑難排解。

提示

本討論假設您熟悉 MySQL 二進位日誌複寫機制及其運作方式。如需背景資訊,請參閱 MySQL 文件中的複寫實作

多執行緒二進位記錄複寫

使用多執行緒二進位日誌複寫,SQL 執行緒會從轉送日誌讀取事件,並將它們排入佇列,以供 SQL 工作者執行緒套用。SQL 工作者執行緒是由協調器執行緒管理。可能的話,會平行套用二進位日誌事件。

Aurora MySQL 版本 3 和 Aurora MySQL 2.12.1 及更新版本中支援多執行緒二進位記錄複寫。

當 Aurora MySQL 資料庫執行個體設定為使用二進位記錄複寫時,根據預設,複本執行個體會針對低於 3.04 版本的 Aurora MySQL 使用單執行緒複寫。若要啟用多執行緒複寫,您可以在自訂參數群組中將 replica_parallel_workers 參數更新為大於零的值。

對於 Aurora MySQL 3.04 版本及更高版本,複寫預設為多執行緒,且replica_parallel_workers設定為。4您可以在自訂參數群組中修改此參數。

下列組態選項可協助您微調多執行緒複寫。如需用法資訊,請參閱《MySQL 參考手冊》中的複寫和二進位記錄選項和變數

最佳組態取決於數個因素。例如,二進位日誌複寫的效能會受到資料庫工作負載特性和複本執行所在的資料庫執行個體類別影響。因此,建議您在將新參數設定套用至生產執行個體之前,徹底測試這些組態參數的所有變更:

  • binlog_group_commit_sync_delay

  • binlog_group_commit_sync_no_delay_count

  • binlog_transaction_dependency_history_size

  • binlog_transaction_dependency_tracking

  • replica_preserve_commit_order

  • replica_parallel_type

  • replica_parallel_workers

在 Aurora MySQL 3.06 版及更高版本中,您可以在為具有多個次要索引的大型資料表複寫交易時改善二進位記錄複本的效能。此功能引入執行緒集區,以便在 binlog 複本上 parallel 套用次要索引變更。此功能由 aurora_binlog_replication_sec_index_parallel_workers DB 叢集參數控制,該參數控制可用於套用次要索引變更的 parallel 執行緒總數。依預設,參數設定為 0 (停用)。啟用此功能不需要重新啟動執行個體。若要啟用此功能,請停止進行中的複寫、設定所需的 parallel 工作者執行緒數目,然後重新啟動複寫。

您也可以使用此參數作為全域變數,其中 n 是 parallel 工作者執行緒的數目:

SET global aurora_binlog_replication_sec_index_parallel_workers=n;

最佳化 Binlog 複寫 (Aurora MySQL 2.10 及更高版本)

在 Aurora MySQL 2.10 及更高版本中,Aurora 會自動將名為 binlog 輸入/輸出快取的最佳化套用至二進位日誌複寫。藉由快取最近遞交的 binlog 事件,此最佳化旨在改善 binlog 傾印執行緒效能,同時限制 binlog 來源執行個體上對前景交易的影響。

注意

此功能所使用的記憶體與 MySQL binlog_cache 設定無關。

此功能不適用於使用 db.t2db.t3 執行個體類別的 Aurora 資料庫執行個體。

您不需要調整任何組態參數,即可開啟此最佳化。特別是,如果您在 Aurora MySQL 的早期版本中將組態參數 aurora_binlog_replication_max_yield_seconds 調整為非零值,請在 Aurora MySQL 2.10 及更高版本中將其設定回零。

狀態變數 aurora_binlog_io_cache_readsaurora_binlog_io_cache_read_requests 可在 Aurora MySQL 2.10 及更高版本中使用。這些狀態變數可協助您監控從 binlog 輸入/輸出快取讀取資料的頻率。

  • aurora_binlog_io_cache_read_requests 顯示對快取發起的 binlog 輸入/輸出讀取要求的次數。

  • aurora_binlog_io_cache_reads 顯示從快取擷取資訊的 binlog 輸入/輸出讀取次數。

下列 SQL 查詢會計算利用快取資訊的 binlog 讀取要求百分比。在這種情況下,比例越接近 100 越好。

mysql> SELECT (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='aurora_binlog_io_cache_reads') / (SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='aurora_binlog_io_cache_read_requests') * 100 as binlog_io_cache_hit_ratio; +---------------------------+ | binlog_io_cache_hit_ratio | +---------------------------+ | 99.99847949080622 | +---------------------------+

binlog 輸入/輸出快取功能也包含與 binlog 傾印執行緒相關的新指標。「傾印執行緒」是新的 binlog 複本連線到 binlog 來源執行個體時所建立的執行緒。

傾印執行緒指標會每隔 60 秒列印至資料庫日誌,字首為 [Dump thread metrics]。此指標包括每個 binlog 複本的資訊,例如 Secondary_idSecondary_uuid、binlog 檔案名稱,以及每個複本正在讀取的位置。此指標也包括 Bytes_behind_primary,表示複寫來源與複本之間的距離 (以位元組為單位)。此指標會測量複本輸入/輸出執行緒的延遲。該圖與複本 SQL 套用者執行緒的延遲不同,此執行緒由 binlog 複本上的 seconds_behind_master 指標表示。您可以透過檢查距離是否減少或增加,判斷 binlog 複本是趕上還是落後於來源。

最佳化 binlog 複寫 (Aurora MySQL 2 到 2.09 版)

若要最佳化 Aurora MySQL 的二進位日誌複寫,您可以調整下列叢集層級的最佳化參數。這些參數可協助您指定 binlog 來源執行個體上的延遲與複寫延遲之間的適當平衡。

  • aurora_binlog_use_large_read_buffer

  • aurora_binlog_read_buffer_size

  • aurora_binlog_replication_max_yield_seconds

注意

針對與 MySQL 5.7 相容的叢集,您可以在 Aurora MySQL 2 到 2.09* 版中使用這些參數。在 Aurora MySQL 2.10.0 及更高版本中,這些參數由 binlog 輸入/輸出快取最佳化取代,您不需要使用它們。

大型讀取緩衝區和最大產出最佳化的概觀

當二進位日誌傾印執行緒存取 Aurora 叢集磁碟區,且叢集在處理大量交易時,可能會出現二進位日誌複寫效能降低。您可以使用參數 aurora_binlog_use_large_read_bufferaurora_binlog_replication_max_yield_secondsaurora_binlog_read_buffer_size 協助最小化這種類型的爭用。

假設您有一個情況,其中 aurora_binlog_replication_max_yield_seconds 設定為大於 0,且傾印執行緒的目前 binlog 檔案作用中。在此情況下,二進位日誌傾印執行緒會等待指定的最大秒數,以讓交易填滿目前的 binlog 檔案。此等待期可避免因個別複寫每個 binlog 事件而產生的爭用。不過,這樣做會增加二進位日誌複本的複本延遲。這些複本可能會落後於來源,落後的秒數與 aurora_binlog_replication_max_yield_seconds 設定相同。

目前的 binlog 檔案表示傾印執行緒目前正在讀取以執行複寫的 binlog 檔案。我們認為 binlog 檔案在更新,或開啟以根據未來交易進行更新時,binlog 檔案將處於作用中狀態。Aurora MySQL 填充作用中 binlog 檔案之後,MySQL 會建立並切換至新的 binlog 檔案。舊的 binlog 檔案會變為非作用中狀態。其不再根據未來交易進行更新。

注意

調整這些參數之前,請先測量一段時間的交易延遲和輸送量。您可能會發現二進位日誌複寫效能穩定,而且即使有偶爾發生爭用,也具有較低的延遲。

aurora_binlog_use_large_read_buffer

若此參數設定為 1,則 Aurora MySQL 會根據參數 aurora_binlog_read_buffer_sizeaurora_binlog_replication_max_yield_seconds 的設定,最佳化二進位日誌複寫。若 aurora_binlog_use_large_read_buffer 設定為 0,Aurora MySQL 會忽略 aurora_binlog_read_buffer_sizeaurora_binlog_replication_max_yield_seconds 參數的值。

aurora_binlog_read_buffer_size

具有較大讀取緩衝區的二進位日誌傾印執行緒會透過為每個輸入/輸出讀取更多的事件,來將讀取輸入/輸出操作的數目降至最低。參數 aurora_binlog_read_buffer_size 會設定讀取緩衝區大小。大型讀取緩衝區可以減少產生大量二進位日誌資料之工作負載的二進位日誌爭用。

注意

此參數只有在叢集也具有 aurora_binlog_use_large_read_buffer=1 設定時才會產生影響。

增加讀取緩衝區的大小,並不會影響二進位日誌複寫的效能。二進位日誌傾印執行緒不會等待更新交易來填滿讀取緩衝區。

aurora_binlog_replication_max_yield_seconds

如果您的工作負載需要較低的交易延遲,而且您可以容忍某些複寫延遲,則可以提高 aurora_binlog_replication_max_yield_seconds 參數。此參數控制叢集中二進位日誌複寫的最大產出屬性。

注意

此參數只有在叢集也具有 aurora_binlog_use_large_read_buffer=1 設定時才會產生影響。

Aurora MySQL 會立即識別 aurora_binlog_replication_max_yield_seconds 參數值的任何變更。您不需要重新啟動資料庫執行個體。不過,當您開啟此設定時,傾印執行緒只會在目前的 binlog 檔案達到其 128 MB 的大小上限,並輪詢至新的檔案時,才會開始產生。

相關參數

使用下列資料庫叢集參數,來開啟 binlog 最佳化。

參數 預設 有效值 描述
aurora_binlog_use_large_read_buffer 1 0, 1 切換以開啟複寫改進功能。若其值為 1,二進位日誌傾印執行緒會將 aurora_binlog_read_buffer_size 用作二進位日誌複寫;否則會使用預設緩衝區大小 (8K)。不在 Aurora MySQL 第 3 版中使用。
aurora_binlog_read_buffer_size 5242880 8192-536870912 參數設定 aurora_binlog_use_large_read_buffer 為 1 時,二進位日誌傾印執行緒使用的讀取緩衝區大小。不在 Aurora MySQL 第 3 版中使用。
aurora_binlog_replication_max_yield_seconds 0 0-36000

Aurora MySQL 2.07.* 版的最大接受值是 45。您可以在 2.09 和更新版本上將其調整為更高的值。

在第 2 版中,只有當參數 aurora_binlog_use_large_read_buffer 設定為 1 時,此參數才有效。

啟用二進位日誌複寫的最大產出機制

您可以如下所示開啟二進位日誌複寫,實現最大產出最佳化。這樣做可將 binlog 來源執行個體上交易延遲降到最低。不過,您可能會遇到複寫延遲增加。

開啟 Aurora MySQL 叢集的最大產出 binlog 最佳化
  1. 使用以下參數設定來建立或編輯資料庫叢集參數群組:

    • aurora_binlog_use_large_read_buffer:以 ON 或 1 的值開啟。

    • aurora_binlog_replication_max_yield_seconds︰指定大於 0 的值。

  2. 將資料庫叢集參數群組與作為 binlog 來源的 Aurora MySQL 叢集建立關聯。若要執行此作業,請遵循使用參數群組中的程序。

  3. 確認參數變更生效。若要執行此操作,請在 binlog 來源執行個體上執行下列查詢。

    SELECT @@aurora_binlog_use_large_read_buffer, @@aurora_binlog_replication_max_yield_seconds;

    輸出內容應如下所示。

    +---------------------------------------+-----------------------------------------------+ | @@aurora_binlog_use_large_read_buffer | @@aurora_binlog_replication_max_yield_seconds | +---------------------------------------+-----------------------------------------------+ | 1 | 45 | +---------------------------------------+-----------------------------------------------+

關閉二進位日誌複寫最大產出最佳化

您可以如下所示關閉二進位日誌複寫,實現最大產出最佳化。這樣做可將複寫延遲降至最低。不過,您可能會遇到 binlog 來源執行個體上的交易延遲增加。

關閉 Aurora MySQL 叢集的最大產出最佳化
  1. 確定與 Aurora MySQL 叢集關聯的資料庫叢集參數群組將 aurora_binlog_replication_max_yield_seconds 設定為 0。如需使用參數群組設定組態參數的詳細資訊,請參閱使用參數群組

  2. 確認參數變更生效。若要執行此操作,請在 binlog 來源執行個體上執行下列查詢。

    SELECT @@aurora_binlog_replication_max_yield_seconds;

    輸出內容應如下所示。

    +-----------------------------------------------+ | @@aurora_binlog_replication_max_yield_seconds | +-----------------------------------------------+ | 0 | +-----------------------------------------------+

關閉大型讀取緩衝區

您可以關閉整個大型讀取緩衝區功能,如下所示。

關閉 Aurora MySQL 叢集的大型二進位日誌讀取緩衝區
  1. aurora_binlog_use_large_read_buffer 重設為 OFF 或 0。

    確定與 Aurora MySQL 叢集關聯的資料庫叢集參數群組將 aurora_binlog_use_large_read_buffer 設定為 0。如需使用參數群組設定組態參數的詳細資訊,請參閱使用參數群組

  2. 在 binlog 來源執行個體上,執行下列查詢。

    SELECT @@ aurora_binlog_use_large_read_buffer;

    輸出內容應如下所示。

    +---------------------------------------+ | @@aurora_binlog_use_large_read_buffer | +---------------------------------------+ | 0 | +---------------------------------------+

設定增強型 Binlog

增強型 Binlog 可減少開啟 Binlog 所造成的運算效能額外負荷,在某些情況下最高可達 50%。使用增強型 Binlog,此額外負荷可以減少至大約 13%。為了減少額外負荷,增強型 Binlog 會將二進位和交易日誌平行寫入至儲存體,這會將交易認可時寫入的資料降到最低。

相較於社群 MySQL Binlog,使用增強型 Binlog 還可以改善重新啟動和容錯移轉後的資料庫復原時間,最高可達 99%。增強型 Binlog 與現有的 Binlog 型工作負載相容,而且您與其互動的方式同於與社群 MySQL Binlog 互動的方式。

Aurora MySQL 3.03.1 及更高版本上提供增強型的備忘記錄。

設定增強型 Binlog 參數

您可以透過開啟/關閉增強型 Binlog 參數,在社群 MySQL Binlog 與增強型 Binlog 之間切換。現有的 Binlog 取用者可以繼續讀取和取用 Binlog 檔案,而不會在 Binlog 檔案序列中有任何間隙。

開啟增強型 Binlog
參數 預設 描述
binlog_format binlog_format 參數設定為您選擇的二進位記錄格式,以開啟增強型 Binlog。確定 binlog_format parameter 未設定為 OFF。如需詳細資訊,請參閱設定 Aurora MySQL 二進位記錄
aurora_enhanced_binlog 0 將此參數的值設定為與 Aurora MySQL 叢集相關聯之資料庫叢集參數群組中的 1。當您變更此參數的值時,必須在 DBClusterParameterGroupStatus 值顯示為 pending-reboot 時重新啟動寫入器執行個體。
binlog_backup 1 關閉此參數以開啟增強型 Binlog。若要這樣做,請將此參數的值設定為 0
binlog_replication_globaldb 1 關閉此參數以開啟增強型 Binlog。若要這樣做,請將此參數的值設定為 0
重要

僅在使用增強型 Binlog 時,您才能關閉 binlog_backupbinlog_replication_globaldb 參數。

開啟增強型 Binlog
參數 描述
aurora_enhanced_binlog 將此參數的值設定為與 Aurora MySQL 叢集相關聯之資料庫叢集參數群組中的 0。每當您變更此參數的值時,就必須在 DBClusterParameterGroupStatus 值顯示為 pending-reboot 時重新啟動寫入器執行個體。
binlog_backup 在您關閉增強型 Binlog 時開啟此參數。若要這樣做,請將此參數的值設定為 1
binlog_replication_globaldb 在您關閉增強型 Binlog 時開啟此參數。若要這樣做,請將此參數的值設定為 1

若要檢查增強型 Binlog 是否已開啟,請在 MySQL 用戶端中使用下列命令:

mysql>show status like 'aurora_enhanced_binlog'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | aurora_enhanced_binlog | ACTIVE | +------------------------+--------+ 1 row in set (0.00 sec)

當增強型 Binlog 開啟時,輸出會針對 aurora_enhanced_binlog 顯示 ACTIVE

其他相關參數

當您開啟增強型 Binlog 時,下列參數會受到影響:

  • max_binlog_size 參數可見,但無法修改。當增強型 Binlog 開啟時,它的預設值 134217728 會自動調整為 268435456

  • 與社群 MySQL Binlog 不同,當增強型 Binlog 開啟時,binlog_checksum 不會充當動態參數。若要使對此參數所做的變更生效,您必須手動重新啟動資料庫叢集,即使 ApplyMethodimmediate 也是如此。

  • 增強型 Binlog 開啟時,您在 binlog_order_commits 參數上設定的值不會影響認可的順序。認可總是排序,沒有任何進一步的效能隱憂。

增強型 Binlog 與社群 MySQL Binlog 之間的差異

與社群 MySQL binlog 相比,增強型 binlog 與複製、備份和 Aurora 全域資料庫的互動方式不同。建議您在使用增強型 Binlog 之前先了解下列差異。

  • 來源資料庫叢集中的增強型 binlog 檔案無法在複製的資料庫叢集上使用。

  • Aurora 備份中不包含增強型的 Binlog 檔案。因此,在還原資料庫叢集之後,儘管在其上設定了任何保留期間,仍無法使用來源資料庫叢集中的增強型 Binlog 檔案。

  • 與 Aurora 全球資料庫搭配使用時,主要資料庫叢集的增強型 Binlog 檔案不會複寫至次要區域中的資料庫叢集。

範例

下列範例說明增強型 Binlog 與社群 MySQL Binlog 之間的差異。

在還原或複製的資料庫叢集上

當增強型 Binlog 開啟時,在已還原或複製的資料庫叢集中無法使用歷史 Binlog 檔案。在還原或複製操作之後,如果開啟了 Binlog,新的資料庫叢集會開始寫入自己的 Binlog 檔案序列,從 1 (mysql-bin-changelog.000001) 開始。

若要在還原或複製操作之後開啟增強型 Binlog,請在還原或複製的資料庫叢集上設定所需的資料庫叢集參數。如需詳細資訊,請參閱 設定增強型 Binlog 參數

範例 增強型 Binlog 開啟時所執行的複製或還原操作

來源資料庫叢集:

mysql> show binary logs; +----------------------------+-----------+-----------+ | Log_name | File_size | Encrypted | +----------------------------+-----------+-----------+ | mysql-bin-changelog.000001 | 156 | No | | mysql-bin-changelog.000002 | 156 | No | | mysql-bin-changelog.000003 | 156 | No | | mysql-bin-changelog.000004 | 156 | No | --> Enhanced Binlog turned on | mysql-bin-changelog.000005 | 156 | No | --> Enhanced Binlog turned on | mysql-bin-changelog.000006 | 156 | No | --> Enhanced Binlog turned on +----------------------------+-----------+-----------+ 6 rows in set (0.00 sec)

在還原或複製的資料庫叢集上,增強型 Binlog 開啟時,不會備份 Binlog 檔案。為了避免 Binlog 資料中的不連續性,在開啟增強型 Binlog 之前寫入的 Binlog 檔案也無法使用。

mysql>show binary logs; +----------------------------+-----------+-----------+ | Log_name | File_size | Encrypted | +----------------------------+-----------+-----------+ | mysql-bin-changelog.000001 | 156 | No | --> New sequence of Binlog files +----------------------------+-----------+-----------+ 1 row in set (0.00 sec)
範例 在關閉增強型 binlog 時執行的複製或還原作業

來源資料庫叢集:

mysql>show binary logs; +----------------------------+-----------+-----------+ | Log_name | File_size | Encrypted | +----------------------------+-----------+-----------+ | mysql-bin-changelog.000001 | 156 | No | | mysql-bin-changelog.000002 | 156 | No | --> Enhanced Binlog enabled | mysql-bin-changelog.000003 | 156 | No | --> Enhanced Binlog enabled | mysql-bin-changelog.000004 | 156 | No | | mysql-bin-changelog.000005 | 156 | No | | mysql-bin-changelog.000006 | 156 | No | +----------------------------+-----------+-----------+ 6 rows in set (0.00 sec)

在還原或複製的資料庫叢集上,可以使用在關閉增強型 Binlog 之後寫入的 Binlog 檔案。

mysql>show binary logs; +----------------------------+-----------+-----------+ | Log_name | File_size | Encrypted | +----------------------------+-----------+-----------+ | mysql-bin-changelog.000004 | 156 | No | | mysql-bin-changelog.000005 | 156 | No | | mysql-bin-changelog.000006 | 156 | No | +----------------------------+-----------+-----------+ 1 row in set (0.00 sec)

在 Amazon Aurora 全球資料庫上

在 Amazon Aurora 全球資料庫上,主要資料庫叢集的 Binlog 資料不會複寫到次要資料庫叢集。在跨區域容錯移轉程序之後,Binlog 資料無法在新提升的主要資料庫叢集中使用。如果開啟了 Binlog,新提升的資料庫叢集會啟動自己的 Binlog 檔案序列,從 1 (mysql-bin-changelog.000001) 開始。

若要在容錯移轉之後開啟增強型 Binlog,您必須在次要資料庫叢集上設定所需的資料庫叢集參數。如需詳細資訊,請參閱 設定增強型 Binlog 參數

範例 開啟增強型 Binlog 時,便會執行全球資料庫容錯移轉操作

舊的主要資料庫叢集 (容錯移轉前):

mysql>show binary logs; +----------------------------+-----------+-----------+ | Log_name | File_size | Encrypted | +----------------------------+-----------+-----------+ | mysql-bin-changelog.000001 | 156 | No | | mysql-bin-changelog.000002 | 156 | No | | mysql-bin-changelog.000003 | 156 | No | | mysql-bin-changelog.000004 | 156 | No | --> Enhanced Binlog enabled | mysql-bin-changelog.000005 | 156 | No | --> Enhanced Binlog enabled | mysql-bin-changelog.000006 | 156 | No | --> Enhanced Binlog enabled +----------------------------+-----------+-----------+ 6 rows in set (0.00 sec)

新的主要資料庫叢集 (容錯移轉後):

開啟增強型 Binlog 時,Binlog 檔案不會複寫到次要區域。為了避免 Binlog 資料中的不連續性,無法使用在開啟增強型 Binlog 之前寫入的 Binlog 檔案。

mysql>show binary logs; +----------------------------+-----------+-----------+ | Log_name | File_size | Encrypted | +----------------------------+-----------+-----------+ | mysql-bin-changelog.000001 | 156 | No | --> Fresh sequence of Binlog files +----------------------------+-----------+-----------+ 1 row in set (0.00 sec)
範例 關閉增強型 Binlog 時,便會執行全球資料庫容錯移轉操作

來源資料庫叢集:

mysql>show binary logs; +----------------------------+-----------+-----------+ | Log_name | File_size | Encrypted | +----------------------------+-----------+-----------+ | mysql-bin-changelog.000001 | 156 | No | | mysql-bin-changelog.000002 | 156 | No | --> Enhanced Binlog enabled | mysql-bin-changelog.000003 | 156 | No | --> Enhanced Binlog enabled | mysql-bin-changelog.000004 | 156 | No | | mysql-bin-changelog.000005 | 156 | No | | mysql-bin-changelog.000006 | 156 | No | +----------------------------+-----------+-----------+ 6 rows in set (0.00 sec)

還原或複製的資料庫叢集:

在關閉增強型 Binlog 之後寫入的 Binlog 檔案會被複寫,並可在新提升的資料庫叢集中使用。

mysql>show binary logs; +----------------------------+-----------+-----------+ | Log_name | File_size | Encrypted | +----------------------------+-----------+-----------+ | mysql-bin-changelog.000004 | 156 | No | | mysql-bin-changelog.000005 | 156 | No | | mysql-bin-changelog.000006 | 156 | No | +----------------------------+-----------+-----------+ 3 rows in set (0.00 sec)

增強型分 CloudWatch 錄日誌的 Amazon 指標

只有在開啟增強型 BINLOG 時,才會發佈下列 Amazon CloudWatch 指標。

CloudWatch 公制 描述 個單位
ChangeLogBytesUsed 增強型 Binlog 使用的儲存體數量。 位元組
ChangeLogReadiOps 增強型 Binlog 中 5 分鐘間隔內執行的讀取 I/O 操作次數。 每 5 分鐘計數
ChangeLog编辑 增強型 Binlog 中 5 分鐘間隔內執行的寫入磁碟 I/O 操作次數。 每 5 分鐘計數

增強型 Binlog 限制

當增強型 Binlog 開啟時,下列限制適用於 Amazon Aurora 資料庫叢集。

  • 僅在 Aurora MySQL 3.03.1 及更新版本上支援增強型的備忘記錄。

  • 在主要資料庫叢集上寫入的增強型 Binlog 檔案不會複製到複製或還原的資料庫叢集。

  • 與 Amazon Aurora 全球資料庫搭配使用時,主要資料庫叢集的增強型 Binlog 檔案不會複寫至次要資料庫叢集。因此,在容錯移轉程序之後,無法在新的主要資料庫叢集中使用歷史 Binlog 資料。

  • 系統會忽略下列 Binlog 組態參數:

    • binlog_group_commit_sync_delay

    • binlog_group_commit_sync_no_delay_count

    • binlog_max_flush_queue_time

  • 您無法捨棄或重新命名資料庫中損毀的資料表。要刪除這些表格,您可以聯繫 AWS Support。

  • 開啟增強型 Binlog 時,會停用 Binlog I/O 快取。如需詳細資訊,請參閱 最佳化二進位日誌複寫

    注意

    增強型 Binlog 提供與 Binlog I/O 快取類似的讀取效能改進,以及更好的寫入效能改進。

  • 不支援恢復功能。無法在下列情況下的資料庫叢集中開啟增強型 Binlog:

    • 目前已啟用恢復功能的資料庫叢集。

    • 先前已啟用回溯功能,但現在已停用的資料庫叢集。

    • 從來源資料庫叢集或已啟用恢復功能的快照中還原的資料庫叢集。