將 MySQL 資料庫移轉至 適用於 MySQL 的 Azure 資料庫 - 使用傾印和還原的彈性伺服器

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

重要

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

本文說明兩種常見的方法來備份和還原 適用於 MySQL 的 Azure 資料庫 彈性伺服器中的資料庫。

  • 從命令行傾印和還原 (使用 mysqldump)。
  • 使用 PHPMy 進行傾印和還原 管理員。

您也可以參閱資料庫移轉指南,以取得將資料庫遷移至 適用於 MySQL 的 Azure 資料庫 彈性伺服器的詳細資訊和使用案例。 本指南提供指引,引導 MySQL 移轉至 Azure 的成功規劃和執行。

開始之前

若要逐步執行本操作指南,您必須具備:

提示

如果您想要移轉資料庫大小超過 1 TB 的大型資料庫,建議您考慮使用支援平行匯出和匯入的 mydumper/myloader社群工具。 瞭解如何 移轉大型 MySQL 資料庫

傾印和還原的常見使用案例

最常見的使用案例如下:

  • 從其他受管理服務提供者 移動 - 由於安全性考慮,大部分受控服務提供者可能無法提供實體記憶體檔案的存取權,因此邏輯備份和還原是唯一可移轉的選項。

  • 從內部部署環境或虛擬機移轉 - 適用於 MySQL 的 Azure 資料庫 彈性伺服器不支援還原實體備份,這會讓邏輯備份和還原成為唯一的方法。

  • 將備份記憶體從本地備援移至異地備援記憶體 - 適用於 MySQL 的 Azure 資料庫 彈性伺服器允許在伺服器建立期間設定本地備援或異地備援記憶體進行備份。 伺服器佈建完成之後,就無法變更備份儲存體備援選項。 若要將備份記憶體從本地備援記憶體移至異地備援記憶體,傾印和還原是唯一的選項。

  • 從替代儲存引擎移轉至 InnoDB - 適用於 MySQL 的 Azure 資料庫 彈性伺服器僅支援 InnoDB 儲存體 引擎,因此不支援替代儲存引擎。 如果您的資料表已設定為其他儲存引擎,請在移轉至 適用於 MySQL 的 Azure 資料庫 彈性伺服器之前,將它們轉換成 InnoDB 引擎格式。

    例如,如果您有使用 MyISAM 數據表的 WordPress 或 WebApp,請先將這些數據表移轉至 InnoDB 格式,再還原至 適用於 MySQL 的 Azure 資料庫 彈性伺服器。 使用 子句 ENGINE=InnoDB 來設定建立新數據表時所使用的引擎,然後在還原之前將數據傳送至相容的數據表。

    INSERT INTO innodb_table SELECT * FROM myisam_table ORDER BY primary_key_columns
    

重要

  • 若要避免任何相容性問題,請確定傾印資料庫時,來源和目的地系統上會使用相同的 MySQL 版本。 例如,如果您現有的 MySQL 伺服器是 5.7 版,則您應該移轉至設定為執行 5.7 版的彈性伺服器實例 適用於 MySQL 的 Azure 資料庫。 mysql_upgrade命令無法在 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例中運作,而且不受支援。
  • 如果您需要跨 MySQL 版本升級,請先傾印或匯出您的較低版本資料庫到您自己的環境中較高版本的 MySQL。 然後在嘗試移轉至 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例之前執行mysql_upgrade

效能考量

