使用資料輸入複寫將適用於 MySQL 的 Amazon RDS 移轉至適用於 MySQL 的 Azure 資料庫

適用於:適用於 MySQL 的 Azure 資料庫 - 單一伺服器適用於 MySQL 的 Azure 資料庫 - 彈性伺服器

重要

適用於 MySQL 的 Azure 資料庫單一伺服器位於淘汰路徑上。 強烈建議您升級至適用於 MySQL 的 Azure 資料庫彈性伺服器。 如需移轉至適用於 MySQL 的 Azure 資料庫彈性伺服器的詳細資訊,請參閱適用於 MySQL 的 Azure 資料庫單一伺服器會發生什麼事?

注意

本文包含「從屬」一詞的參考,Microsoft 已不再使用該字詞。 從軟體中移除該字詞時,我們也會將其從本文中移除。

您可以使用 MySQL 傾印和還原、MySQL Workbench 匯出和匯入等方法,或 Azure 資料庫移轉服務,將 MySQL 資料庫移轉至適用於 MySQL 的 Azure 資料庫彈性伺服器。 藉由搭配資料輸入複寫使用 mysqldump 或 mydumper 和 myloader 等開放原始碼工具的組合,您可以透過最短停機來移轉工作負載。

資料輸入複寫是一種技術,可根據二進位記錄檔位置方法,將資料變更從來源伺服器複寫到目的地伺服器。 在此情節中,做為來源 (資料庫變更的來源) 的 MySQL 執行個體,會將更新和變更以「事件」的形式寫入到二進位記錄。 二進位記錄中的資訊會根據所記錄的資料庫變更,以不同的記錄格式儲存。 複本會設定為從來源讀取二進位記錄,並在複本的本地資料庫上執行二進位記錄中的事件。

設定資料輸入複寫,將資料從 MySQL 來源伺服器同步處理至 MySQL 目標伺服器。 您可以選擇性地將應用程式從主要 (或來源資料庫) 完全移轉至複本 (或目標資料庫)。

在本教學課程中,您會了解如何在執行「適用於 MySQL 的 Amazon 關聯式資料庫服務 (RDS)」的來源伺服器,以及執行「適用於 MySQL 的 Azure 資料庫」彈性伺服器的目標伺服器之間,設定資料輸入複寫。

效能考量

開始本教學課程之前,請考慮您將用來執行作業之用戶端電腦位置和容量的效能影響。

用戶端位置

從與資料庫伺服器位於相同位置啟動的用戶端電腦執行傾印或還原作業:

  • 對於適用於 MySQL 的 Azure 資料庫彈性伺服器執行個體,用戶端電腦應該位於與目標資料庫伺服器相同的虛擬網路和可用性區域中。
  • 針對來源 Amazon RDS 資料庫執行個體,用戶端執行個體應該存在於與來源資料庫伺服器相同的 Amazon 虛擬私人雲端和可用性區域中。 在上述案例中,您可以使用 FTP 或 SFTP 之類的檔案傳輸通訊協定,在用戶端機器之間移動傾印檔案,或將其上傳至 Azure Blob 儲存體。 若要減少移轉總時間,請先壓縮檔案再傳輸。

用戶端容量

無論用戶端電腦位於何處,都需要足夠的計算、I/O 和網路容量來執行要求的作業。 一般建議為:

  • 如果傾印或還原牽涉到資料的即時處理,例如壓縮或解壓縮,請選擇每個傾印或還原執行緒至少有一個 CPU 核心的執行個體類別。
  • 請確定用戶端執行個體有足夠的網路頻寬可用。 使用支援加速網路功能的執行個體類型。 如需詳細資訊,請參閱 Azure 虛擬機器網路指南中的「加速網路」一節。
  • 請確定用戶端電腦的儲存層提供預期的讀取/寫入容量。 建議您搭配進階 SSD 儲存體使用 Azure 虛擬機器。

必要條件

