數據遷移對於將 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 工具執行相同的動作,請將 CA 根憑證下載至 c:\temp (請建立此目錄)。
注意
憑證可能會變更。 如需最新的憑證詳細資訊,請參閱在您的應用程式中設定 SSL 連線能力,以安全地連線至適用於 MySQL 的 Azure 資料庫。
在命令提示字元中執行下列命令 (請務必更新權杖):
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\_capacity和innodb\_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 連線對話方塊隨即顯示。
選取 [檔案]->[開啟 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 資料庫的作業!