如何使用自訂開始時間遷移 Amazon RDS for MySQL 資料庫執行個體?

上次更新日期:2021 年 10 月 15 日

我想使用自訂開始時間將 Amazon Relational Database Service (Amazon RDS) for MySQL 資料庫執行個體遷移到另一個 MySQL 資料庫執行個體。該如何進行?

簡短描述

若要將資料從 Amazon RDS for MySQL 遷移到另一個 MySQL 資料庫執行個體,您可以使用以下方法之一:

  • 以 Binlog 為基礎的複寫
    注意:如果您使用的是 MySQL 8.0.17 版,則引擎可能不會在當機復原期間列印最後一個 binlog 檔案位置和檔案名稱。因此,您將無法使用 binlog 複寫方法來遷移資料。檢查 MySQL 網站是否存在此已知問題。
  • AWS DMS

解決方案

Binlog 複寫

先決條件:

  • Binlog 複寫使用在來源上產生的 binlog 檔案來持續記錄變更。將 binlog_format parameter 設定為您選擇的二進位記錄格式 (ROW、STATEMENT 或 MIXED)。 
  • binlog 保留時間參數增加到比當前值更大的值。這樣,尚未傳送的 binlog 仍會保留在來源 Amazon RDS for MySQL 執行個體上。
  • 確保 Amazon RDS for MySQL 執行個體可從目標主機存取。

若要使用 binlog 複寫將資料從 Amazon RDS for MySQL 遷移到另一個 MySQL 資料庫執行個體,請執行以下操作:

1.    使用自訂開始時間 (或時間點值) 從來源 Amazon RDS 資料庫執行個體執行 point-in-time 恢復

2.    建立 point-in-time 恢復 RDS 執行個體的備份。

例如,您可以使用 mysqldump 來執行此任務:

mysqldump -h rdsendpoint -u username -p dbname > backupfile.sql

3.    查看 point-in-time 恢復 RDS 執行個體的錯誤日誌檔案,記錄上次套用的 binlog 檔案和位置的相關資訊。 

以下是一個日誌檔案訊息範例:

[Note] InnoDB: Last MySQL binlog file position 0 456, file name mysql-bin-changelog.152707

注意:您需要存取記錄 binlog 檔案和任何後續 binlog 檔案,以進行複寫。您只能使用這些檔案執行從來源 RDS 執行個體的複寫。RDS MySQL 中的最大 binlog 保留期只能設定為 7 天,預設值為 "NULL"。(如需詳細資訊,請參閱 mysql.rds_set_configuration。) 因此,將這些 binlog 檔案保留在來源執行個體上以在後續步驟中完成。

4.    在來源 Amazon RDS for MySQL 執行個體上設定複寫使用者並向該使用者授予必要的權限:

mysql> create user repl_user@'%' identified by 'repl_user';
mysql> grant replication slave, replication client on *.* to repl_user@'%';
mysql> show grants for repl_user@'%';

5.    登入 MySQL-target 將備份檔案傳輸到目標內部部署伺服器。建立一個新資料庫,並使用 dumpfile 將資料庫還原到新的外部資料庫執行個體:

$ mysql -h hostname -u username -p dbname < backupfile.sql

6.    停止目標 MySQL 引擎:

$ service mysqld stop

7.修改 my.cnf 檔案參數,以指向您的唯一伺服器 ID 和您要複寫的資料庫。

例如:

server_id=2
replicate-do-db=testdb

如果您要複寫多個資料庫,您可以多次使用 replicate-do-db 選項,並在單獨的行中指定這些資料庫,如下所示:

replicate-do-db=<db_name_1>
replicate-do-db=<db_name_2>
replicate-do-db=<db_name_N>

如需有關使用資料庫名稱建立複寫篩選條件的詳細資訊,請參閱 MySQL 網站上的 replicate-do-db

8.    儲存檔案並在目標 MySQL 資料庫執行個體上重新啟動 MySQL 資料庫引擎。

例如,如果您使用的是 Linux 系統,則可以使用以下語法:

service mysqld restart

9.    建立與來源 RDS for MySQL 資料庫執行個體的連線。

例如:

mysql> change master to master_host='rds-endpoint',master_user='repl_user', master_password='password', master_log_file='mysql-bin.152707', master_log_pos= 456;

master_host:來源 Amazon RDS for MySQL 執行個體的端點。
master_user:複寫使用者的名稱 (在步驟 4 中建立)。
master_password:複寫使用者的密碼。
master_log_file:步驟 3 中記錄的 binlog 檔案名稱。(在第 3 步中,範例輸出指示 binlog 檔案名稱為 "mysql-bin-changelog.152707"。)
master_log_pos:第 3 步記錄的 binlog 位置。(在第 3 步中,範例輸出指示 binlog 檔案位置為 "456"。)

10.    登入目標 RDS for MySQL 資料庫執行個體,並使用以下命令開始複寫:

mysql> start slave;

11.  確認複寫在來源 RDS for MySQL 資料庫執行個體和目標 MySQL 資料庫執行個體之間同步:

mysql> show slave status\G

AWS DMS

在使用 AWS Database Migration Service (AWS DMS) 設定複寫之前,請檢查以下資資源:

  • 若要備份 point-in-time 恢復的執行個體,請參閱 binlog 複寫部分中的步驟 1-5。最好是遵循這些步驟,因為自訂開始時間可以是備份保留期內的任何 (過去) 時間點。從目標資料庫執行個體還原備份後,記錄在資料庫恢復過程中產生的檢查點記錄序號 (LSN)。您需要參考該 LSN 來設定變更資料擷取 (CDC) 開始時間。若要取得檢查點 LSN,請在 point-in-time 恢復操作完成後立即查看還原的 RDS MySQL 執行個體的錯誤日誌檔案。例如:
[Note] InnoDB: Log scan progressed past the checkpoint lsn 44326835524
  • 若要從自訂起點啟動 CDC,使用者可以執行 show master status 命令以返回 binlog 檔案名稱、位置和其他幾個值。  如需有關從自訂起點啟動 CDC 的詳細資訊,請參閱從 CDC 起點開始執行複寫
  • 若要了解將 MySQL 資料庫設定為 AWS DMS 複寫來源的先決條件,請參閱使用與 MySQL 相容的資料庫作為 AWS DMS 的來源
  • 若要了解將 MySQL 資料庫設定為 AWS DMS 複寫目標的先決條件,請參閱使用與 MySQL 相容的資料庫作為 AWS Database Migration Service 的目標

  • 此文章是否有幫助?


    您是否需要帳單或技術支援?