若要完成本教學課程,您需要:

  • 在用戶端電腦上安裝 mysqlclient 以建立傾印,並在適用於 MySQL 的 Azure 資料庫目標彈性伺服器執行個體上執行還原作業。

  • 針對較大的資料庫,請安裝 mydumper 和 myloader,以平行傾印和還原資料庫。

    注意

    Mydumper 只能在 Linux 發行版本上執行。 如需詳細資訊,請參閱如何安裝 mydumper

  • 建立適用於 MySQL 的 Azure 資料庫彈性伺服器執行個體,該執行個體執行 5.7 或 8.0 版。

    重要

    如果您的目標是適用於 MySQL 的 Azure 資料庫彈性伺服器,且具有區域備援高可用性 (HA),請注意,此設定不支援資料輸入複寫。 因應措施是,在伺服器建立期間設定區域備援 HA:

    1. 建立已啟用區域備援 HA 的伺服器。
    2. 停用 HA。
    3. 請遵循文章來設定資料輸入複寫。
    4. 完全移轉後移除資料輸入複寫設定。
    5. 啟用 HA。

請確定已如下所述,正確設定數個參數和功能:

  • 基於相容性考慮,請在相同的 MySQL 版本上擁有來源和目標資料庫伺服器。
  • 在每個資料表中都有主索引鍵。 資料表上缺少主索引鍵可能會讓複寫程序變慢。
  • 請確定來源和目標資料庫的字元集是相同的。
  • wait_timeout 參數設定為合理的時間。 時間取決於您要匯入或移轉的資料或工作負載數量。
  • 確認您的所有資料表都使用 InnoDB。 適用於 MySQL 的 Azure 資料庫彈性伺服器僅支援 InnoDB 儲存引擎。
  • 對於具有許多次要索引的資料表或大型資料表,還原期間效能額外負荷的影響很明顯。 修改傾印檔案,讓 CREATE TABLE 陳述式不包含次要索引鍵定義。 匯入資料之後,請重新建立次要索引,以避免在還原程序期間的效能損失。

最後,準備進行資料輸入複寫:

  • 確認適用於 MySQL 的 Azure 資料庫目標彈性伺服器執行個體可以透過連接埠 3306 連線到適用於 MySQL 的 Amazon RDS 來源伺服器。
  • 請確定適用於 MySQL 的 Amazon RDS 來源伺服器允許連接埠 3306 上的輸入和輸出流量。
  • 請務必使用 Azure ExpressRouteAzure VPN 閘道,為來源伺服器提供站對站連線能力。 如需建立虛擬網路的詳細資訊,請參閱 Azure 虛擬網路文件。 另請參閱快速入門文章,其中包含逐步詳細資料。
  • 設定來源資料庫伺服器的網路安全性群組,以允許適用於 MySQL 的 Azure 資料庫目標彈性伺服器 IP 位址。

重要

如果適用於 MySQL 的 Amazon RDS 來源執行個體的 GTID_mode 設為 [開啟],適用於 MySQL 的 Azure 資料庫目標彈性伺服器執行個體也必須將 GTID_mode 設定為 [開啟]。

設定適用於 MySQL 的 Azure 資料庫的目標執行個體

若要設定適用於 MySQL 的 Azure 資料庫目標彈性伺服器執行個體 (這是資料輸入複寫的目標):

  1. max_allowed_packet 參數值設定為上限 1073741824,也就是 1 GB。 這個值可防止與長資料列相關的任何溢位問題。

  2. 在移轉期間,將 slow_query_loggeneral_logaudit_log_enabledquery_store_capture_mode 參數設定為 [關閉],以協助消除與查詢記錄相關的任何額外負荷。

  3. 將適用於 MySQL 的 Azure 資料庫目標彈性伺服器執行個體的計算大小擴大至最多 64 個虛擬核心。 還原來源伺服器的資料庫傾印時,此大小會提供更多計算資源。

    在移轉完成後,您一律可以相應減少計算,以符合應用程式需求。

  4. 相應增加儲存體大小,以在移轉期間取得更多 IOPS,或提高移轉的 IOPS 上限。

    注意

    可用的 IOPS 上限取決於計算大小。 如需詳細資訊,請參閱適用於 MySQL 的 Azure 資料庫彈性伺服器中的計算和儲存體選項中的 IOPS 一節。

