在使用 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 版本(主要或次要版本)进行迁移时,请查看发行说明 ,了解潜在的重大更改,确保数据库和应用程序之间的兼容性。
网络设置对于迁移服务正常运行至关重要。 确保源 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 命令都以 az postgres flexible-server migration
开头。 在启动迁移之前,请务必将这些扩展加入允许列表。
如需帮助了解与某个命令关联的选项以及正确的语法,可以使用 --help
参数:
az postgres flexible-server migration --help
执行前面的命令将返回以下输出:
输出列出了支持的迁移命令及其操作。 让我们详细了解这些命令。
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
migration-name
命令中使用的 create
参数可用于其他 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
子状态所需的时间取决于所迁移数据库的大小。
一旦 Succeeded
子状态成功完成,迁移就会进入 Migrating Data
状态。 如果 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 版本(主要或次要版本)进行迁移时,请查看发行说明 ,了解潜在的重大更改,确保数据库和应用程序之间的兼容性。
网络设置对于迁移服务正常运行至关重要。 确保源 PostgreSQL 服务器可与目标 Azure Database for PostgreSQL 服务器通信。 以下网络配置对于成功迁移至关重要。
有关网络设置的信息,请访问迁移服务的网络指南 。
要确保使用 Azure Database for PostgreSQL 中的迁移服务成功进行迁移,可能需要验证源 PostgreSQL 实例的扩展。 扩展提供了应用程序可能需要的功能和特征。 在启动迁移过程之前,请确保验证源 PostgreSQL 实例上的扩展。
在 Azure Database for PostgreSQL 灵活服务器的目标实例中,启用在源 PostgreSQL 实例中标识的受支持的扩展。
有关详细信息,请参阅 Azure Database for PostgreSQL 中的扩展 。
备注
只要更改 shared_preload_libraries
参数,就需要重启。
这些参数不会自动迁移到目标环境,必须手动进行配置。
备注
某些限制适用于此处 记录的联机迁移。 确保数据库符合执行联机迁移的要求。
重要
联机迁移会重播从源迁移到目标期间发生的更改。 这可确保不会错过任何正在进行的更改,并可以减少应用程序的停机时间。 但是,仅当源上的更新保持尽可能低时,才能实现此目的。 当源更新流量较低时,可确保正在进行的更改能快速重放到目标,使其及时与源保持同步。 如果迁移过程中在一段时间内观察到 latency
趋势上升,这表明你需要进一步减少源流量。
如果你不熟悉 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 命令都以 az postgres flexible-server migration
开头。 在启动迁移之前,请务必将这些扩展加入允许列表。
如需帮助了解与某个命令关联的选项以及正确的语法,可以使用 --help
参数:
az postgres flexible-server migration --help
执行前面的命令将返回以下输出:
输出列出了支持的迁移命令及其操作。 让我们详细了解这些命令。
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
migration-name
命令中使用的 create
参数可用于其他 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
子状态所需的时间取决于所迁移数据库的大小。
一旦 Succeeded
子状态成功完成,迁移就会进入 Migrating Data
状态。 如果 Migrating Data
子状态出现问题,迁移将进入 Failed
状态。
对于联机迁移模式,必须在源单一服务器中启用逻辑复制。 如果没有启用,迁移服务会在随附 JSON 文件中传递 setupLogicalReplicationOnSourceDBIfNeeded
参数,并且其值为 true
时,自动在源单一服务器上启用逻辑复制。 启动迁移后,还可以使用以下命令在源上手动设置复制。 任何启用逻辑复制的方法都会重启源单一服务器。
例如:
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
子状态。 在此状态下,用户可以使用以下命令通过命令行界面触发切换。 还可通过选择迁移网格中的迁移名称,从门户触发直接转换。
例如:
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 分钟内发生的更改积压工作。 因此,建议在触发切换之前,延迟应达到零或接近零。
可使用 migration show 命令 获取 latency
信息。
以下是启动直接转换之前迁移的快照:
启动直接转换后,将按顺序将基础复制期间发生的所有事务复制到目标,然后迁移完成。
如果直接转换未成功,迁移将转为 Failed
状态。
若要了解此命令的详细信息,请使用 --help
参数:
az postgres flexible-server migration update --help