你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将 PostgreSQL 数据库迁移到已启用 Azure Arc 的 PostgreSQL 服务器
本文档介绍将现有的 PostgreSQL 数据库(不在已启用 Azure Arc 的数据服务中托管的数据库)放入已启用 Azure Arc 的 PostgreSQL 服务器中的步骤。
注意事项
已启用 Azure Arc 的 PostgreSQL 服务器是 PostgreSQL 的社区版本。 因此,任何在 Azure Arc 之外处理 PostgreSQL 的工具都应该适用于由 Azure Arc 启用的 PostgreSQL 服务器。
因此,使用现在用于 Postgres 的一组工具,应该能够执行以下操作:
- 从托管在 Azure Arc 之外的实例备份 Postgres 数据库
- 在已启用 Azure Arc 的 PostgreSQL 服务器中还原它
你要执行的只剩:
- 重置服务器参数
- 重置安全性上下文:重新创建用户、角色和重置权限...
若要执行此备份/还原操作,可以使用任何能够针对 Postgres 进行备份/还原的工具。 例如:
- Azure Data Studio 及其 Postgres 扩展
pgcli
pgAdmin
pg_dump
pg_restore
psql
- ...
示例
让我们使用 pgAdmin
工具来说明这些步骤。
请考虑以下设置:
源:
在裸机服务器上本地运行的 Postgres 服务器,名为 JEANYDSRV。 它的版本为 14,托管一个名为 MyOnPremPostgresDB 的数据库,该数据库具有一个包含 1 行的表 T1目标:
在 Azure Arc 环境中运行的 Postgres 服务器,名为 postgres01。 它的版本为 14。 除了标准 Postgres 数据库,它没有任何其他数据库。
在本地备份源数据库
对其进行配置:
- 为它指定文件名:MySourceBackup
- 将格式设置为“自定义”
备份成功完成:
在已启用 Azure Arc 的 PostgreSQL 服务器中的目标系统上创建一个空数据库
注意
若要在 pgAdmin
工具中注册 Postgres 实例,需要使用 Kubernetes 群集中实例的公共 IP,并相应地设置端口和安全性上下文。 运行以下命令后,你将在 psql
终结点行上找到这些详细信息:
az postgres server-arc endpoint list -n postgres01 --k8s-namespace <namespace> --use-k8s
该命令返回如下输出:
{
"instances": [
{
"endpoints": [
"Description": "PostgreSQL Instance",
"Endpoint": "postgresql://postgres:<replace with password>@12.345.123.456:1234"
},
{
"Description": "Log Search Dashboard",
"Endpoint": "https://12.345.123.456:12345/kibana/app/kibana#/discover?_a=(query:(language:kuery,query:'custom_resource_name:\"postgres01\"'))"
},
{
"Description": "Metrics Dashboard",
"Endpoint": "https://12.345.123.456:12345/grafana/d/postgres-metrics?var-Namespace=arc3&var-Name=postgres01"
}
],
"engine": "PostgreSql",
"name": "postgres01"
}
],
"namespace": "arc"
}
让我们将目标数据库命名为 RESTORED_MyOnPremPostgresDB。
在 Arc 设置中还原数据库
配置还原:
指向包含要还原的备份的文件:MySourceBackup
将格式设置为“自定义”或“tar”
请单击“还原”。
还原成功。
验证该数据库是否在已启用 Azure Arc 的 PostgreSQL 服务器中成功还原
使用以下方法之一:
从 pgAdmin
:
展开在 Azure Arc 设置中托管的 Postgres 实例。 你将看到已还原的数据库中的表,当选择数据时,它会显示与本地实例中拥有的相同的行:
从 Azure Arc 设置中的 psql
:
在 Arc 设置中,可以使用 psql
连接到 Postgres 实例、将数据库上下文设置为 RESTORED_MyOnPremPostgresDB
以及查询数据:
列出终结点,以协助产生
psql
连接字符串:az postgres server-arc endpoint list -n postgres01 --k8s-namespace <namespace> --use-k8s
{ "instances": [ { "endpoints": [ "Description": "PostgreSQL Instance", "Endpoint": "postgresql://postgres:<replace with password>@12.345.123.456:1234" }, { "Description": "Log Search Dashboard", "Endpoint": "https://12.345.123.456:12345/kibana/app/kibana#/discover?_a=(query:(language:kuery,query:'custom_resource_name:\"postgres01\"'))" }, { "Description": "Metrics Dashboard", "Endpoint": "https://12.345.123.456:12345/grafana/d/postgres-metrics?var-Namespace=arc3&var-Name=postgres01" } ], "engine": "PostgreSql", "name": "postgres01" } ], "namespace": "arc" }
从
psql
连接字符串,使用-d
参数指示数据库名称。 使用下面的命令时,系统将提示你输入密码:psql -d RESTORED_MyOnPremPostgresDB -U postgres -h 10.0.0.4 -p 32639
psql
连接。Password for user postgres: psql (10.12 (Ubuntu 10.12-0ubuntu0.18.04.1), server 12.3 (Debian 12.3-1.pgdg100+1)) WARNING: psql major version 10, server major version 12. Some psql features might not work. SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) Type "help" for help. RESTORED_MyOnPremPostgresDB=#
选择该表,你将看到你从本地 Postgres 实例还原的数据:
RESTORED_MyOnPremPostgresDB=# select * from t1;
col1 | col2 ------+------------- 1 | BobbyIsADog (1 row)
注意
- 目前,无法将现有的会在本地或任何其他云中运行的 Postgres 实例“加入到 Azure Arc”。 换句话说,无法在现有 Postgres 实例上安装某种“Azure Arc 代理”来使其成为 Azure Arc 启用的 Postgres 设置。转而,你需要创建新的 Postgres 实例,并将数据传输到该实例。 你可以使用以上所示的方法来实现此目的,也可以使用所选的任何 ETL 工具。
*在这些文档中,跳过“登录到 Azure 门户”和“创建 Azure Database for PostgreSQL”部分。 在 Azure Arc 部署中执行剩余步骤。 这些部分特定于在 Azure 云中作为 PaaS 服务提供的 Azure Database for PostgreSQL 服务器,但文档的其他部分直接适用于已启用 Azure Arc 的 PostgreSQL 服务器。