使用外部來源執行個體設定二進位日誌檔案位置複寫 - Amazon Relational Database Service

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

使用外部來源執行個體設定二進位日誌檔案位置複寫

您可以使用二進位日誌檔案複寫,在RDS適用於 MySQL 或 MariaDB 資料庫執行個體與 Amazon 外部的 MySQL 或 MariaDB RDS 執行個體之間設定複寫。

開始之前

您可以使用複寫交易的二進制日誌檔案位置設定複寫。

在 Amazon 資料庫執行個體上啟動複寫所需的許可受到限制,不適用於您的 Amazon RDS RDS主要使用者。因此,請確定您使用 Amazon RDSmysql.rds_set_external_master (RDS for MariaDB and RDS for MySQL major version 8.0 and lower)mysql.rds_set_external_source (RDS適用於我的SQL主要版本 8.4 和更新版本),以及 mysql.rds_start_replication命令來設定即時資料庫與 Amazon RDS 資料庫之間的複寫。

若要設定 MySQL 或 MariaDB 資料庫的二進位記錄格式,請更新 binlog_format 參數。如果您的資料庫執行個體使用預設資料庫執行個體參數群組,請建立新的資料庫參數群組來修改 binlog_format 參數。在 MariaDB 和 MySQL 8.0 及更低版本中, binlog_format預設為 MIXED。不過,如果需要特定的二進位日誌 (binlog) 格式,也可以將 binlog_format 設定為 ROWSTATEMENT。重新啟動資料庫執行個體,讓變更生效。在 MySQL 8.4 和更新版本中, binlog_format預設為 ROW

如需有關設定 binlog_format 參數的資訊,請參閱設定 RDS for MySQL 二進位記錄。如需有關不同 MySQL 複寫類型影響的資訊,請參閱 MySQL 文件中的陳述式型和資料列型複寫的優點和缺點

使用外部來源執行個體設定二進位日誌檔案位置複寫

當您在 Amazon 上設定外部來源執行個體和複本時,請遵循下列準則RDS:

  • 監控複本所在 Amazon RDS 資料庫執行個體的容錯移轉事件。若發生容錯移轉,資料庫執行個體 (您的複本) 可能會以不同的網路地址,在新主機上重新建立。如需如何監控容錯移轉事件的資訊,請參閱使用 Amazon RDS 事件通知

  • 直到您已驗證二進位日誌已套用至複本前,都要將二進位日誌保存在來源執行個體上。如此一來,發生故障時,這種維護可確保您能夠還原來源執行個體。

  • 在您的 Amazon RDS 資料庫執行個體上開啟自動備份。如果您需要重新同步來源執行個體與複本,開啟自動備份功能可確保您能夠將複本還原至特定時間點。如需備份和 point-in-time還原的資訊,請參閱 備份、還原和匯出資料

使用外部來源執行個體設定二進位日誌檔案複寫
  1. 將來源 My SQL或 MariaDB 執行個體設為唯讀。

    mysql> FLUSH TABLES WITH READ LOCK; mysql> SET GLOBAL read_only = ON;
  2. 在來源 MySQL 或 MariaDB 執行個體上執行 SHOW MASTER STATUS命令,以判斷 binlog 位置。

    您會獲得類似下列範例的輸出。

    File Position ------------------------------------ mysql-bin-changelog.000031 107 ------------------------------------
  3. 使用 將資料庫從外部執行個體複製到 Amazon RDS 資料庫執行個體mysqldump。如果是非常大型的資料庫,您可能需要使用 將資料匯入 Amazon RDS for MySQL 資料庫,減少停機時間 中的程序。

    用於 Linux, macOS、 或 Unix:

    mysqldump --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u local_user \ -plocal_password | mysql \ --host=hostname \ --port=3306 \ -u RDS_user_name \ -pRDS_password

    用於 Windows:

    mysqldump --databases database_name ^ --single-transaction ^ --compress ^ --order-by-primary ^ -u local_user ^ -plocal_password | mysql ^ --host=hostname ^ --port=3306 ^ -u RDS_user_name ^ -pRDS_password
    注意

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

    若要指定要連線至 Amazon RDS 資料庫執行個體的主機名稱、使用者名稱、連接埠和密碼,請使用 mysql命令中的 --host--user (-u)--port-p選項。主機名稱是來自 Amazon 資料庫執行個體端點的網域名稱服務 (DNS) RDS 名稱,例如 myinstance.123456789012.us-east-1.rds.amazonaws.com。您可在 AWS Management Console的執行個體詳細資訊中找到端點值。

  4. 讓來源 MySQL 或 MariaDB 執行個體可再次寫入。

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

    如需製作備份以用於複寫的詳細資訊,請參閱我的SQL文件

  5. 在 中 AWS Management Console,將託管外部資料庫的伺服器的 IP 地址新增至 Amazon 資料庫執行個體的虛擬私有雲端 (VPC) RDS 安全群組。如需修改VPC安全群組的詳細資訊,請參閱《Amazon Virtual Private Cloud 使用者指南》中的 的安全群組VPC

    IP 地址會在滿足下列條件時變更:

    • 您使用公有 IP 地址供外部來源執行個體和資料庫執行個體通訊。

    • 外部來源執行個體停止後又重新啟動。

    如果符合這些條件,請先驗證 IP 地址再新增它。

    您可能還需要設定本機網路,以允許來自 Amazon 資料庫執行個體 IP RDS 地址的連線。這樣做,以便您的本機網路可以與外部 MySQL 或 MariaDB 執行個體通訊。若要尋找 Amazon 資料庫執行個體的 IP RDS 地址,請使用 host命令。

    host db_instance_endpoint

    主機名稱是來自 Amazon RDS 資料庫執行個體端點DNS的名稱。

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

    CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
    注意

    指定此處所顯示提示以外的密碼,作為安全最佳實務。

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

    GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
  8. 讓 Amazon RDS 資料庫執行個體成為複本。若要這麼做,請先以主要使用者身分連線至 Amazon RDS 資料庫執行個體。然後使用 或 mysql.rds_set_external_master (RDS for MariaDB and RDS for MySQL major version 8.0 and lower)命令,將外部 MySQL mysql.rds_set_external_source (RDS適用於我的SQL主要版本 8.4 和更新版本)或 MariaDB 資料庫識別為來源執行個體。使用您在步驟 2 中所確定的主控端日誌檔案名稱與主控端日誌位置。下列命令是範例。

    我的SQL 8.4

    CALL mysql.rds_set_external_source ('mysourceserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);

    MariaDB 和 MySQL 8.0 和 5.7

    CALL mysql.rds_set_external_master ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
    注意

    在 RDS for My 上SQL,您可以選擇改為執行 mysql.rds_set_external_source_with_delay (RDS適用於我的SQL主要 8.4 版和更新版本)mysql.rds_set_external_master_with_delay (RDS適用於 MariaDB RDS 和適用於我的SQL主要版本 8.0 及更低版本) 預存程序來使用延遲複寫。在 RDS for My 中SQL,使用延遲複寫的一個原因是使用mysql.rds_start_replication_until 預存程序開啟災難復原。目前, RDS for MariaDB 支援延遲複寫,但不支援 mysql.rds_start_replication_until 程序。

  9. 在 Amazon RDS 資料庫執行個體上,發出 mysql.rds_start_replication命令以開始複寫。

    CALL mysql.rds_start_replication;