本文介绍了如何通过 Azure 门户将 Azure PostgreSQL - 灵活服务器还原为备份的文件。
先决条件
在从 Azure Database for PostgreSQL 灵活服务器备份还原之前,请查看以下先决条件:
确保具有所需的还原操作权限。
备份数据作为 Microsoft 租户内的 Blob 存储在备份保管库中。 在还原操作期间,备份数据将跨租户从一个存储帐户复制到另一个存储帐户。 确保还原的目标存储帐户的 AllowCrossTenantReplication 属性设置为 true。
确保通过公用网络访问将备份还原为文件的目标存储帐户。 如果存储帐户使用专用终结点,请在执行还原作之前更新其公用网络访问设置。
将 Azure PostgreSQL 灵活服务器备份还原为文件
注释
还原操作是一个两步的过程。
- 将备份从备份保管库还原到存储容器。
- 将备份文件从存储容器还原到新的或现有的灵活服务器。
若要还原 Azure PostgreSQL-Flexible 数据库,请执行以下步骤:
转到“备份保管库”“备份实例”。> 选择要还原的 PostgreSQL 灵活服务器,然后选择“ 还原”。
或者,转到备份中心并选择“还原”。
使用“选择还原点”来选择要还原到的时间点。 选择“时间段”来更改日期范围。
在“还原参数”选项卡中,选择目标存储帐户和容器。选择“验证”,在最终审阅和还原之前检查还原参数权限。
验证成功后,请选择“查看 + 还原”。
最后查看参数后,选择“ 还原 ”以还原目标存储帐户中选定的 PostgreSQL 灵活服务器备份。
提交还原操作,并在“备份作业”下跟踪触发的作业。
成功完成还原作业后,转到存储帐户容器,从 PostgreSQL - 灵活服务器查看还原成文件的数据库(.sql
文件)。 Azure 备份还会生成以下备份文件:
每个数据库
Database.sql file
:包含特定数据库的数据和架构信息。Roles.sql files
对于整个实例:包含服务器级别存在的所有角色信息。Tablespace.sql file
:Tablespace 文件。Schema.sql file
:包含服务器上所有数据库的架构信息。注释
建议不要在 PostgreSQL 灵活服务器上运行此脚本,因为架构已是脚本的
database.sql
一部分。
将备份文件从存储容器还原到新的或现有的 PostgreSQL 灵活服务器
若要将备份文件从存储容器还原到新的或现有的 PostgreSQL 灵活服务器,请执行以下步骤:
确保在新的目标灵活服务器上启用所有必需的 扩展 。
通过访问 Azure 门户中的服务器参数部分并相应地手动更新值,将源 PostgreSQL 数据库中的服务器参数值与 Azure Database for PostgreSQL 相匹配。 保存参数更改,然后重启 Azure Database for PostgreSQL 灵活服务器以应用新配置。
如果新服务器上需要 Microsoft Entra 身份验证 ,请启用它并创建相关的Microsoft Entra 管理员。
创建新的数据库进行还原。
注释
在数据库还原之前,必须创建新的空数据库。 确保用户帐户具有
CREATEDB
权限。若要创建数据库,请使用
CREATE DATABASE Database_name
命令。使用
database.sql file
作为目标管理员用户还原数据库。 1.创建目标数据库后,通过运行以下命令从 Azure 存储帐户还原此数据库中的数据(从转储文件):az storage blob download --container-name <container-name> --name <blob-name> --account-name <storage-account-name> --account-key <storage-account-key> --file - | pg_restore -h <postgres-server-url> -p <port> -U <username> -d <database-name> --no-owner -v –
--account-name
:目标存储帐户的名称。--container-name
:Blob 容器的名称。--blob-name
:Blob 的名称。--account-key
:存储帐户密钥。-Fd
:目录格式。-j
:作业数。-C
:首先在输出中包含用于创建数据库本身,然后重新连接到该数据库的命令。
或者,可以下载备份文件并直接运行还原。
仅还原所需的角色和特权,并忽略 常见错误。 如果要作为本地管理员执行符合性要求和数据检索的还原,请跳过此步骤。
为正在还原的数据库恢复角色和用户
保管库备份主要针对合规性需求(如测试和审核)进行还原。 使用 database.sql
文件,可以以本地管理员身份登录并还原,检索数据无需其他角色。
对于意外删除保护或灾难恢复等其他用途,请确保根据组织需求创建必要的角色。 避免roles.sql
和database.sql
之间的重复。
- 恢复同一灵活服务器:角色恢复可能不是必须的。
- 还原到其他灵活服务器:使用
roles.sql
文件重新创建所需的角色。
从 roles.sql
中还原时,某些角色或属性可能对新的目标服务器无效。
对于具有超级用户访问权限的环境(本地或 VM),可以无缝运行所有命令。
灵活服务器方案的关键注意事项
以下是主要注意事项:
- 删除 Superuser-Only 属性:在灵活服务器上,没有超级用户权限。 因此,请从角色转储中移除属性,例如
NOSUPERUSER
和NOBYPASSRLS
。 - 排除 Service-Specific 用户:排除特定于灵活服务器服务(
azure_su
、、azure_pg_admin
replication
、、localadmin
、Entra Admin
) 的用户。 当管理员添加到新的灵活服务器时,将自动重新创建这些特定的服务角色。
在还原数据库对象之前,请确保正确转储和清理角色。 若要执行此作,请从存储容器下载 roles.sql
脚本并创建所有必需的登录名。
- 创建非 Entra 角色:使用本地管理员帐户运行角色创建脚本。
- 创建Microsoft Entra 角色:如果需要为 Microsoft Entra 用户创建角色,请使用 Microsoft Entra 管理员帐户运行必要的脚本。
可以从存储帐户下载角色脚本,如以下屏幕截图所示:
迁移输出文件时, roles.sql
可能包括某些角色和属性在新环境中不适用。 必须考虑以下事项:
- 删除只能由超级用户设置的属性:如果迁移到没有超级用户权限的环境,请从角色转储中删除 NOSUPERUSER 和 NOBYPASSRLS 等属性。
- 排除特定于服务的用户:排除单一服务器服务用户,例如
azure_superuser
或azure_pg_admin
。 这些是服务特定的,会在新环境中自动创建。
使用以下 sed 命令来清理角色转储:
sed -i '/azure_superuser/d; /azure_pg_admin/d; /azuresu/d; /^CREATE ROLE replication/d; /^ALTER ROLE replication/d; /^ALTER ROLE/ {s/NOSUPERUSER//; s/NOBYPASSRLS//;}' roles.sql
此命令将删除包含 azure_superuser
、azure_pg_admin
、azuresu
的行,以及以 CREATE ROLE replication 和 ALTER ROLE replication 开头的行,并从 ALTER ROLE 语句中移除 NOSUPERUSER 和 NOBYPASSRLS 属性。