Share via


移轉 適用於 MySQL 的 Azure 資料庫 - 使用 適用於 MySQL 的 Azure 資料庫 匯入 CLI 將單一伺服器遷移至彈性伺服器

適用於: 適用於 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 從 Single 複製到彈性伺服器實例。

適用於 MySQL 的 Azure 資料庫 匯入 CLI 先執行離線匯入作業,支援近乎零的停機時間移轉,因此使用者可以設定來源與目標之間的數據輸入複寫,以執行在線移轉。

本教學課程示範如何使用 適用於 MySQL 的 Azure 資料庫 Import CLI 命令,將 適用於 MySQL 的 Azure 資料庫 單一伺服器移轉至彈性伺服器。

新功能

  • 適用於 MySQL 的 Azure 資料庫 現在支援使用舊版 儲存體 架構的單一伺服器匯入作業(一般用途記憶體 V1)。 在起始匯入作業之前,您必須為具有舊版 儲存體 的單一伺服器實例設定參數 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 輸出中的標識碼值,以做為命令中訂閱自變數的值。 如果您有多個訂用帳戶,請選擇來源 適用於 MySQL 的 Azure 資料庫 - 單一伺服器所在的適當訂用帳戶。 若要取得您的所有訂用帳戶,請使用 az account list

az account set --subscription <subscription id>

限制和必要條件

  • 如果您的來源 適用於 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 資料庫 Import 命令會要求您提供強制輸入參數,以便在目標彈性伺服器上啟用 CMK。

  • 如果單一伺服器實例已啟用「基礎結構雙重加密」,建議在目標彈性伺服器實例上啟用客戶自控密鑰(CMK),以支援類似的功能。 您也可以選擇在目標伺服器上啟用 CMK,適用於 MySQL 的 Azure 資料庫 匯入 CLI 輸入參數或移轉後。

  • 如果單一伺服器實例已啟用「查詢存放區」,建議在目標彈性伺服器實例上啟用慢速查詢記錄,以支持類似的功能。 您可以依照這裡的步驟,在目標彈性伺服器上設定慢速查詢記錄。 接著,您可以使用活頁簿範本來檢視查詢深入解析

  • 如果您的單一伺服器實例具有舊版 儲存體 架構(一般用途記憶體 V1),您必須先為單一伺服器實例設定參數 log_bin=ON,再起始匯入作業。 若要這樣做,請為您的單一伺服器實例建立讀取複本,然後加以刪除。 此作業會將參數log_bin設定為 ON,然後您可以觸發匯入作業以移轉至彈性伺服器。

  • 如果您的單一伺服器實例有引擎 8.0 版,請考慮執行下列動作,以避免由於單一和彈性伺服器實例之間的社群次要版本差異而發生任何重大變更:

    • 執行下列語句來檢查您的實例是否可能受到錯誤直方圖信息的影響。 如果對應的數據表是輸出,建議您參考刪除 https://dev.mysql.com/blog-archive/histogram-statistics-in-mysql/ 直方圖資訊,然後在彈性伺服器上重新建立。 值得注意的是,直方圖 inf' 只是數據行的統計數據,而且此資訊只存在於系統數據表中,因此刪除直方圖資訊不會影響數據表數據。

          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』 的單一伺服器的數據源資訊,並以彈性伺服器資訊為目標,在位置中建立名為 test-flexible-serverwestus 的目標彈性伺服器(與來源單一伺服器的位置相同),並執行從來源匯入目標。 Azure Database MySQL 匯入命令會對應至對應層、版本、sku 名稱、記憶體大小、位置、異地備援備份、公開存取、卷標、自動成長、備份保留天數、系統管理員使用者和系統管理密碼屬性,如果 CLI 命令沒有提供任何輸入,則以智慧型預設值的形式對應至彈性伺服器。 您可以選擇藉由提供這些選擇性參數的輸入來覆寫智慧型預設值。

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』 的單一伺服器的數據源資訊,並以彈性伺服器資訊為目標,在位置中建立名為 的目標彈性伺服器test-flexible-serverwestus(與來源單一伺服器的位置相同),並啟用區域備援和虛擬網路整合,並執行從來源到目標匯入。 在這裡深入瞭解虛擬網路組態

# 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"

