你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure Database for MySQL 导入 CLI 将 MySQL 本地或虚拟机 (VM) 工作负载迁移到 Azure Database for MySQL 灵活服务器

借助用于外部迁移的 Azure Database for MySQL 导入,可以将 MySQL 本地或虚拟机 (VM) 工作负载无缝迁移到 Azure Database for MySQL 灵活服务器。 它使用用户提供的物理备份文件,将源服务器的物理数据文件还原到目标服务器,提供简单、快速的迁移路径。 在执行导入操作之后,可以利用灵活服务器的优势,包括更好的性价比、对数据库配置的精细控制以及自定义维护时段。

根据用户输入,它负责预配目标灵活服务器,然后将存储在 Azure Blob 存储帐户中的用户提供的源服务器物理备份还原到目标灵活服务器实例。

本教程介绍如何使用 Azure Database for MySQL 导入 CLI 命令将 MySQL 本地或虚拟机 (VM) 工作负载迁移到 Azure Database for MySQL 灵活服务器。

启动 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 帐户的订阅 ID。

az login

使用 az account set 命令在你的帐户下选择要在其中部署目标灵活服务器的特定订阅。 请注意将 az login 输出中的 ID 值用作命令中 subscription 参数的值。 若要获取所有订阅,请使用 az account list

az account set --subscription <subscription id>

