我想將 Amazon Relational Database Service (Amazon RDS) for MySQL DB 執行個體複寫到內部部署備用伺服器。
簡短描述
若要將資料從 Amazon RDS for MySQL 資料庫執行個體遷移到內部部署伺服器,請先在 AWS 上建立讀取複本。然後,將複寫目標從 Amazon RDS for MySQL 讀取複本切換到內部部署伺服器。
如果您使用的是全域交易識別碼 (GTID) 型複寫,請參閱使用外部來源執行個體設定二進位日誌檔案位置複寫。
解決方法
建立作用中資料庫執行個體的讀取複本
請完成下列步驟:
-
確認您已為想複寫的作用中資料庫執行個體啟用自動備份。
**注意:**最短備份保留期為 1 天。當您備份資料時,會產生額外的費用。如需詳細資訊,請參閱 Amazon RDS 定價。
-
使用相同的組態建立作用中資料庫執行個體的讀取複本。
-
登入讀取複本資料庫執行個體。
-
執行下列命令,確認讀取複本資料庫執行個體與您的作用中資料庫執行個體相符。
對於 MySQL 8.0.23 及更新版本:
mysql> show replica status \G
對於 MySQL 8.0.23 之前的版本:
mysql> show slave status \G
**注意:**如果複本執行個體沒有落後於資料庫執行個體,Seconds_Behind_Master 參數顯示為 0。
-
執行以下命令以在讀取複本資料庫執行個體上停止複寫:
mysql> call mysql.rds_stop_replication;
-
若要記錄 -log_file 和 -log_position 參數,請在讀取複本資料庫執行個體上執行下列命令。
對於 MySQL 8.0.23 及更新版本:
mysql> show replica status \G
對於 MySQL 8.0.23 之前的版本:
mysql> show slave status \G
注意:****-log_file 是 relay_source_log_file 的值,-log_position 是 exec_source_log_pos 的值。
建立讀取複本資料庫執行個體的傾印檔案
請完成下列步驟:
-
在 mysqldump 用戶端或類似公用程式中執行以下命令,以建立讀取複本資料庫執行個體的備份:
mysqldump -h hostname -u username -p dbname > backup_file_name.sql
-
登入您的內部部署伺服器,然後將傾印檔案傳輸到伺服器。
將傾印檔案還原到新的資料庫執行個體
請完成下列步驟:
-
在內部部署伺服器上建立新的外部資料庫執行個體。
-
執行以下命令,將傾印檔案還原到新的外部資料庫執行個體:
mysql -h hostname -u username -p dbname < backup_file_name.sql
-
登入您的作用中資料庫執行個體。
-
執行以下命令以設定複寫使用者,並授予該使用者必要的權限:
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@'%';
**注意:**將 repl_user 替換為您的複寫使用者名稱。
-
登入新的外部資料庫執行個體,然後停止內部部署伺服器。
-
修改 my.cnf 檔案參數,使其指向您想複寫的唯一伺服器 ID 和資料庫名稱。例如,server_id=2 和 replicate-do-db=test。
-
儲存檔案。
-
重新啟動本地伺服器。
確認新的外部資料庫執行個體可以連線到作用中資料庫執行個體
如果您使用 Amazon Elastic Compute Cloud (Amazon EC2) 作為外部 MySQL 執行個體,請更新您的執行個體以允許來自安全群組的連線。或者,允許來自作用中資料庫執行個體安全群組中 IP 位址的連線。如果您使用外部 MySQL 伺服器,請執行 telnet 來測試連線。如需詳細資訊,請參閱為什麼我無法連線到 Amazon RDS 資料庫執行個體?
請完成下列步驟:
- 若要變更複本伺服器用於連線來源的參數,請在新的外部資料庫執行個體上執行下列命令。
對於 MySQL 8.0.23 及更新版本:
mysql> change replication source to source_host='rds-endpoint', source_user='repl_user', source_password='password', source_log_file='mysql-bin.000001', source_log_pos=107;
對於 MySQL 8.0.23 之前的版本:
mysql> change master to master_host='rds-endpoint', master_user='repl_user', master_password='password', master_log_file='mysql-bin.000001', master_log_pos=107;
**注意:**將 rds-endpoint 替換為您作用中資料庫執行個體的端點。使用將傾印檔案還原到新資料庫時所建立的使用者名稱和密碼。將 relay_source_file 和 exec_source_log_pos 值替換為讀取複本的 -log_file 和 -log_position 值。
- 確認內部部署伺服器可以連線到您的作用中資料庫執行個體。
開始複寫
請完成下列步驟:
-
登入內部部署伺服器。
-
執行以下命令以開始複寫:
對於 MySQL 8.0.23 及更新版本:
mysql> start replica;
對於 MySQL 8.0.23 之前的版本:
mysql> start slave;
-
執行下列命令,以檢查作用中資料庫執行個體和內部部署伺服器之間的複寫是否同步:
對於 MySQL 8.0.23 及更新版本:
mysql> show replica status\G
對於 MySQL 8.0.23 之前的版本:
mysql> show slave status\G
-
當 Seconds_Behind_Master 參數等於 0 時,刪除讀取複本資料庫執行個體。
相關資訊
如何使用 AWS DMS 遷移到 Amazon RDS 或 Amazon Aurora 資料庫執行個體?
使用複寫從 MySQL 資料庫執行個體匯出資料
Aurora 與 MySQL 之間,或 Aurora 與另一個 Aurora 資料庫叢集之間的複寫 (二進位日誌複寫)