若要將效能優化,請在傾印大型資料庫時注意這些考慮:

  • exclude-triggers傾印資料庫時,請使用 mysqldump 中的 選項。 從傾印檔案中排除觸發程式,以避免在數據還原期間引發觸發程式命令。
  • single-transaction使用 選項,將交易隔離模式設定為 REPEATABLE READ,並在傾印數據之前將 START TRANSACTION SQL 語句傳送至伺服器。 在單一交易中傾印許多數據表會導致還原期間耗用一些額外的記憶體。 選項 single-transactionlock-tables 選項互斥,因為LOCK TABLES會導致隱含認可任何擱置的交易。 若要傾印大型數據表,請將 選項與 quick 選項結合single-transaction
  • extended-insert使用包含數個 VALUE 清單的多列語法。 這會導致較小的傾印檔案,並在重載檔案時加速插入。
  • order-by-primary傾印資料庫時,請使用 mysqldump 中的 選項,以便以主鍵順序編寫數據腳本。
  • disable-keys在傾印數據時,請使用 mysqldump 中的 選項,在載入之前停用外鍵條件約束。 停用外鍵檢查可提供效能提升。 啟用條件約束,並在載入之後驗證數據,以確保引用完整性。
  • 適當時,請使用數據分割數據表。
  • 平行載入數據。 請避免造成您達到資源限制的平行處理原則太多,並使用 Azure 入口網站 中可用的計量來監視資源。
  • defer-table-indexes傾印資料庫時,請使用 mysqldump 中的 選項,以便在載入數據表數據之後建立索引。
  • 將備份檔複製到 Azure Blob/存放區,然後從該處執行還原,這應該比透過因特網執行還原快很多。

在目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例上建立資料庫

在您要移轉資料的目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例上建立空的資料庫。 使用 MySQL Workbench 或 mysql.exe 之類的工具來建立資料庫。 資料庫的名稱可以與包含傾印數據的資料庫相同,或者您可以建立具有不同名稱的資料庫。

若要連線,請在 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例概觀中找到連線資訊。

Find the connection information in the Azure portal

將連線資訊新增至 MySQL Workbench。

MySQL Workbench Connection String

準備目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例以快速載入數據

若要準備目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例,以加快數據載入的速度,必須變更下列伺服器參數和組態。

  • max_allowed_packet – 設定為 1073741824 (也就是 1 GB),以防止因為數據列很長而發生任何溢位問題。
  • slow_query_log – 設定為 OFF 以關閉慢速查詢記錄。 這可消除數據載入期間查詢記錄緩慢所造成的額外負荷。
  • query_store_capture_mode – 設定為 NONE 以關閉 查詢存放區。 這樣可消除取樣活動所造成的額外負荷,查詢存放區。
  • innodb_buffer_pool_size – 在移轉期間,從入口網站的定價層將伺服器相應增加至 32 個虛擬核心記憶體優化 SKU,以增加innodb_buffer_pool_size。 Innodb_buffer_pool_size只能藉由相應增加 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例的計算來增加。
  • innodb_io_capacity和innodb_io_capacity_max - 從 Azure 入口網站 中的伺服器參數變更為 9000,以改善 IO 使用率,以優化移轉速度。
  • innodb_write_io_threads & innodb_write_io_threads - 從 Azure 入口網站 中的伺服器參數變更為 4,以改善移轉速度。
  • 相應增加 儲存體 層 – 適用於 MySQL 的 Azure 資料庫 彈性伺服器的 IOP 隨著儲存層的增加而逐漸增加。 為了更快載入,您可能會想要增加儲存層,以增加布建的 IOPS。 請記住,記憶體只能相應增加,而不是相應減少。

完成移轉之後,您可以將伺服器參數和計算層組態還原為其先前的值。

使用 mysqldump 公用程序傾印和還原

使用 mysqldump 從命令行建立備份檔

若要在本機內部部署伺服器或虛擬機上備份現有的 MySQL 資料庫,請執行下列命令:

mysqldump --opt -u [uname] -p[pass] [dbname] > [backupfile.sql]

要提供的參數如下:

  • [uname]您的資料庫用戶名稱
  • [pass]資料庫的密碼 (請注意 -p 與密碼之間沒有空白)
  • [dbname]資料庫的名稱
  • [backupfile.sql] 資料庫備份的檔名
  • [--opt]mysqldump 選項