設定適用於 MySQL 的 Amazon RDS 來源伺服器

若要準備及設定在 Amazon RDS 裝載中的 MySQL 伺服器 (這是資料輸入複寫的來源):

  1. 確認適用於 MySQL 的 Amazon RDS 來源伺服器上已啟用二進位記錄。 檢查是否已啟用自動備份,或確定適用於 MySQL 的 Amazon RDS 來源伺服器存在讀取複本。

  2. 確定來源伺服器上的二進位記錄檔會保留,直到將變更套用至適用於 MySQL 的 Azure 資料庫目標彈性伺服器執行個體為止。

    使用資料輸入複寫時,適用於 MySQL 的 Azure 資料庫彈性伺服器不會管理複寫程序。

  3. 若要檢查來源 Amazon RDS 伺服器上的二進位記錄保留期,以判斷保留的二進位記錄時數,請呼叫 mysql.rds_show_configuration 預存程序:

    mysql> call mysql.rds_show_configuration;
    +------------------------+-------+-----------------------------------------------------------------------------------------------------------+
    | name | value | description |
    +------------------------+-------+-----------------------------------------------------------------------------------------------------------+
    | binlog retention hours | 24 | binlog retention hours specifies the duration in hours before binary logs are automatically deleted. |
    | source delay | 0 | source delay specifies replication delay in seconds between current instance and its master. |
    | target delay | 0 | target delay specifies replication delay in seconds between current instance and its future read-replica. |
    +------------------------+-------            +-----------------------------------------------------------------------------------------------------------+
    3 rows in set (0.00 sec)
    
  4. 若要設定二進位記錄保留期間,請執行 rds_set_configuration 預存程序,以確保二進位記錄會在來源伺服器上保留所需的時間。 例如:

    Mysql> Call mysql.rds_set_configuration(‘binlog retention hours', 96);
    

    如果您要建立傾印並還原,上述命令可協助您快速趕上差異變更。

    注意

    請確定有足夠的磁碟空間,可根據定義的保留期間,將二進位記錄儲存在來源伺服器上。

有兩種方式可從適用於 MySQL 的 Amazon RDS 來源伺服器擷取資料傾印。 其中一種方法牽涉到直接從來源伺服器擷取資料的傾印。 另一種方法涉及從適用於 MySQL 的 Amazon RDS 讀取複本擷取傾印。

  • 若要直接從來源伺服器擷取資料的傾印:

    1. 請確定您停止來自應用程式的寫入數分鐘,以取得交易一致的資料傾印。

      您也可以暫時將 read_only 參數設定為 1 的值,以便在擷取資料傾印時不會處理寫入。

    2. 在您停止來源伺服器上的寫入之後,請執行命令 Mysql> Show master status; 來收集二進位記錄檔名稱和位移。

    3. 儲存這些值,以從適用於 MySQL 的 Azure 資料庫彈性伺服器執行個體開始複寫。

    4. 若要建立資料的傾印,請執行下列命令來執行 mysqldump

      $ mysqldump -h hostname -u username -p –single-transaction –databases dbnames –order-by-primary> dumpname.sql
      
  • 如果停止來源伺服器上的寫入不是選項,或來源伺服器上無法接受傾印資料的效能,請在複本伺服器上擷取傾印:

    1. 使用與來源伺服器相同的設定建立 Amazon MySQL 讀取複本。 然後在該處建立傾印。

    2. 讓適用於 MySQL 的 Amazon RDS 讀取複本趕上適用於 MySQL 的 Amazon RDS 來源伺服器。

    3. 當複本延遲在讀取複本上達到 0 時,請呼叫預存程序 mysql.rds_stop_replication 來停止複寫。

      Mysql> call mysql.rds_stop_replication;
      
    4. 當複寫停止時,連接到複本。 然後執行 SHOW SLAVE STATUS 命令,從 [Relay_Master_Log_File] 欄位擷取目前的二進位記錄檔檔案名稱,並從 [Exec_Master_Log_Pos] 欄位擷取記錄檔位置。

    5. 儲存這些值,以從適用於 MySQL 的 Azure 資料庫彈性伺服器執行個體開始複寫。

    6. 若要從適用於 MySQL 的 Amazon RDS 讀取複本建立資料的傾印,請執行下列命令來執行 mysqldump

      $ mysqldump -h hostname -u username -p –single-transaction –databases dbnames –order-by-primary> dumpname.sql
      

    注意

    您也可以使用 mydumper,從適用於 MySQL 的 Amazon RDS 來源資料庫擷取資料的平行傾印。 如需詳細資訊,請參閱使用 mydumper/myloader 將大型資料庫移轉至適用於 MySQL 的 Azure 資料庫彈性伺服器

  1. 若要使用 mysql 原生還原來還原資料庫,請執行下列命令:

    $ mysql -h <target_server> -u <targetuser> -p < dumpname.sql
    
  2. 登入適用於 MySQL 的 Amazon RDS 來源伺服器,並設定複寫使用者。 然後將必要的權限授與此使用者。

    • 如果您使用 SSL,請執行下列命令:

      Mysql> CREATE USER 'syncuser'@'%' IDENTIFIED BY 'userpassword';
      Mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'syncuser'@'%' REQUIRE SSL;
      Mysql> SHOW GRANTS FOR syncuser@'%';
      
    • 如果您不是使用 SSL,請執行下列命令:

      Mysql> CREATE USER 'syncuser'@'%' IDENTIFIED BY 'userpassword';
      Mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'syncuser'@'%';
      Mysql> SHOW GRANTS FOR syncuser@'%';
      

    預存程序會執行所有資料輸入複寫函式。 如需所有程序的相關資訊,請參閱資料輸入複寫預存程序。 您可以在 MySQL Shell 或 MySQL Workbench 中執行已儲存的程序。

  3. 若要連結適用於 MySQL 的 Amazon RDS 來源伺服器與適用於 MySQL 的 Azure 資料庫彈性伺服器目標伺服器,請登入適用於 MySQL 的 Azure 資料庫目標彈性伺服器執行個體。 執行下列命令,將適用於 MySQL 的 Amazon RDS 伺服器設定為來源伺服器:

    CALL mysql.az_replication_change_master('source_server','replication_user_name','replication_user_password',3306,'<master_bin_log_file>',master_bin_log_position,'<master_ssl_ca>');
    
  4. 若要啟動適用於 MySQL 的 Amazon RDS 來源伺服器與適用於 MySQL 的 Azure 資料庫目標彈性伺服器執行個體之間的複寫,請執行下列命令:

    Mysql> CALL mysql.az_replication_start;
    
  5. 若要檢查複寫狀態,請在複本伺服器上執行下列命令:

    Mysql> show slave status\G
    

    如果 Slave_IO_RunningSlave_SQL_Running 參數的狀態為 [是],則複寫已啟動且處於執行中狀態。

  6. 檢查 Seconds_Behind_Master 參數的值,以判斷目標伺服器的延遲程度。

    如果值為 0,則目標已處理來自來源伺服器的所有更新。 如果值是 0以外的值,目標伺服器仍會處理更新。

確定成功完全移轉

確定成功完全移轉:

  1. 在適用於 MySQL 的 Azure 資料庫目標彈性伺服器執行個體中設定適當的登入和資料庫等級權限。
  2. 停止對適用於 MySQL 的 Amazon RDS 來源伺服器的寫入。
  3. 確定適用於 MySQL 的 Azure 資料庫目標彈性伺服器執行個體已趕上來源伺服器,且 Seconds_Behind_Master 值為 0 (從 show slave status)。
  4. 呼叫預存程序 mysql.az_replication_stop 以停止複寫,因為所有變更都已複寫到適用於 MySQL 的 Azure 資料庫目標彈性伺服器執行個體。
  5. 呼叫 mysql.az_replication_remove_master 以移除資料輸入複寫設定。
  6. 將用戶端和用戶端應用程式重新導向至適用於 MySQL 的 Azure 資料庫目標彈性伺服器執行個體。

移轉目前已完成。 您的應用程式會連線到執行適用於 MySQL 的 Azure 資料庫彈性伺服器的伺服器。

下一步