使用傾印和還原來將 MySQL 資料庫移轉至適用於 MySQL 的 Azure 資料庫 - 彈性伺服器
適用於:適用於 MySQL 的 Azure 資料庫 - 單一伺服器適用於 MySQL 的 Azure 資料庫 - 彈性伺服器
重要
適用於 MySQL 的 Azure 資料庫單一伺服器位於淘汰路徑上。 強烈建議您升級至適用於 MySQL 的 Azure 資料庫彈性伺服器。 如需移轉至適用於 MySQL 的 Azure 資料庫彈性伺服器詳細資訊,請參閱適用於 MySQL 的 Azure 資料庫單一伺服器發生什麼事?
本文說明在 適用於 MySQL 的 Azure 資料庫 彈性伺服器中備份和還原資料庫的兩種常見方式。
- 從命令列進行傾印和還原 (使用 mysqldump)。
- 使用 phpMyAdmin 進行傾印和還原。
您也可以參閱資料庫移轉指南,以取得將資料庫遷移至 適用於 MySQL 的 Azure 資料庫 彈性伺服器的詳細資訊和使用案例。 此指南中提供的指引可引導您成功規劃及執行將 MySQL 移轉至 Azure 的作業。
開始之前
若要逐步執行本作法指南,您需要具備:
- 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例 - Azure 入口網站
- 已安裝於電腦上的 mysqldump 命令列公用程式。
- MySQL Workbench 或其他用來執行傾印和還原命令的第三方 MySQL 工具。
提示
如果您想要移轉大型資料庫 (資料庫大小超過 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
。
效能考量
若要最佳化效能,請在傾印大型資料庫時注意這些考量:
- 傾印資料庫時在 mysqldump 中使用
exclude-triggers
選項。 從傾印檔案排除觸發程序以避免在資料還原期間引發觸發程序命令。 - 使用
single-transaction
選項將交易隔離模式設為 REPEATABLE READ,然後在傾印資料之前,將 START TRANSACTION 的 SQL 陳述式傳送到伺服器。 在單一交易中傾印許多資料表會導致在還原期間耗用某些額外的儲存體。single-transaction
選項和lock-tables
選項是互斥的,因為 LOCK TABLES 會導致隱含認可任何暫止交易。 若要傾印大型資料表,請結合single-transaction
選項與quick
選項。 - 使用包含數個 VALUE 清單的
extended-insert
多個資料列語法。 這會產生較小的傾印檔案,並在重新載入檔案時加速插入。 - 傾印資料庫時在 mysqldump 中使用
order-by-primary
選項,以便將資料以主索引鍵的順序編寫指令碼。 - 傾印資料時在 mysqldump 中使用
disable-keys
選項,以在載入之前停用外部索引鍵限制式。 停用外部索引鍵檢查會提供效能提升。 啟用限制式並且確認載入之後的資料,以確保參考完整性。 - 適當時使用資料分割資料表。
- 平行載入資料。 避免會導致您達到資源限制的太多平行處理原則,以及使用 Azure 入口網站中可用的計量監視資源。
- 傾印資料庫時在 mysqldump 中使用
defer-table-indexes
選項,以便在載入資料表資料之後建立索引。 - 請將備份檔案複製到 Azure blob/存放區,並從該處執行還原,這樣應該會比在網際網路上執行還原更快。
在目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例上建立資料庫
在您要移轉資料的目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例上建立空的資料庫。 使用 MySQL Workbench 或 mysql.exe 之類的工具來建立資料庫。 資料庫名稱可以與包含傾印資料的資料庫名稱相同,或者您可以建立名稱不同的資料庫。
若要連線,請在 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例概觀中找到連線資訊。
將連線資訊新增至 MySQL Workbench。
準備目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例以快速載入數據
若要準備目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例以加快數據載入的速度,必須變更下列伺服器參數和組態。
- max_allowed_packet – 設為 1073741824 (也就是 1GB),以防止因為長資料列而造成任何溢位問題。
- slow_query_log – 設定為 [關閉],以關閉慢速查詢記錄。 這可排除在資料載入期間因慢速查詢記錄而造成的額外負荷。
- query_store_capture_mode - 設定為 NONE,以關閉查詢存放區。 這可排除查詢存放區取樣活動所造成的額外負荷。
- innodb_buffer_pool_size – 在移轉期間,從入口網站的定價層將伺服器擴大至 32 vCore 記憶體最佳化 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 選項
例如,若要將 MySQL 伺服器上使用者名稱為 'testuser' 且無密碼之名為 '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 用於單一伺服器的範例:
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
注意
使用 PHPMyAdmin 傾印和還原
依照下列步驟,使用 PHPMyadmin 來傾印和還原資料庫。
注意
對於單一伺服器,使用者名稱的格式必須是 'username@servername',但對於彈性伺服器,則可以直接使用 'username'。如果對彈性伺服器使用 'username@servername',連線將會失敗。
使用 PHPMyadmin 匯出
若要匯出,您可以使用一般工具 phpMyAdmin,而您可能已在環境中本機安裝此工具。 使用 PHPMyAdmin 匯出 MySQL 資料庫:
- 開啟 phpMyAdmin。
- 選取您的資料庫。 選取左邊清單中的資料庫名稱。
- 選取 [匯出] 連結。 新的分頁隨即出現,以供檢視資料庫的傾印。
- 在 [匯出] 區域中,選取 [全選] 連結來選擇資料庫中的資料表。
- 在 [SQL 選項] 區域中,選取適當的選項。
- 依序選取 [另存新檔] 和對應的壓縮選項,然後選取 [執行] 按鈕。 接著應該會出現一個對話方塊,提示您在本機儲存檔案。
使用 PHPMyAdmin 匯入
匯入資料庫的程序與匯出類似。 執行下列動作:
- 開啟 phpMyAdmin。
- 在 phpMyAdmin 設定頁面中,選取 [新增] 以新增 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例。 提供連線詳細資料和登入資訊。
- 建立已適當命名的資料庫,然後在畫面左邊選取它。 若要重寫現有的資料庫,請選取資料庫名稱、選取資料表名稱旁的所有核取方塊,然後選取 [卸除] 以刪除現有的資料表。
- 選取 SQL 連結,以顯示您可以在其中輸入 SQL 命令或上傳 SQL 檔案的分頁。
- 您可以使用瀏覽按鈕來尋找資料庫檔案。
- 選取 [執行] 按鈕以匯出備份、執行 SQL 命令,並重新建立您的資料庫。
已知問題
如需已知問題、秘訣與技巧,建議您查看我們的技術社群部落格 \(英文\)。
下一步
- 將應用程式連線到 適用於 MySQL 的 Azure 資料庫彈性伺服器。
- 如需將資料庫移轉至適用於 MySQL 的 Azure 資料庫彈性伺服器的詳細資訊,請參閱資料庫移轉指南。
- 如果您想要移轉大型資料庫 (超過 1 TB 大小的資料庫),您可以考慮使用可支援平行匯出和匯入的社群工具,例如 mydumper/myloader。 了解如何移轉大型 MySQL 資料庫。