共用方式為


將內部部署的 MySQL 移轉至適用於 MySQL 的 Azure 資料庫:使用 MySQL Workbench 進行資料移轉

數據遷移對於將 MySQL 資料庫從內部部署環境移至 適用於 MySQL 的 Azure 資料庫 至關重要。 本文著重於使用 MySQL Workbench,這是簡化移轉的強大工具。 藉由使用 MySQL Workbench,您可以有效率地傳輸數據,同時將停機時間降到最低,並確保數據完整性。 本指南會逐步引導您完成使用 MySQL Workbench 設定和執行數據遷移的逐步程式,並醒目提示要避免的最佳做法和潛在陷阱。 無論您是經驗豐富的資料庫管理員或資料庫移轉新手,本文都提供達成順暢且成功移轉至 Azure 所需的深入解析和技術。

必要條件

將 MySQL 內部部署移轉至 適用於 MySQL 的 Azure 資料庫:資料遷移

設定

依照設定指南中的所有步驟建立環境,以支援下列步驟。

設定伺服器參數 (來源)

根據您選擇的移轉類型(離線),您想要評估是否要修改伺服器參數以支援資料的快速輸出。 如果您在線上執行作業,可能不需要對伺服器參數執行任何動作,因為您可能會執行 binlog 複寫並自行同步處理數據。 不過,如果您要進行離線移轉,一旦您停止應用程式流量,就可以將伺服器參數從支援工作負載切換為支持導出。

設定伺服器參數 (目標)

開始對適用於 MySQL 的 Azure 資料庫進行匯入之前,請先檢閱伺服器參數。 您可以使用 Azure 入口網站來擷取及設定伺服器參數,或呼叫 Azure PowerShell for MySQL cmdlets 以進行變更。

執行下列 PowerShell 指令碼以取得所有參數:

\[Net.ServicePointManager\]::SecurityProtocol = \[Net.SecurityProtocolType\]::Tls
12

Install-Module -Name Az.MySql
Connect-AzAccount
$rgName = "{RESOURCE\_GROUP\_NAME}";
$serverName = "{SERVER\_NAME}";
Get-AzMySqlConfiguration -ResourceGroupName $rgName -ServerName $serverName
mysql --host {servername}.mysql.database.azure.com --database mysql --user
{u sername}@{servername} -p --ssl-ca=c:\\temp\\BaltimoreCyberTrustRoot.crt.cer
-A -e "SHOW GLOBAL VARIABLES;" \> c:\\temp\\settings\_azure.txt

在新的 'settings_azure.txt' 檔案中,您可以看到預設的適用於 MySQL 的 Azure 資料庫伺服器參數,如附錄所示。

若要支援移轉,請設定目標 MySQL 執行個體參數,以實現更快速的輸入。 開始進行資料移轉之前,應先設定下列伺服器參數:

  • max\_allowed\_packet – 將參數設定為 1073741824 (也就是 1 GB) 或資料庫中的資料列大小上限,以避免因資料列較長而發生任何溢位問題。 如果有大型的 BLOB 資料列需要提取 (或讀取),請考慮調整此參數。

  • innodb\_buffer\_pool\_size – 在移轉期間,從入口網站的定價層將伺服器擴大至 32 虛擬核心記憶體最佳化 SKU,以提高 innodb_buffer_pool_size。 Innodb_buffer_pool_size 只能藉由擴大適用於 MySQL 的 Azure 資料庫伺服器的計算來增加。 參考適用於 MySQL 的 Azure 資料庫中的伺服器參數,以取得階層的最大值。 記憶體最佳化 32 虛擬核心系統中的最大值為 132070244352

  • innodb\_io\_capacityinnodb\_io\_capacity\_max - 將參數變更為 9000 以改善 IO 使用率以針對移轉速度進行最佳化。

  • max\_connections - 如果使用會產生多個執行緒的工具來增加輸送量,請增加連線以支援該工具。 預設值為 151,最大值為 5000

    注意

    執行調整時請多加留意。 某些作業是無法復原的,例如儲存體調整。

您可以使用下列 Azure PowerShell Cmdlet 來更新這些設定:

Install-Module -Name Az.MySql
$rgName = " {RESOURCE\_GROUP\_NAME}";
$serverName = "{SERVER\_NAME}";

Select-AzSubscription -Subscription "{SUBSCRIPTION\_ID}"
Update-AzMySqlConfiguration -Name max\_allowed\_packet -ResourceGroupName
$rgna me -ServerName $serverName -Value 1073741824
Update-AzMySqlConfiguration -Name innodb\_buffer\_pool\_size -ResourceGroupName
$rgname -ServerName $serverName -Value 16106127360
Update-AzMySqlConfiguration -Name innodb\_io\_capacity -ResourceGroupName
$rgna me -ServerName $serverName -Value 9000
Update-AzMySqlConfiguration -Name innodb\_io\_capacity\_max -ResourceGroupName
$ rgname -ServerName $serverName -Value 9000

\#required if You've functions

Update-AzMySqlConfiguration -Name log\_bin\_trust\_function\_creators
-ResourceGr oupName $rgname -ServerName $serverName -Value ON