例如,若要使用使用者名稱 'testuser' 在 MySQL 伺服器上備份名為 'testdb' 的資料庫,且沒有檔案testdb_backup.sql 的密碼,請使用下列命令。 命令會將 testdb 資料庫備份到名為 testdb_backup.sql的檔案中,其中包含重新建立資料庫所需的所有 SQL 語句。 請確定使用者名稱 『testuser』 至少有傾印數據表的 SELECT 許可權、傾印檢視的 SHOW VIEW、傾印觸發程式的 TRIGGER,以及 --single-transaction 未使用此選項時 LOCK TABLES。

GRANT SELECT, LOCK TABLES, SHOW VIEW ON *.* TO 'testuser'@'hostname' IDENTIFIED BY 'password';

現在執行 mysqldump 以建立資料庫的備份testdb

mysqldump -u root -p testdb > testdb_backup.sql

若要選取資料庫中要備份的特定數據表,請列出以空格分隔的數據表名稱。 例如,若要只備份 'testdb' 中的 table1 和 table2 數據表,請遵循下列範例:

mysqldump -u root -p testdb table1 table2 > testdb_tables_backup.sql

若要一次備份多個資料庫,請使用 --database 參數並列出以空格分隔的資料庫名稱。

mysqldump -u root -p --databases testdb1 testdb3 testdb5 > testdb135_backup.sql

使用命令行還原 MySQL 資料庫

建立目標資料庫之後,您可以使用 mysql 命令,將數據從傾印檔案還原到特定新建立的資料庫。

mysql -h [hostname] -u [uname] -p[pass] [db_to_restore] < [backupfile.sql]

在此範例中,將數據還原至目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例上新建立的資料庫。

以下是如何使用此 mysql for Single Server範例:

mysql -h mydemoserver.mysql.database.azure.com -u myadmin@mydemoserver -p testdb < testdb_backup.sql

以下是如何針對彈性伺服器使用此 mysql範例:

mysql -h mydemoserver.mysql.database.azure.com -u myadmin -p testdb < testdb_backup.sql

使用 PHPMy 傾印和還原 管理員

請遵循下列步驟,使用 PHPMyadmin 傾印和還原資料庫。

注意

對於單一伺服器,用戶名稱的格式必須是 『username@servername』,但對於彈性伺服器,您可以只使用 『username』。如果您使用彈性伺服器的 'username@servername',連線將會失敗。

使用 PHPMyadmin 導出

若要匯出,您可以使用一般工具 phpMy 管理員,您可能已在本機環境中安裝此工具。 若要使用 PHPMy 匯出 MySQL 資料庫 管理員:

  1. 開啟 phpMy 管理員。
  2. 選取您的資料庫。 在左側清單中選取資料庫名稱。
  3. 選取 [ 匯出] 連結。 新的頁面隨即出現,以檢視資料庫的傾印。
  4. 在 [匯出] 區域中,選取 [ 選] 連結,以選擇資料庫中的數據表。
  5. 在 [SQL 選項] 區域中,選取適當的選項。
  6. 選取 [ 另存新檔 ] 選項和對應的壓縮選項,然後選取 [ 移至 ] 按鈕。 出現對話框,提示您在本機儲存盤案。

使用 PHPMy 匯入 管理員

匯入資料庫類似於匯出。 執行下列動作:

  1. 開啟 phpMy 管理員。
  2. 在 phpMy 管理員 設定頁面中,選取 [新增] 以新增您的 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例。 提供連線詳細數據並登入資訊。
  3. 建立適當的具名資料庫,並在畫面左側加以選取。 若要重寫現有的資料庫,請選取資料庫名稱、選取數據表名稱旁的所有複選框,然後選取 [ 除] 以刪除現有的數據表。
  4. 選取 SQL 連結以顯示您可以在其中輸入 SQL 命令的頁面,或上傳 SQL 檔案。
  5. 使用瀏覽按鈕來尋找資料庫檔案。
  6. 選取 [ 移至 ] 按鈕以匯出備份、執行 SQL 命令,然後重新建立資料庫。

已知問題

如需已知問題、秘訣和訣竅,建議您查看我們的 技術豁免部落格

下一步