下列範例會採用已啟用客戶管理密鑰的單一伺服器的數據源資訊,並將目標設為彈性伺服器資訊、建立名為 test-flexible-server 的目標彈性伺服器,並執行從來源匯入至目標的目標彈性伺服器。 針對啟用 CMK 的單一伺服器實例,適用於 MySQL 的 Azure 資料庫 Import 命令會要求您提供強制輸入參數來啟用 CMK :-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 資料庫 單一伺服器。
數據源 test-single-server 來源的名稱或資源標識碼 適用於 MySQL 的 Azure 資料庫 單一伺服器。
資源群組 test-rg 來源的 Azure 資源群組名稱 適用於 MySQL 的 Azure 資料庫 單一伺服器。
mode 離線 匯入 適用於 MySQL 的 Azure 資料庫 模式。 接受的值:[脫機];默認值:離線。
location westus 來源的 Azure 位置 適用於 MySQL 的 Azure 資料庫 單一伺服器。
NAME test-flexible-server 輸入目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器的唯一名稱。 伺服器名稱只能包含小寫字母、數字及連字號 (-) 字元。 此名稱必須包含 3 到 63 個字元。 注意:此伺服器部署在與來源相同的訂用帳戶、資源群組和區域中。
admin-user adminuser 目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器之系統管理員登入的用戶名稱。 它不能 azure_superuser系統管理員系統管理員目錄、 來賓公用
admin-password password 目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器的系統管理員用戶密碼。 它必須包含介於8到128個字元之間。 您的密碼必須包含來自三個類別的字元:英文大寫字母、英文小寫字母、數位和非虛構字元。
sku-name GP_Gen5_2 輸入目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器定價層和計算組態的名稱。 遵循簡短形式的慣例 {pricing tier}{compute generation}{vCores}。 如需詳細資訊,請參閱定價層
階層 可高載 目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器的計算層。 接受的值:高載、GeneralPurpose、MemoryOptimized;默認值:可高載。
public-access 0.0.0.0 決定目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器的公用存取權。 輸入要包含在允許IP清單中的單一或IP位址範圍。 IP 位址範圍必須以虛線分隔,且不包含任何空格。 指定 0.0.0.0 允許從 Azure 內部署的任何資源進行公用存取,以存取您的伺服器。 將它設定為 「None」 會以公用存取模式設定伺服器,但不會建立防火牆規則。
vNet myVnet 新或現有虛擬網路的名稱或標識碼。 如果您想要使用來自不同資源群組或訂用帳戶的 vnet,請提供資源識別碼。 名稱必須介於 2 到 64 個字元之間。 名稱的開頭必須是字母或數位、以字母、數位或底線結尾,而且只能包含字母、數位、底線、句號或連字元。
子網路 mySubnet 新或現有子網的名稱或資源標識碼。 如果您想要使用來自不同資源群組或訂用帳戶的子網,請提供資源識別碼,而不是名稱。 請注意,子網將會委派給彈性伺服器。 委派之後,此子網無法用於任何其他類型的 Azure 資源。
private-dns-zone myserver.private.contoso.com 新或現有私人 DNS 區域的名稱或標識碼。 您可以使用來自相同資源群組、不同資源群組或不同訂用帳戶的私人 DNS 區域。 如果您想要使用來自不同資源群組或訂用帳戶的區域,請提供資源識別符。 如果使用者未提供,CLI 會在與虛擬網路相同的資源群組內建立新的私人 DNS 區域。
索引鍵 testKey 的金鑰標識碼 數據加密之主要金鑰保存庫金鑰的資源識別碼。
identity testIdentity 用於數據加密之使用者指派身分識別的名稱或資源識別碼。
storage-size 32 目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器的儲存容量。 最小值為 20 GiB,最大值為 16 TiB。
標記 key=value 提供 Azure 資源群組的名稱。
version 5.7 目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器的伺服器主要版本。
高可用性 ZoneRedundant 啟用 (ZoneRedundant 或 SameZone)或停用目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器的高可用性功能。 接受的值:Disabled、SameZone、ZoneRedundant;預設值:已停用。
區域 1 要在其中布建資源的可用性區域。
待命區域 3 啟用高可用性時待命伺服器的可用性區域資訊。
storage-auto-grow 已啟用 啟用或停用目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器的記憶體自動成長。 預設值為 Enabled。 接受的值:Disabled、Enabled;預設值:已啟用。
iops 500 要配置給目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器的 IOPS 數目。 您會根據布建的計算和記憶體,取得一定數量的免費 IOPS。 IOPS 的預設值為免費的 IOPS。 若要深入瞭解以計算和記憶體為基礎的 IOPS,請參閱彈性伺服器中的 IOPS 適用於 MySQL 的 Azure 資料庫。

在線移轉的步驟

完成上述 適用於 MySQL 的 Azure 資料庫 匯入作業之後:

  • 登入目標 適用於 MySQL 的 Azure 資料庫 彈性伺服器並執行下列命令,以取得對應至 適用於 MySQL 的 Azure 資料庫 匯入 CLI 還原至目標伺服器的備份快照集的 bin-log 檔檔名和位置。
CALL mysql.az_show_binlog_file_and_pos_for_mysql_import();
  • 依照此處所列的步驟,設定來源和目標伺服器實例之間的數據輸入複寫,以及復寫狀態反映目標伺服器已趕上來源、停止複寫並執行完全移轉。

設定 適用於 MySQL 的 Azure 資料庫 匯入 CLI 命令參數的最佳做法

在觸發 適用於 MySQL 的 Azure 資料庫 匯入 CLI 命令之前,請考慮下列參數設定指引,以協助確保使用 適用於 MySQL 的 Azure 資料庫 匯入 CLI 加快數據載入速度。

  • 如果您想要覆寫智慧型手機預設值,請根據下表中的詳細數據,選取目標彈性伺服器的計算層和 SKU 名稱。

    單一伺服器定價層 單一伺服器虛擬核心 彈性伺服器層 彈性伺服器 SKU 名稱
    基本 1 可高載 Standard_B1s
    基本 2 可高載 Standard_B2s
    一般用途 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),以支援類似的功能。 您也可以選擇在目標伺服器上啟用 CMK,適用於 MySQL 的 Azure 資料庫 匯入 CLI 輸入參數或移轉後。

匯入 適用於 MySQL 的 Azure 資料庫 移轉我的單一伺服器實例需要多久時間?

以下是以記憶體大小為基礎的效能評定。

單一伺服器 儲存體 大小 匯入時間
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 腳本,都應該使用彈性伺服器參考來更新。

下一步