使用適用於 MySQL 的 Azure 資料庫匯入 CLI,將適用於 MySQL 的 Azure 資料庫單一伺服器移轉至彈性伺服器
適用於: 適用於 MySQL 的 Azure 資料庫 - 單一伺服器
適用於 MySQL 的 Azure 資料庫匯入 CLI (正式推出) 可讓您將適用於 MySQL 的 Azure 資料庫單一伺服器順暢地移轉至彈性伺服器。 其使用快照集備份和還原技術,提供簡單且快速的移轉路徑,將來源伺服器的實體資料檔案還原至目標伺服器。 匯入作業之後,您可以利用彈性伺服器的優點,包括更好的價格與效能、對資料庫設定的細微控制,以及自訂維護時段。
根據使用者輸入,它會負責佈建目標彈性伺服器,然後進行來源伺服器的備份並還原目標。 它會將資料檔案、伺服器參數、相容的防火牆規則以及伺服器屬性 (tier、version、sku-name、storage-size、location、geo-redundant-backup、public-access、tags、auto grow、backup-retention-days、admin-user 和 admin-password) 從單一伺服器執行個體複製到彈性伺服器執行個體。
適用於 MySQL 的 Azure 資料庫匯入 CLI 支援近乎零停機的移轉,它會先執行離線匯入作業,之後使用者就可以設定來源與目標之間的資料輸入複寫,以執行線上移轉。
本教學課程說明如何使用適用於 MySQL 的 Azure 資料庫匯入 CLI 命令,將適用於 MySQL 的 Azure 資料庫單一伺服器移轉至彈性伺服器。
新功能
- 現在支援對具有舊版儲存體架構 (一般用途儲存體 V1) 的單一伺服器執行適用於 MySQL 的 Azure 資料庫匯入作業。 在起始匯入作業之前,您必須為具有舊版記憶體的單一伺服器執行個體設定參數 log_bin=ON。 若要這樣做,請為您的單一伺服器執行個體建立讀取複本,然後加以刪除。 此作業會將參數 log_bin 設定為 ON,然後您可以觸發匯入作業以移轉至彈性伺服器。 (2024 年 2 月)
啟動 Azure Cloud Shell
Azure Cloud Shell 是免費的互動式 Shell,可讓您用來執行本文中的步驟。 它具有預先安裝和設定的共用 Azure 工具,可與您的帳戶搭配使用。
若要開啟 Cloud Shell,請選取程式碼區塊右上角的 [試試看]。 您也可以移至 https://shell.azure.com/bash,從另一個瀏覽器索引標籤開啟 Cloud Shell。 選取 [複製] 即可複製程式碼區塊,將它貼到 Cloud Shell 中,然後選取 Enter 鍵加以執行。
如果您偏好在本機安裝和使用 CLI,在進行本教學課程時將需要 Azure CLI 2.54.0 版或更新版本。 執行 az --version
以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI。
設定
您必須使用 az sign-in 命令登入帳戶。 記下 id 屬性,這是指您 Azure 帳戶的訂閱識別碼。
az login
使用 az account set 命令,在您的帳戶底下選取適用於 MySQL 的 Azure 資料庫來源單一伺服器所在的特定訂閱。 記下 az login 輸出中的 id 值,以作為命令中 subscription 引數的值。 如果您有多個訂閱,請選擇適用於 MySQL 的 Azure 資料庫來源單一伺服器所在的適當訂閱。 若要取得您的所有訂用帳戶,請使用 az account list。
az account set --subscription <subscription id>
限制和必要條件
如果您適用於 MySQL 的 Azure 資料庫的來源單一伺服器上有基本 SKU,請考慮將匯入命令中的 SKU 指定為一般用途,以減輕任何記憶體不足的問題。 在移轉後,您可以將 SKU 變更回已移轉彈性伺服器執行個體上的高載 SKU。
如果適用於 MySQL 的 Azure 資料庫來源單一伺服器的引擎版本為 v8.x,請務必將來源伺服器的 .NET 用戶端驅動程式版本升級至 8.0.32,以避免移轉至彈性伺服器之後發生任何編碼不相容的問題。
適用於 MySQL 的 Azure 資料庫來源單一伺服器和適用於 MySQL 的 Azure 資料庫目標彈性伺服器必須位於相同的訂閱、資源群組、區域中,並使用相同的 MySQL 版本。 無法跨訂閱、資源群組、區域和版本匯入。
適用於 MySQL 的 Azure 資料庫匯入 CLI 支援的 MySQL 版本為 5.7 和 8.0。 如果您在單一伺服器上使用不同的主要 MySQL 版本,請務必先升級單一伺服器執行個體上的版本,再觸發匯入命令。
如果將適用於 MySQL 的 Azure 資料庫單一伺服器執行個體的伺服器參數 'lower_case_table_names' 設定為 2,且您的應用程式已使用分割區資料表,則匯入作業會導致分割區資料表損毀。 建議將適用於 MySQL 的 Azure 資料庫單一伺服器執行個體的 'lower_case_table_names' 設定為 1,以便繼續進行 MySQL 匯入作業而不會發生損毀。
不支援匯入至現有的 Azure MySQL 彈性伺服器。 CLI 命令會起始新 Azure MySQL 彈性伺服器的匯入。
如果在更新 CLI 命令參數時將目標彈性伺服器佈建為非 HA (高可用性已停用),則稍後可切換至相同區域 HA,但無法切換至區域備援 HA。
針對已啟用 CMK 的單一伺服器執行個體,適用於 MySQL 的 Azure 資料庫匯入命令會要求您提供強制輸入參數,以便在目標彈性伺服器上啟用 CMK。
如果單一伺服器執行個體已啟用 [基礎結構雙重加密],建議在目標彈性伺服器執行個體上啟用客戶自控金鑰 (CMK),以支援類似功能。 您也可以選擇使用適用於 MySQL 的 Azure 資料庫匯入 CLI 輸入參數或在目標伺服器上啟用 CMK,或在移轉後進行。
如果單一伺服器執行個體已啟用 [查詢存放區],建議在目標彈性伺服器執行個體上啟用慢速查詢記錄,以支援類似功能。 您可以依照這裡的步驟,在目標彈性伺服器上設定慢速查詢記錄。 然後,您可以使用活頁簿範本來檢視查詢深入解析。
使用虛擬網路 (VNet) 和適用於 MySQL 的 Azure 資料庫匯入 CLI 時的重要考慮事項:避免在 VNet 上進行並行作業:當您執行匯入作業時,請避免在同一個 VNet 上執行任何其他作業。 如果有其他作業正在進行,請等到它們完全完成後,再開始匯入作業。 這是為了避免潛在的衝突或資源爭用。 - 限制同時移轉伺服器:如果您打算移轉位於相同 VNet 下的多個伺服器,請不要同時移轉。 這樣做可能會導致 VNet 中的作業遭到封鎖,造成等候時間延長,甚至逾時。
如果您的單一伺服器執行個體具有舊版記憶體架構 (一般用途記憶體 V1),您必須先為單一伺服器執行個體設定參數 log_bin=ON,再起始匯入作業。 若要這樣做,請為您的單一伺服器執行個體建立讀取複本,然後加以刪除。 此作業會將參數 log_bin 設定為 ON,然後您可以觸發匯入作業以移轉至彈性伺服器。
如果您的單一伺服器執行個體已啟用進階威脅防護,您必須在移轉後的彈性伺服器執行個體上啟用進階威脅防護,方法是遵循以下步驟 [這裡] (/azure/mysql/flexible-server/advanced-threat-protection-setting?view=azure-cli-latest)。
如果您的單一伺服器執行個體有引擎 8.0 版,請考慮執行下列動作,以避免由於單一和彈性伺服器執行個體之間的社群次要版本差異而發生任何重大變更:
執行下列陳述式來檢查您的執行個體是否可能受到錯誤直方圖資訊的影響。 如果對應的資料表是輸出,建議您參考 https://dev.mysql.com/blog-archive/histogram-statistics-in-mysql/ 來刪除直方圖資訊,然後在彈性伺服器上重新建立。 值得注意的是,直方圖資訊只是資料行的統計資料,而且此資訊只存在於系統資料表中,因此刪除直方圖資訊不會影響資料表資料。
SELECT DISTINCT SCHEMA_NAME, TABLE_NAME FROM `information_schema`.`column_statistics`;
執行下列命令,以檢查是否有可能具有其資料表資料行順序的資料表已重新組織。 如果這項檢查識別任何受影響的資料表,您需要傾印這些資料表中的所有資料,然後將其匯回。 如果沒有這麼做,可能會導致 binlog 中的資料行順序不符合使用者資料表中的資料行序列。 這種差異可防止使用者設定複寫、還原資料、啟用高可用性 (HA) 和其他作業。
SELECT table_schema, table_name, COUNT(*) AS column_count, MAX(ORDINAL_POSITION) AS max_ordinal_position FROM information_schema.columns GROUP BY table_schema, table_name HAVING column_count != max_ordinal_position;
僅支援執行個體層級匯入。 未提供在執行個體內匯入所選資料庫的選項。
在匯入作業之後,使用者應該將下列項目從來源複製到目標:
- 讀取複本
- 監視頁面設定 (警示、計量和診斷設定)
- 您裝載以管理單一伺服器執行個體的任何 Terraform/CLI 指令碼,都應該使用彈性伺服器參考進行更新
觸發適用於 MySQL 的 Azure 資料庫匯入作業,從適用於 MySQL 的 Azure 資料庫單一伺服器移轉至彈性伺服器
使用 az mysql flexible-server import create
命令觸發適用於 MySQL 的 Azure 資料庫匯入作業。 下列命令會建立目標彈性伺服器,並使用服務預設值和 Azure CLI 本機內容中的值,執行從來源到目標目的地的執行個體層級匯入:
az mysql flexible-server import create --data-source-type
--data-source
--resource-group
--name
[--sku-name]
[--tier]
[--version]
[--storage-size]
[--mode]
[--admin-password]
[--admin-user]
[--auto-scale-iops {Disabled, Enabled}]
[--backup-identity]
[--backup-key]
[--backup-retention]
[--database-name]
[--geo-redundant-backup {Disabled, Enabled}]
[--high-availability {Disabled, SameZone, ZoneRedundant}]
[--identity]
[--iops]
[--key]
[--location]
[--private-dns-zone]
[--public-access]
[--resource-group]
[--standby-zone]
[--storage-auto-grow {Disabled, Enabled}]
[--subnet]
[--subnet-prefixes]
[--tags]
[--vnet]
[--zone]
下列範例會擷取名為 'test-single-server' 之單一伺服器的資料來源資訊以及目標彈性伺服器資訊,在 westus
位置 (與來源單一伺服器相同的位置) 建立名為 test-flexible-server
的目標彈性伺服器,然後從來源執行匯入至目標。 如果沒有為 CLI 命令提供任何輸入,則 Azure 資料庫 MySQL 匯入命令會將對應的 tier、version、sku-name、storage-size、location、geo-redundant-backup、public-access、tags、auto grow、backup-retention-days、admin-user 和 admin-password 屬性以智慧型預設值的形式從單一伺服器對應至彈性伺服器。 您可以選擇藉由提供這些選擇性參數的輸入來覆寫智慧型預設值。
az mysql flexible-server import create --data-source-type "mysql_single" --data-source "test-single-server" --resource-group "test-rg" --name "test-flexible-server"
下列範例會擷取名為 'test-single-server' 之單一伺服器的資料來源資訊以及目標彈性伺服器資訊,在已啟用區域備援和虛擬網路整合的 westus
位置 (與來源單一伺服器相同的位置) 建立名為 test-flexible-server
的目標彈性伺服器,然後從來源執行匯入至目標。 若要深入了解虛擬網路設定,請參閱這裡。
# create vnet
az network vnet create --resource-group testGroup --name myVnet --location testLocation --address-prefixes 172.0.0.0/16
# create subnet
az network vnet subnet create --resource-group testGroup --vnet-name myVnet --address-prefixes 172.0.0.0/24 --name mySubnet
# create private dns zone
az network private-dns zone create -g testGroup -n myserver.private.contoso.com
# trigger mysql import
az mysql flexible-server import create --data-source-type "mysql_single" --data-source "test-single-server" --resource-group "test-rg" --name "test-flexible-server" --high-availability ZoneRedundant --zone 1 --standby-zone 3 --vnet "myVnet" --subnet "mySubnet" --private-dns-zone "myserver.private.contoso.com"
下列範例會擷取已啟用客戶自控金鑰 (CMK) 名為 'test-single-server' 之單一伺服器的資料來源資訊以及目標彈性伺服器資訊,建立名為 test-flexible-server
的目標彈性伺服器,然後從來源執行匯入至目標。 針對已啟用 CMK 的單一伺服器執行個體,適用於 MySQL 的 Azure 資料庫匯入命令會要求您提供強制輸入參數,以便啟用 CMK: --key keyIdentifierOfTestKey --identity testIdentity。
# create keyvault
az keyvault create -g testGroup -n testVault --location testLocation \
--enable-purge-protection true
# create key in keyvault and save its key identifier
keyIdentifier=$(az keyvault key create --name testKey -p software \
--vault-name testVault --query key.kid -o tsv)
# create identity and save its principalId
identityPrincipalId=$(az identity create -g testGroup --name testIdentity \
--location testLocation --query principalId -o tsv)
# add testIdentity as an access policy with key permissions 'Wrap Key', 'Unwrap Key', 'Get' and 'List' inside testVault
az keyvault set-policy -g testGroup -n testVault --object-id $identityPrincipalId \
--key-permissions wrapKey unwrapKey get list
# trigger azure database for mysql import for CMK enabled single server
az mysql flexible-server import create --data-source-type "mysql_single" --data-source "test-single-server" --resource-group "test-rg" --name "test-flexible-server" --key $keyIdentifier --identity testIdentity
上述引數的詳細資料如下:
設定 | 範例值 | 說明 |
---|---|---|
data-source-type | mysql_single | 作為觸發適用於 MySQL 的 Azure 資料庫匯入來源目的地的資料來源類型。 接受的值: [mysql_single]。 接受的值 mysql_single 的描述: 適用於 MySQL 的 Azure 資料庫單一伺服器。 |
data-source | test-single-server | 適用於 MySQL 的 Azure 資料庫來源單一伺服器的名稱或資源識別碼。 |
資源群組 | test-rg | 適用於 MySQL 的 Azure 資料庫來源單一伺服器的 Azure 資源群組名稱。 |
mode | 離線 | 適用於 MySQL 的 Azure 資料庫匯入的模式。 接受的值: [Offline]; 預設值: Offline。 |
location | westus | 適用於 MySQL 的 Azure 資料庫來源單一伺服器的 Azure 位置。 |
NAME | test-flexible-server | 輸入適用於 MySQL 的 Azure 資料庫目標彈性伺服器的唯一名稱。 伺服器名稱只能包含小寫字母、數字及連字號 (-) 字元。 此名稱必須包含 3 到 63 個字元。 注意: 此伺服器部署在與來源相同的訂閱、資源群組和區域中。 |
admin-user | adminuser | 適用於 MySQL 的 Azure 資料庫目標彈性伺服器的系統管理員登入使用者名稱。 此名稱不得為 azure_superuser、admin、administrator、root、guest 或 public。 |
admin-password | password | 適用於 MySQL 的 Azure 資料庫目標彈性伺服器的系統管理員使用者密碼。 其必須包含 8 到 128 個字元。 您的密碼必須包含下列三個類別的字元: 英文大寫字母、英文小寫字母、數字與非英數字元。 |
sku-name | GP_Gen5_2 | 輸入適用於 MySQL 的 Azure 資料庫目標彈性伺服器的定價層和計算設定名稱。 遵循簡短形式的慣例 {pricing tier}{compute generation}{vCores}。 如需詳細資訊,請參閱定價層。 |
階層 | 可高載 | 適用於 MySQL 的 Azure 資料庫目標彈性伺服器的計算層。 接受的值: Burstable、GeneralPurpose、MemoryOptimized; 預設值: Burstable。 |
public-access | 0.0.0.0 | 決定適用於 MySQL 的 Azure 資料庫目標彈性伺服器的公用存取。 輸入要包含在允許 IP 清單中的單一 IP 位址或 IP 位址範圍。 IP 位址範圍必須以虛線分隔,且不包含任何空格。 指定 0.0.0.0 允許從 Azure 內部署的任何資源進行公用存取,以存取您的伺服器。 將其設定為 [無] 會以公用存取模式設定伺服器,但不會建立防火牆規則。 |
vNet | myVnet | 新的或現有虛擬網路的名稱或識別碼。 如果您想要使用來自不同資源群組或訂閱的虛擬網路,請提供資源識別碼。 此名稱的長度必須介於 2 到 64 個字元之間。 名稱必須以字母或數字開頭,以字母、數字或底線結尾,而且只能包含字母、數字、底線、句號或連字符。 |
子網路 | mySubnet | 新的或現有子網路的名稱或資源識別碼。 如果您想要使用來自不同資源群組或訂閱的子網路,請提供資源識別碼,而不是名稱。 子網路將會委派給 flexibleServers。 委派之後,此子網路無法用於任何其他類型的 Azure 資源。 |
private-dns-zone | myserver.private.contoso.com | 新的或現有私人 DNS 區域的名稱或識別碼。 您可以使用來自相同資源群組、不同資源群組或不同訂閱的私人 DNS 區域。 如果您想要使用來自不同資源群組或訂用帳戶的區域,請提供資源識別碼。 如果使用者未提供,CLI 會在與虛擬網路相同的資源群組內建立新的私人 DNS 區域。 |
key | testKey 的金鑰識別碼 | 資料加密之主要金鑰保存庫金鑰的資源識別碼。 |
身分 | testIdentity | 用於資料加密之使用者指派身分識別的名稱或資源識別碼。 |
storage-size | 32 | 適用於 MySQL 的 Azure 資料庫目標彈性伺服器的儲存體容量。 最小值為 20 GiB,最大值為 16 TiB。 |
標記 | key=value | 提供 Azure 資源群組的名稱。 |
version | 5.7 | 適用於 MySQL 的 Azure 資料庫目標彈性伺服器的伺服器主要版本。 |
high-availability | ZoneRedundant | 啟用 (ZoneRedundant 或 SameZone) 或停用適用於 MySQL 的 Azure 資料庫目標彈性伺服器的高可用性功能。 接受的值: Disabled、SameZone、ZoneRedundant; 預設值: Disabled。 |
區域 | 1 | 要在其中佈建資源的可用性區域。 |
standby-zone | 3 | 啟用高可用性時待命伺服器的可用性區域資訊。 |
storage-auto-grow | 已啟用 | 啟用或停用適用於 MySQL 的 Azure 資料庫目標彈性伺服器的儲存體自動成長。 預設值為 Enabled。 接受的值: Disabled、Enabled; 預設值: Enabled。 |
iops | 500 | 要配置給適用於 MySQL 的 Azure 資料庫目標彈性伺服器的 IOPS 數目。 您會根據佈建的計算和儲存體,取得一定數量的免費 IOPS。 IOPS 的預設值是免費的 IOPS。 若要深入了解以計算和儲存體為基礎的 IOPS,請參閱<適用於 MySQL 的 Azure 資料庫彈性伺服器中的 IOPS>。 |
線上移轉步驟
完成上述適用於 MySQL 的 Azure 資料庫匯入作業之後:
- 登入適用於 MySQL 的 Azure 資料庫目標彈性伺服器並執行下列命令,以取得對應至適用於 MySQL 的 Azure 資料庫匯入 CLI 用來還原至目標伺服器之備份快照集的 bin-log filename 和 position。
CALL mysql.az_show_binlog_file_and_pos_for_mysql_import();
- 依照這裡所列的步驟,使用 bin-log position 設定來源與目標伺服器執行個體之間的資料輸入複寫,然後在複寫狀態反映目標伺服器已趕上來源時,停止複寫並執行完全移轉。
設定適用於 MySQL 的 Azure 資料庫匯入 CLI 命令參數的最佳做法
在觸發適用於 MySQL 的 Azure 資料庫匯入 CLI 命令之前,請考慮下列參數設定指引,以協助確保使用適用於 MySQL 的 Azure 資料庫匯入 CLI 更快速地載入資料。
如果您想要覆寫智慧型手機預設值,請依據來源單一伺服器的定價層和 VCores (依據下表中的詳細資料) 選取目標彈性伺服器的計算層和 SKU 名稱。
單一伺服器定價層 單一伺服器虛擬核心 彈性伺服器層 彈性伺服器 SKU 名稱 基本 1 可高載 Standard_B2ms 基本 2 可高載 Standard_B2ms 一般用途 4 GeneralPurpose 標準 D4ds_v4 一般用途 8 GeneralPurpose 標準 D8ds_v4 一般用途 16 GeneralPurpose Standard_D16ds_v4 一般用途 32 GeneralPurpose Standard_D32ds_v4 一般用途 64 GeneralPurpose Standard_D64ds_v4 記憶體最佳化 4 MemoryOptimized Standard_E4ds_v4 記憶體最佳化 8 MemoryOptimized Standard_E8ds_v4 記憶體最佳化 16 MemoryOptimized Standard_E16ds_v4 記憶體最佳化 32 MemoryOptimized Standard_E32ds_v4 目標彈性伺服器的 MySQL 版本、區域、訂閱和資源必須與來源單一伺服器相同。
目標彈性伺服器的儲存體大小應該等於或大於來源單一伺服器。
如果單一伺服器執行個體已啟用 [基礎結構雙重加密],建議在目標彈性伺服器執行個體上啟用客戶自控金鑰 (CMK),以支援類似功能。 您也可以選擇使用適用於 MySQL 的 Azure 資料庫匯入 CLI 輸入參數在目標伺服器上啟用 CMK,或在移轉後進行。
適用於 MySQL 的 Azure 資料庫匯入需要多久時間才能移轉單一伺服器執行個體?
以下是以一般用途 V2 儲存體架構的儲存空間大小為基礎的基準效能。 (具有一般用途 V1 記憶體的伺服器需要較長的時間才能移轉,因為它也涉及升級儲存空間架構)
單一伺服器儲存體大小 | 匯入時間 |
---|---|
1 GiB | 0 分 23 秒 |
10 GiB | 4 分 24 秒 |
100 GiB | 10 分 29 秒 |
500 GiB | 13 分 15 秒 |
1 TB | 22 分 56 秒 |
10 TB | 2 小時 5 分 30 秒 |
由上表得知,隨著儲存體大小增加,資料複製所需的時間也會增加,幾乎是線性關聯性。 不過請務必注意,複製速度可能會受到網路波動的劇烈影響。 因此,此處提供的資料應該僅作為參考。
以下是根據 10 GiB 儲存體大小的不同資料表數目進行的效能評定。
單一伺服器執行個體中的資料表數目 | 匯入時間 |
---|---|
100 | 4 分 24 秒 |
200 | 4 分 40 秒 |
800 | 4 分 52 秒 |
14,400 | 17 分 41 秒 |
28,800 | 19 分 18 秒 |
38,400 | 22 分 50 秒 |
隨著檔案數目的增加,資料庫中的每個檔案/資料表可能會變得非常小。 這會導致傳輸的資料量一致,但會有較頻繁的檔案相關作業,可能會影響適用於 Mysql 的 Azure 資料庫匯入效能。
匯入後步驟
- 成功完成適用於 MySQL 的 Azure 資料庫匯入作業之後,請將下列屬性從來源單一伺服器複製到目標彈性伺服器:
- 讀取複本
- event_scheduler 的伺服器參數值
- 監視頁面設定 (警示、計量和診斷設定)
- 您裝載以管理單一伺服器執行個體的任何 Terraform/CLI 指令碼,都應該使用彈性伺服器參考進行更新。