先决条件(脱机)
在使用 Azure Database for PostgreSQL 中的迁移服务开始迁移之前,必须满足以下适用于脱机迁移方案的先决条件。
验证源版本
源 PostgreSQL 版本应该为 >= 9.5
。 如果源 PostgreSQL 版本低于 9.5
,请在迁移之前将源 PostgreSQL 版本升级到 9.5
或更高版本。
目标设置
在开始迁移过程之前,必须在 Azure 中部署并正确配置 Azure Database for PostgreSQL 灵活服务器。
为 Azure Database for PostgreSQL 选择的 SKU 应与源数据库的规范相对应,以确保兼容性和足够的性能。
有关创建新 Azure Database for PostgreSQL 的详细说明,请参阅以下链接:快速入门:创建服务器。
网络设置
网络设置对于迁移服务正常运行至关重要。 确保源 PostgreSQL 服务器可与目标 Azure Database for PostgreSQL 服务器通信。 以下网络配置对于成功迁移至关重要。
有关网络设置的信息,请访问迁移服务的网络指南。
启用扩展
要确保使用 Azure Database for PostgreSQL 中的迁移服务成功进行迁移,可能需要验证源 PostgreSQL 实例的扩展。 扩展提供了应用程序可能需要的功能和特征。 在启动迁移过程之前,请确保验证源 PostgreSQL 实例上的扩展。
在 Azure Database for PostgreSQL 灵活服务器的目标实例中,启用在源 PostgreSQL 实例中标识的受支持的扩展。
有关详细信息,请参阅 Azure Database for PostgreSQL 中的扩展。
注意
只要更改 shared_preload_libraries
参数,就需要重启。
检查服务器参数
这些参数不会自动迁移到目标环境,必须手动进行配置。
在目标中禁用高可用性(可靠性)和只读副本
开始使用
如果你不熟悉 Azure,请创建一个帐户来评估产品/服务。
从 Azure CLI 安装页安装适用于你的操作系统的最新 Azure CLI。
如果已安装 Azure CLI,请使用 az version
命令检查版本。 要使用迁移 CLI 命令,版本应为 2.50.0 或更高版本。 如果低于此版本,请更新 Azure CLI 版本。
运行 az login
命令:
az login
此时会打开一个包含 Azure 登录页的浏览器窗口。 请提供你的 Azure 凭据以成功完成身份验证。 有关使用 Azure CLI 登录的其他方法,请参阅此文。
迁移 CLI 命令(脱机)
迁移工具随附了易于使用的 CLI 命令,可用于执行迁移相关的任务。 所有 CLI 命令都以 az postgres flexible-server migration
开头。 在启动迁移之前,请务必将这些扩展加入允许列表。
如需帮助了解与某个命令关联的选项以及正确的语法,可以使用 --help
参数:
az postgres flexible-server migration --help
执行前面的命令将返回以下输出:
输出列出了支持的迁移命令及其操作。 让我们详细了解这些命令。
使用 Azure CLI 创建迁移
create
命令可帮助创建从源服务器到目标服务器的迁移:
az postgres flexible-server migration create --help
执行前面的命令将返回以下输出:
它会列出所需的参数并提供用于成功创建从源服务器到目标服务器的迁移的示例语法。 下面是用于创建新迁移的 CLI 命令:
az postgres flexible-server migration create [--subscription]
[--resource-group]
[--name]
[--migration-name]
[--migration-mode]
[--properties]
参数 |
说明 |
subscription |
灵活服务器目标的订阅 ID。 |
resource-group |
灵活服务器目标的资源组。 |
name |
灵活服务器目标的名称。 |
migration-name |
每个到此灵活服务器目标的迁移的唯一标识符。 此字段仅接受字母数字字符,不接受除下划线 (_) 和连字符 (-) 之外的任何特殊字符。 名称必须以字母数字字符开头和结尾。 对于目标服务器,该名称也必须是唯一的,因为指向同一灵活服务器目标的两个迁移不能使用相同名称。 |
migration-mode |
这是一个可选参数。 默认值:脱机。 脱机迁移需要在某个时间点将源数据库复制到目标服务器。 |
properties |
JSON 文件的绝对路径,其中包含有关单一服务器源的信息。 |
例如:
az postgres flexible-server migration create --subscription 11111111-1111-1111-1111-111111111111 --resource-group my-learning-rg --name myflexibleserver --migration-name migration1 --properties "./migrationBody.json" --migration-mode offline
create
命令中使用的 migration-name
参数可用于其他 CLI 命令,例如 update
、delete
和 show.
。在所有这些命令中,该参数可唯一标识相应操作中的迁移尝试。
最后,create
命令需要将 JSON 文件作为其 properties
参数的一部分传递。
JSON 的结构为:
{
"properties": {
"sourceDbServerResourceId": "/subscriptions/<subscriptionid>/resourceGroups/<sourceServerResourceGroup>/providers/Microsoft.DBforPostgreSQL/servers/<sourceServer>",
"secretParameters": {
"adminCredentials": {
"sourceServerPassword": "<password>",
"targetServerPassword": "<password>"
},
"sourceServerUserName": "<username>@<servername>",
"targetServerUserName": "<username>"
},
"dbsToMigrate": [
"<db1>",
"<db2>"
],
"overwriteDbsInTarget": "true"
}
}
采用 JSON 文件格式的 create
参数如下所示:
参数 |
类型 |
描述 |
sourceDbServerResourceId |
必须 |
此参数是单一服务器源的资源 ID。 |
adminCredentials |
必须 |
此参数列出单一服务器和灵活服务器目标的管理员用户的密码。 这些密码有助于对源服务器和目标服务器进行身份验证。 |
sourceServerUserName |
必须 |
默认值是在创建单一服务器期间指定的管理员用户,所提供的密码将用于对此用户进行身份验证。 如果使用的不是默认用户,则此参数是用于执行迁移的源服务器上的用户或角色。 此用户应对迁移中涉及的数据库对象拥有必要的特权和所有权,并且应是 azure_pg_admin 角色的成员。 |
targetServerUserName |
必须 |
默认值是在创建灵活服务器期间创建的管理员用户,所提供的密码将用于对此用户进行身份验证。 如果未使用默认用户,则此参数是用于执行迁移的目标服务器上的用户或角色。 此用户应是 azure_pg_admin、pg_read_all_settings、pg_read_all_stats、pg_stat_scan_tables 角色的成员,并且应具有创建角色、创建 DB 属性。 |
dbsToMigrate |
必须 |
指定要迁移到灵活服务器的数据库的列表。 仅迁移用户数据库。 不会迁移系统数据库或模板数据库(如 template0、template1)。 |
overwriteDbsInTarget |
必须 |
如果设置为 true,且目标服务器的现有数据库恰好与要迁移的数据库同名,则迁移服务会自动覆盖该数据库。 |
setupLogicalReplicationOnSourceDBIfNeeded |
可选 |
通过将此属性设置为 true ,可以在源服务器上自动启用逻辑复制。 对服务器设置进行的此项更改需要重启服务器,这会导致两到三分钟的故障时间。 |
sourceDBServerFullyQualifiedDomainName |
可选 |
将自定义 DNS 服务器用于虚拟网络的名称解析时使用该参数。 根据自定义 DNS 服务器为此属性提供单一服务器的 FQDN。 |
targetDBServerFullyQualifiedDomainName |
可选 |
将自定义 DNS 服务器用于虚拟网络内部的名称解析时使用该参数。 根据自定义 DNS 服务器提供灵活服务器目标的 FQDN。 仅当为名称解析使用自定义 DNS 服务器而不是 Azure 提供的 DNS 时(这种情况极少见),才应包含 sourceDBServerFullyQualifiedDomainName 和 targetDBServerFullyQualifiedDomainName 作为 JSON 的一部分。 否则,请勿在 JSON 文件中包括这些参数。 |
请注意命令响应的以下要点:
- 触发
create
命令后,迁移将会进入 InProgress
状态和 PerformingPreRequisiteSteps
子状态。 迁移工作流需要几分钟的时间来部署迁移基础结构,并在源和目标之间建立连接。
- 完成
PerformingPreRequisiteSteps
子状态后,迁移将进入 Migrating Data,
子状态,此时会执行数据库的克隆/复制。
- 迁移的每个数据库都有自己的部分,其中包含所有迁移详细信息,例如表计数、增量插入、删除和挂起字节数。
- 完成
Migrating Data
子状态所需的时间取决于所迁移数据库的大小。
- 一旦
Migrating Data
子状态成功完成,迁移就会进入 Succeeded
状态。 如果 Migrating Data
子状态出现问题,迁移将进入 Failed
状态。
列出迁移
list
命令列出对灵活服务器目标进行的所有迁移尝试。
az postgres flexible-server migration list [--subscription]
[--resource-group]
[--name]
[--filter]
filter
参数具有两个选项:
Active
:列出当前到目标服务器的活动(正在进行的)迁移尝试。 它不包括已失败、取消或成功的迁移。
All
:列出对目标服务器进行的所有迁移尝试。 这包括活动迁移和已完成的迁移,不管其状态如何。
若要了解此命令的详细信息,请使用 --help
参数:
az postgres flexible-server migration list --help
监视迁移
--show
命令可帮助监视正在进行的迁移,并提供迁移的当前状态和子状态。
az postgres flexible-server migration show [--subscription]
[--resource-group]
[--name]
[--migration-name]
migration_name
参数是在运行 create
命令期间分配给迁移的名称。 下面是用于显示详细信息的 CLI 命令的示例响应快照:
若要了解此命令的详细信息,请使用 --help
参数:
az postgres flexible-server migration show --help
下表描述了迁移状态和子状态。
迁移状态 |
说明 |
InProgress |
迁移基础结构已设置,或者正在进行实际数据迁移。 |
Canceled |
迁移已被取消或删除。 |
Failed |
迁移失败。 |
Succeeded |
迁移成功并已完成。 |
ValidationFailed |
迁移在迁移前验证期间失败。 |
迁移子状态 |
说明 |
PerformingPreRequisiteSteps |
基础结构已设置,并且已为数据迁移做好准备。 |
MigratingData |
数据迁移正在进行中。 |
CompletingMigration |
正在完成迁移过程。 |
Completed |
迁移已完成,无论是否处于成功状态。 |
CancelingRequestedDBMigrations |
取消迁移。 |
ValidationInProgress |
正在进行验证。 |
先决条件(联机)
在使用 Azure Database for PostgreSQL 中的迁移服务开始迁移之前,必须满足适用于脱机迁移方案的以下先决条件。
验证源版本
源 PostgreSQL 版本应该为 >= 9.5
。 如果源 PostgreSQL 版本低于 9.5
,请在迁移之前将源 PostgreSQL 版本升级到 9.5
或更高版本。
设置联机迁移参数
对于联机迁移,应在源 PostgreSQL 服务器的“复制设置”下将复制支持设置为“逻辑”。 此外,服务器参数 max_wal_senders
和 max_replication_slots
的值应大于需要迁移的数据库数。 可以在 Azure 门户中的“设置”- >“服务器参数”下设置这些参数,也可以使用以下命令在命令行中配置这些参数:
- ALTER SYSTEM SET wal_level = logical;
- ALTER SYSTEM SET max_wal_senders =
number of databases to migrate
+ 1;
- ALTER SYSTEM SET max_replication_slots =
number of databases to migrate
+ 1;
确保没有长时间运行的事务。 长时间运行的事务不允许创建复制槽。 如果提交或回滚所有长时间运行的事务,则复制槽的创建会成功。 完成所有联机迁移先决条件后,需要重启源 PostgreSQL 服务器。
注意
要使用 Azure Database for PostgreSQL 单一服务器进行联机迁移,可在 Azure 门户中单一服务器页的“复制设置”下将 Azure 复制支持设置为“逻辑”。
若要防止联机迁移耗尽存储来存储日志,请确保使用预配的托管磁盘有足够的表空间。 为此,请在迁移期间禁用灵活服务器上的服务器参数 azure.enable_temp_tablespaces_on_local_ssd
,并在迁移后将其还原到原始状态。
设置目标
迁移之前,必须在 Azure 中设置 Azure Database for PostgreSQL。
为 Azure Database for PostgreSQL 选择的 SKU 应与源数据库的规范相对应,以确保兼容性和足够的性能。
有关创建新 Azure Database for PostgreSQL 的详细说明,请参阅以下链接:快速入门:创建服务器。
服务器参数 max_replication_slots
应大于需要迁移的数据库数。 可以在 Azure 门户中的“设置”- >“服务器参数”下设置它,也可以使用以下命令在命令行中配置它:
ALTER SYSTEM SET max_replication_slots = number of databases to migrate
+ 1;
设置网络
网络设置对于迁移服务正常运行至关重要。 确保源 PostgreSQL 服务器可与目标 Azure Database for PostgreSQL 服务器通信。 以下网络配置对于成功迁移至关重要。
有关网络设置的信息,请访问迁移服务的网络指南。
启用扩展
要确保使用 Azure Database for PostgreSQL 中的迁移服务成功进行迁移,可能需要验证源 PostgreSQL 实例的扩展。 扩展提供了应用程序可能需要的功能和特征。 在启动迁移过程之前,请确保验证源 PostgreSQL 实例上的扩展。
在 Azure Database for PostgreSQL 灵活服务器的目标实例中,启用在源 PostgreSQL 实例中标识的受支持的扩展。
有关详细信息,请参阅 Azure Database for PostgreSQL 中的扩展。
注意
只要更改 shared_preload_libraries
参数,就需要重启。
服务器参数
这些参数不会自动迁移到目标环境,必须手动进行配置。
在目标中禁用高可用性(可靠性)和只读副本
注意
某些限制适用于此处记录的联机迁移。 确保数据库符合执行联机迁移的要求。
开始使用
如果你不熟悉 Azure,请创建一个帐户来评估产品/服务。
从 Azure CLI 安装页安装适用于你的操作系统的最新 Azure CLI。
如果已安装 Azure CLI,请使用 az version
命令检查版本。 要使用迁移 CLI 命令,版本应为 2.50.0 或更高版本。 如果低于此版本,请更新 Azure CLI 版本。
运行 az login
命令:
az login
此时会打开一个包含 Azure 登录页的浏览器窗口。 请提供你的 Azure 凭据以成功完成身份验证。 有关使用 Azure CLI 登录的其他方法,请参阅此文。
迁移 CLI 命令(联机)
迁移工具随附了易于使用的 CLI 命令,可用于执行迁移相关的任务。 所有 CLI 命令都以 az postgres flexible-server migration
开头。 在启动迁移之前,请务必将这些扩展加入允许列表。
如需帮助了解与某个命令关联的选项以及正确的语法,可以使用 --help
参数:
az postgres flexible-server migration --help
执行前面的命令将返回以下输出:
输出列出了支持的迁移命令及其操作。 让我们详细了解这些命令。
使用 Azure CLI 创建迁移
create
命令可帮助创建从源服务器到目标服务器的迁移:
az postgres flexible-server migration create --help
执行前面的命令将返回以下输出:
它会列出所需的参数并提供用于成功创建从源服务器到目标服务器的迁移的示例语法。 下面是用于创建新迁移的 CLI 命令:
az postgres flexible-server migration create [--subscription]
[--resource-group]
[--name]
[--migration-name]
[--migration-mode]
[--properties]
参数 |
说明 |
subscription |
灵活服务器目标的订阅 ID。 |
resource-group |
灵活服务器目标的资源组。 |
name |
灵活服务器目标的名称。 |
migration-name |
每个到此灵活服务器目标的迁移的唯一标识符。 此字段仅接受字母数字字符,不接受除下划线 (_) 和连字符 (-) 之外的任何特殊字符。 名称必须以字母数字字符开头和结尾。 对于目标服务器,该名称也必须是唯一的,因为指向同一灵活服务器目标的两个迁移不能使用相同名称。 |
migration-mode |
这是一个可选参数。 默认值是 Offline 。 对于联机迁移,必须通过 Online 。 |
properties |
JSON 文件的绝对路径,其中包含有关单一服务器源的信息。 |
例如:
az postgres flexible-server migration create --subscription 11111111-1111-1111-1111-111111111111 --resource-group my-learning-rg --name myflexibleserver --migration-name migration1 --properties "./migrationBody.json" --migration-mode online
create
命令中使用的 migration-name
参数可用于其他 CLI 命令,例如 update
、delete
和 show.
。在所有这些命令中,该参数可唯一标识相应操作中的迁移尝试。
最后,create
命令需要将 JSON 文件作为其 properties
参数的一部分传递。
JSON 的结构为:
{
"properties": {
"sourceDbServerResourceId": "/subscriptions/<subscriptionid>/resourceGroups/<sourceServerResourceGroup>/providers/Microsoft.DBforPostgreSQL/servers/<sourceServer>",
"secretParameters": {
"adminCredentials": {
"sourceServerPassword": "<password>",
"targetServerPassword": "<password>"
}
},
"sourceServerUserName": "<username>@<servername>",
"targetServerUserName": "<username>",
"dbsToMigrate": ["<db1>", "<db2>"],
"overwriteDbsInTarget": "true"
}
}
采用 JSON 文件格式的 create
参数如下所示:
参数 |
类型 |
描述 |
sourceDbServerResourceId |
必须 |
此参数是单一服务器源的资源 ID。 |
adminCredentials |
必须 |
此参数列出单一服务器和灵活服务器目标的管理员用户的密码。 这些密码有助于对源服务器和目标服务器进行身份验证。 |
sourceServerUserName |
必须 |
默认值是在创建单一服务器期间指定的管理员用户,所提供的密码将用于对此用户进行身份验证。 如果使用的不是默认用户,则此参数是用于执行迁移的源服务器上的用户或角色。 此用户应对迁移中涉及的数据库对象拥有必要的特权和所有权,并且应是 azure_pg_admin 角色的成员。 |
targetServerUserName |
必须 |
默认值是在创建灵活服务器期间创建的管理员用户,所提供的密码将用于对此用户进行身份验证。 如果未使用默认用户,则此参数是用于执行迁移的目标服务器上的用户或角色。 此用户应是 azure_pg_admin、pg_read_all_settings、pg_read_all_stats、pg_stat_scan_tables 角色的成员,并且应具有创建角色、创建 DB 属性。 |
dbsToMigrate |
必须 |
指定要迁移到灵活服务器的数据库的列表。 仅迁移用户数据库。 不会迁移系统数据库或模板数据库(如 template0、template1)。 |
overwriteDbsInTarget |
必须 |
如果设置为 true,且目标服务器的现有数据库恰好与要迁移的数据库同名,则迁移服务会自动覆盖该数据库。 |
setupLogicalReplicationOnSourceDBIfNeeded |
可选 |
通过将此属性设置为 true ,可以在源服务器上自动启用逻辑复制。 对服务器设置进行的此项更改需要重启服务器,这会导致两到三分钟的故障时间。 |
sourceDBServerFullyQualifiedDomainName |
可选 |
将自定义 DNS 服务器用于虚拟网络的名称解析时使用该参数。 根据自定义 DNS 服务器为此属性提供单一服务器的 FQDN。 |
targetDBServerFullyQualifiedDomainName |
可选 |
将自定义 DNS 服务器用于虚拟网络内部的名称解析时使用该参数。 根据自定义 DNS 服务器提供灵活服务器目标的 FQDN。 仅当为名称解析使用自定义 DNS 服务器而不是 Azure 提供的 DNS 时(这种情况极少见),才应包含 sourceDBServerFullyQualifiedDomainName 和 targetDBServerFullyQualifiedDomainName 作为 JSON 的一部分。 否则,请勿在 JSON 文件中包括这些参数。 |
请注意命令响应的以下要点:
- 触发
create
命令后,迁移将会进入 InProgress
状态和 PerformingPreRequisiteSteps
子状态。 迁移工作流需要几分钟的时间来部署迁移基础结构,并在源和目标之间建立连接。
- 完成
PerformingPreRequisiteSteps
子状态后,迁移将进入 Migrating Data,
子状态,此时会执行数据库的克隆/复制。
- 迁移的每个数据库都有自己的部分,其中包含所有迁移详细信息,例如表计数、增量插入、删除和挂起字节数。
- 完成
Migrating Data
子状态所需的时间取决于所迁移数据库的大小。
- 一旦
Migrating Data
子状态成功完成,迁移就会进入 Succeeded
状态。 如果 Migrating Data
子状态出现问题,迁移将进入 Failed
状态。
设置复制
对于联机迁移模式,必须在源单一服务器中启用逻辑复制。 如果未启用,则迁移服务会在使用随附 JSON 文件中的值 true
传递 setupLogicalReplicationOnSourceDBIfNeeded
参数时自动在源单一服务器上启用逻辑复制。 启动迁移后,还可以使用以下命令在源上手动设置复制。 任何启用逻辑复制的方法都会重启源单一服务器。
例如:
az postgres flexible-server migration update --subscription 11111111-1111-1111-1111-111111111111 --resource-group my-learning-rg --name myflexibleserver --migration-name CLIMigrationExample --setup-replication
当灵活服务器处于等待 WaitingForLogicalReplicationSetupRequestOnSourceDB
状态时,需要运行此命令才能推进迁移。
若要执行联机迁移,请使用:
az postgres flexible-server migration create --subscription 11111111-1111-1111-1111-111111111111 --resource-group my-learning-rg --name myflexibleserver --migration-name migration1 --properties "./migrationBody.json" --migration-mode online
列出迁移
list
命令列出对灵活服务器目标进行的所有迁移尝试。
az postgres flexible-server migration list [--subscription]
[--resource-group]
[--name]
[--filter]
filter
参数具有两个选项:
Active
:列出当前到目标服务器的活动(正在进行的)迁移尝试。 它不包括已失败、取消或成功的迁移。
All
:列出对目标服务器进行的所有迁移尝试。 这包括活动迁移和已完成的迁移,不管其状态如何。
若要了解此命令的详细信息,请使用 --help
参数:
az postgres flexible-server migration list --help
监视迁移
show
命令可帮助监视正在进行的迁移,并提供迁移的当前状态和子状态。
az postgres flexible-server migration show [--subscription]
[--resource-group]
[--name]
[--migration-name]
migration_name
参数是在运行 create
命令期间分配给迁移的名称。 下面是用于显示详细信息的 CLI 命令的示例响应快照:
若要了解此命令的详细信息,请使用 --help
参数:
az postgres flexible-server migration show --help
下表描述了迁移状态和子状态。
迁移状态 |
说明 |
InProgress |
迁移基础结构已设置,或者正在进行实际数据迁移。 |
Canceled |
迁移已被取消或删除。 |
Failed |
迁移失败。 |
Succeeded |
迁移成功并已完成。 |
ValidationFailed |
迁移在迁移前验证期间失败。 |
迁移子状态 |
说明 |
PerformingPreRequisiteSteps |
基础结构已设置,并且已为数据迁移做好准备。 |
MigratingData |
数据迁移正在进行中。 |
WaitingForCutoverTrigger |
数据迁移任务已完成并等待用户触发直接转换。 |
CompletingMigration |
正在完成迁移过程。 |
Completed |
迁移已完成,无论是否处于成功状态。 |
CancelingRequestedDBMigrations |
取消迁移。 |
ValidationInProgress |
正在进行验证。 |
直接转换迁移
在联机迁移中,完成基本数据迁移后,迁移任务将移动到 WaitingForCutoverTrigger
子状态。 在此状态下,用户可以使用以下命令通过 CLI 触发直接转换。 还可以通过选择迁移网格中的迁移名称从门户触发直接转换。
例如:
az postgres flexible-server migration update --subscription 11111111-1111-1111-1111-111111111111 --resource-group my-learning-rg --name myflexibleserver --migration-name CLIMigrationExample --cutover
在启动直接转换之前,必须确保:
- 已停止写入源 -
latency
参数为 0 或接近 0
latency
参数指示目标上次与源同步的时间。 例如,下面是两个数据库的 201 和 202 值,如下图所示。 这意味着尚未将源上最近大约 200 秒内发生的更改同步到目标。 此时,可以停止写入源并启动直接转换。 如果源中存在大量流量,建议先停止写入,以便 Latency
可以接近 0,然后启动直接转换。 直接转换操作会将源中所有挂起的更改应用到目标,并完成迁移。 如果触发“直接转换”,则即使 Latency
非零,复制也会在该时间点之前停止。 然后会在目标上应用直接转换点之前源中的所有数据。 假设直接转换点处的延迟为 15 分钟,则会向目标应用过去 15 分钟内的所有更改数据。 所需时间则取决于过去 15 分钟内发生的更改积压工作。 因此,建议在触发直接转换之前,延迟应达到零或接近零。
可以使用前一显示命令获取 latency
信息。
下面是启动直接转换之前迁移的快照:
启动直接转换后,基础复制期间发生的所有事务将会按顺序复制到目标,并完成迁移。
如果直接转换未成功,迁移将会进入 Failed
状态。
若要了解此命令的详细信息,请使用 --help
参数:
az postgres flexible-server migration update --help