資料

工具選擇

移轉來源系統的資料庫物件和使用者之後,即可開始移轉。 在 MySQL 8.0 版上執行的資料庫,無法使用 Azure DMS 來移轉工作負載。 相反地,移轉使用者應使用 MySQL Workbench。

手動匯入和匯出步驟

  • 開啟 MySQL Workbench,並以本機資料庫的根使用者身分連線。

  • 在 **[管理]** 底下,選取 **[資料匯出]**。 選取 reg_app 結構描述。

  • 在 [要匯出的物件] 中選取 [傾印預存程序和函式]、[傾印事件] 和 [傾印觸發程序]

  • 在 [匯出選項] 底下,選取 [匯出至獨立檔案]

  • 此外,請選取 [包含建立結構描述] 核取方塊。 請參閱下圖,以觀察正確的 mysqldump 設定。

    包含建立架構的螢幕快照。

    Test

  • 若有其中任何選項顯得無法使用,有可能是受到 [輸出] 窗格的阻礙。 只要變更編輯器配置即可。

    編輯器版面配置的螢幕快照。

    Test

  • 選取 [匯出進度] 索引標籤。

  • 選取 [開始匯出],並留意 MySQL Workbench 會呼叫 mysqldump 工具。

  • 開啟新建立的匯出指令碼。

  • 尋找任何 DEFINER 陳述式,並變更為有效的使用者,或將其完全移除。

注意

此動作可以透過在 mysqldump 命令中傳入 --skip-definer 來完成。 這並非 MySQL Workbench 中的選項;因此,這幾行必須在匯出命令中手動移除。 雖然我們在此僅指出四個要移除的項目,但在從一個 MySQL 版本移轉至另一個版本時,可能有其他項目會失敗 (例如,新的保留字)。

  • 尋找 SET GLOBAL 陳述式,並變更為有效的使用者,或將其完全移除。

  • 確定 sql\_mode 未設定為 NO\_AUTO\_CREATE\_USER

  • 移除 hello\_world 函式。

  • 在 MySQL Workbench 中,建立適用於 MySQL 的 Azure 資料庫的新連線。

    • 針對 [主機名稱],輸入完整的伺服器 DNS (例如 servername.mysql.database.azure.com)。

    • 輸入使用者名稱 (例如 sqlroot@servername)。

    • 選取 [SSL] 索引標籤。

    • 針對 SSL CA 檔案,瀏覽至 BaltimoreCyberTrustRoot.crt.cer 金鑰檔案。

    • 選取 [測試連線],確定連線已完成。

    • 選取 [確定]。

      MySQL 連線對話框的螢幕快照。

      MySQL 連線對話方塊隨即顯示。

  • 選取 [檔案]->[開啟 SQL 指令碼]

  • 瀏覽至傾印檔案,選取 [開啟]

  • 選取 [執行]。

更新應用程式以支援 SSL

  • 在 Visual Studio Code 中切換至 Java Server API。

  • 開啟 launch.json 檔案。

  • DB_CONNECTION_URL 更新為 jdbc:mysql://serverDNSname:3306/reg\_app?useUnicode=true\&useJDBCCompliantT imezoneShift=true\&useLegacyDatetimeCode=false\&serverTimezone=UTC\&verifySe rverCertificate=true\&useSSL=true\&requireSSL=true\&noAccessToProcedureBodie s=true.。記下其他 SSL 參數。

  • DB_USER_NAME 更新為 conferenceuser@servername

  • 啟動偵錯設定,並確定應用程式可在本機與新的資料庫搭配運作。

還原伺服器參數

在適用於 MySQL 的 Azure 資料庫目標執行個體上,可以變更下列參數。 這些參數可透過 Azure 入口網站來設定,或使用 Azure PowerShell for MySQL Cmdlet 來設定。

$rgName = "YourRGName";
$serverName = "servername";
Update-AzMySqlConfiguration -Name max\_allowed\_packet -ResourceGroupName
$rgna me -ServerName $serverName -Value 536870912
Update-AzMySqlConfiguration -Name innodb\_buffer\_pool\_size -ResourceGroupName
$rgname -ServerName $serverName -Value 16106127360
Update-AzMySqlConfiguration -Name innodb\_io\_capacity -ResourceGroupName $rgna
me -ServerName $serverName -Value 200
Update-AzMySqlConfiguration -Name innodb\_io\_capacity\_max -ResourceGroupName
$ rgname -ServerName $serverName -Value 2000

變更 Java API 的連接字串

  • 使用下列命令變更 App Service Java API 的連接字串
$rgName = "YourRGName";
$app_name = "servername";
az webapp config appsettings set -g $rgName -n $app_name
--settings DB_CONNECTION_URL={DB_CONNECTION_URL}

注意

請記住,您可以使用入口網站來設定連接字串。

  • 重新啟動 App Service API
az webapp restart -g $rgName -n $app\_name

您已順利完成從內部部署移轉至適用於 MySQL 的 Azure 資料庫的作業!

後續步驟