先决条件

  • 源服务器应具有以下参数:
    • Lower_case_table_names = 1
    • Innodb_file_per_table = ON
    • 系统表空间名称应为 ibdata1。
    • 系统表空间大小应大于或等于 12 MB。 (MySQL 默认值)
    • Innodb_page_size = 16348(MySQL 默认值)
    • 仅支持 INNODB 引擎。
  • 使用 Percona XtraBackup 对 MySQL 工作负荷进行物理备份。 以下是使用 Percona XtraBackup 执行完整备份的步骤:
    • 在本地或 VM 工作负载上安装 Percona XtraBackup。 对于 MySQL 引擎版本 v5.7,请安装 Percona XtraBackup 版本 2.4(参阅安装 Percona XtraBackup 2.4)。 对于 MySQL 引擎版本 v8.0,请安装 Percona XtraBackup 版本 8.0(参阅安装 Percona XtraBackup 8.0)。
    • 有关使用 Percona XtraBackup 2.4 执行完整备份的说明,请参阅完整备份。 有关使用 Percona XtraBackup 8.0 执行完整备份的说明,请参阅[完整备份] (https://docs.percona.com/percona-xtrabackup/8.0/create-full-backup.html)。 执行完整备份时,请按顺序运行以下命令:
      • - xtrabackup --backup --host={host} --user={user} --password={password} --target-dir={backup__dir_path}
      • - xtrabackup --prepare --{backup_dir_path}(在此处提供与上述命令中相同的备份路径)
    • 获取 Percona XtraBackup 时的注意事项:
      • 请确保运行备份和准备步骤。
      • 请确保备份和准备步骤中没有错误。
      • 请保留 Azure 支持所需的备份和准备步骤日志,发生故障时需要它。
  • 创建 Azure Blob 容器并获取容器的共享访问签名 (SAS) 令牌(Azure 门户Azure CLI)。 确保在“权限”下拉列表中授予“添加”、“创建”和“写入”权限。 请将 Blob SAS 令牌和 URL 值复制并粘贴到安全的位置。 这些信息只会显示一次,窗口关闭后就无法检索。
  • 将 {backup_dir_path} 上的完整备份文件上传到 Azure Blob 存储。 按照这些步骤上传文件
  • 若要执行联机迁移,请通过运行 cat xtrabackup_info 命令并复制 bin_log pos 输出来捕获和存储使用 Percona XtraBackup 获取的备份文件的 bin-log 位置。
  • 应该可以使用 SAS 令牌公开访问 Azure 存储帐户。 不支持具有虚拟网络配置的 Azure 存储帐户。

限制

  • 未迁移源服务器配置。 必须对目标灵活服务器进行适当配置。
  • 不支持迁移加密备份。
  • 用户和权限不会作为 Azure Database for MySQL 导入的一部分进行迁移。 在启动 Azure Database for MySQL 导入之前,必须先手动转储用户和权限,以便在执行导入操作后通过在目标灵活服务器上还原登录信息来对其进行迁移。
    • 无法迁移 user1@localhost,因为我们不支持在灵活服务器中创建 localhost 用户。
  • 启用高可用性 (HA) 的灵活服务器作为禁用 HA 的服务器返回,以提高导入迁移后迁移操作的速度。 在迁移后为目标灵活服务器启用 HA。

实现最佳迁移体验的建议

  • 请考虑将 Azure Blob 存储帐户和要部署的目标灵活服务器保留在同一区域中,以提高导入性能。
  • 目标 Azure Database for MySQL 灵活服务器的建议 SKU 配置
    • 建议不要为目标设置可突发 SKU,以便在运行 Azure Database for MySQL 导入操作时优化迁移时间。 建议在导入操作、后期过程中缩放到“常规用途”/“业务关键”(可以将其纵向缩减为可突发 SKU)。

触发 Azure Database for MySQL 导入操作,以便从 Azure Database for MySQL 灵活服务器迁移

使用 az mysql flexible-server import create 命令触发 Azure Database for MySQL 导入操作。 以下命令会创建一个目标灵活服务器,并使用 Azure CLI 本地上下文执行从备份文件到目标的实例级导入:

az mysql flexible-server import create --data-source-type
                                --data-source
                                --data-source-sas-token
                                --resource-group
                                --name
                                --sku-name
                                --tier
                                --version
                                --location
                                [--data-source-backup-dir]
                                [--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]
                                [--private-dns-zone]
                                [--public-access]
                                [--resource-group]
                                [--standby-zone]
                                [--storage-auto-grow {Disabled, Enabled}]
                                [--subnet]
                                [--subnet-prefixes]
                                [--tags]
                                [--vnet]
                                [--zone]

The following example takes in the data source information for your source MySQL server's backup file and target Flexible Server information, creates a target Flexible Server named `test-flexible-server` in the `westus` location and performs an import from backup file to target.

azurecli-interactive
az mysql flexible-server import create --data-source-type "azure_blob" --data-source "https://onprembackup.blob.core.windows.net/onprembackup" --data-source-backup-dir "mysql_backup_percona" –-data-source-token "{sas-token}" --resource-group "test-rg"  --name "test-flexible-server" –-sku-name Standard_D2ds_v4  --tier GeneralPurpose –-version 5.7 -–location "westus"

下面是上述参数的详细信息:

设置 示例值 说明
data-source-type azure_blob 用作触发 Azure Database for MySQL 导入操作的源目标的数据源类型。 接受的值:[azure_blob]。 接受的值的说明 - azure_blob:Azure Blob 存储。
data-source {resourceID} Azure Blob 容器的资源 ID。
data-source-backup-dir mysql_percona_backup 在其中上传备份文件的 Azure Blob 存储容器的目录。 仅当备份文件未存储在 Azure Blob 容器的根文件夹中时,才需要此值。
data-source-sas-token {sas-token} 为授予从 Azure Blob 存储容器导入的访问权限而生成的共享访问签名 (SAS) 令牌。
resource-group test-rg 目标 Azure Database for MySQL 灵活服务器的 Azure 资源组的名称。
mode 离线 Azure Database for MySQL 导入模式。 接受的值:[脱机];默认值:脱机。
location westus 源 Azure Database for MySQL 灵活服务器的 Azure 位置。
name test-flexible-server 输入目标 Azure Database for MySQL 灵活服务器的唯一名称。 服务器名称只能包含小写字母、数字和连字符 (-) 字符。 必须包含 3 到 63 个字符。 注意:此服务器与源部署在相同的订阅、资源组和区域中。
admin-user adminuser 目标 Azure Database for MySQL 灵活服务器的管理员登录用户名。 它不能为“azure_superuser”、“admin”、“administrator”、“root”、“guest”或“public” 。
admin-password password 目标 Azure Database for MySQL 灵活服务器的管理员用户密码。 该密码必须包含 8 到 128 个字符。 密码必须含以下字符类别中的三类:英文大写字母、英文小写字母、数字和非字母数字字符。
sku-name GP_Gen5_2 输入目标 Azure Database for MySQL 灵活服务器的定价层和计算配置的名称。 请遵循简写约定 {pricing tier} {compute generation} {vCores}。 有关详细信息,请参阅定价层
可突发 目标 Azure Database for MySQL 灵活服务器的计算层。 接受的值:可突发、常用用途、内存优化;默认值:可突发。
public-access 0.0.0.0 确定目标 Azure Database for MySQL 灵活服务器的公共访问权限。 输入要包含在 IP 允许列表中的单个或一系列 IP 地址。 IP 地址范围必须用短划线分隔,并且不包含任何空格。 如果指定 0.0.0.0,则允许从 Azure 中部署的任何资源进行公共访问来访问服务器。 如果将其设置为“无”,则会将服务器设置为公共访问模式,但不创建防火墙规则。
虚拟网络 myVNet 新的或现有的虚拟网络的名称或 ID。 如果要使用不同资源组或订阅中的虚拟网络,请提供资源 ID。 名称必须包含 2 到 64 个字符。 该名称必须以字母或数字开头,以字母、数字或下划线结尾,并且只能包含字母、数字、下划线、句点或连字符。
subnet mySubnet 新的或现有的子网的名称或资源 ID。 如果要使用不同资源组或订阅中的子网,请提供资源 ID 而不是名称。 子网委托给 flexibleServer。 进行委托后,此子网不能用于任何其他类型的 Azure 资源。
private-dns-zone myserver.private.contoso.com 新的或现有的专用 DNS 区域的名称或 ID。 可以使用同一资源组、不同资源组或不同订阅中的专用 DNS 区域。 如果要使用不同资源组或订阅中的区域,请提供资源 ID。 如果用户未提供专用 DNS 区域,CLI 会在虚拟网络所在的资源组中新建一个该区域。
key testKey 的密钥标识符 用于数据加密的主密钥库密钥的资源 ID。
identity testIdentity 用于数据加密的用户分配的标识的名称或资源 ID。
storage-size 32 目标 Azure Database for MySQL 灵活服务器的存储容量。 最小值为 20 GiB,最大值为 16 TiB。
标记 key=value 提供 Azure 资源组的名称。
版本 5.7 目标 Azure Database for MySQL 灵活服务器的服务器主版本。
高可用性 ZoneRedundant 启用(ZoneRedundant 或 SameZone)或禁用目标 Azure Database for MySQL 灵活服务器的高可用性功能。 接受的值:已禁用、同区域、区域冗余;默认值:已禁用。
区域 1 要在其中预配资源的可用性区域。
standby-zone 3 启用高可用性时备用服务器的可用性区域信息。
storage-auto-grow 已启用 启用或禁用目标 Azure Database for MySQL 灵活服务器的存储自动增长。 默认值为“已启用”。 接受的值:已禁用、已启用;默认值:已启用。
iops 500 要为目标 Azure Database for MySQL 灵活服务器分配的 IOPS 数目。 根据预配的计算和存储,可以获得一定数量的空闲 IOPS。 IOPS 的默认值为“空闲 IOPS”。 若要详细了解基于计算和存储的 IOPS,请参阅“Azure Database for MySQL 灵活服务器中的 IOPS”。

以最短的停机时间迁移到灵活服务器

要在使用 Azure Database for MySQL 导入从备份文件完成初始种子设定后执行联机迁移,可以按照此处的步骤配置源和目标之间的数据传入复制。 可以使用在使用 Percona XtraBackup 获取备份文件时捕获的 bin-log 位置来设置基于 Bin-log 位置的复制。

Azure Database for MySQL 导入迁移 MySQL 实例需要多长时间?

基于存储大小的基准性能。

备份文件存储大小 导入时间
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 秒

随着存储大小的增加,数据复制所需的时间也会增加,几乎呈线性相关。 但是,请务必注意,网络波动可能会显著影响复制速度。 因此,此处提供的数据应仅作为参考。

下一步