本指南介绍如何使用 pg_dump 和 pg_restore 在
启用了透明数据加密
(TDE) 的集群与未加密的集群之间迁移数据。
系统支持两种迁移方向(从 TDE 到未加密,以及从未加密到 TDE),并且使用标准的 PostgreSQL 逻辑备份工具。
使用 pg_dump 进行逻辑迁移时,系统会在源端即时解码加密的数据,并将其转储为未加密的 SQL 语句。恢复数据时,目标集群会根据自己的加密设置写入数据。
如果启用了 TDE,目标集群会对数据进行加密;如果停用了 TDE,则会以纯文本形式写入数据。
准备工作
- 验证您是否已安装 AlloyDB Omni。如需了解详情, 请参阅 使用容器安装 AlloyDB Omni。
- 如果要迁移到启用了 TDE 的数据库服务器,请验证您是否已设置密钥管理提供商。如需了解详情,请参阅 创建启用了 TDE 的集群。
将启用了 TDE 的数据库迁移到停用了 TDE 的数据库
将数据库从启用了 TDE 的数据库服务器转储到主机上的文件。
Docker
docker exec -i TDE_CONTAINER_NAME pg_dump -U postgres -d DATABASE_NAME > /tmp/decrypted_dump.sqlPodman
podman exec -i TDE_CONTAINER_NAME pg_dump -U postgres -d DATABASE_NAME > /tmp/decrypted_dump.sql按照 使用 Docker 安装 AlloyDB Omni 中的说明启动停用了 TDE 的 AlloyDB Omni 服务器。
将转储文件恢复到未加密的数据库服务器。
Docker
docker exec -i NON_TDE_CONTAINER_NAME psql -U postgres -c "CREATE DATABASE DATABASE_NAME" docker exec -i NON_TDE_CONTAINER_NAME psql -U postgres -d DATABASE_NAME < /tmp/decrypted_dump.sqlPodman
podman exec -i NON_TDE_CONTAINER_NAME psql -U postgres -c "CREATE DATABASE DATABASE_NAME" podman exec -i NON_TDE_CONTAINER_NAME psql -U postgres -d DATABASE_NAME < /tmp/decrypted_dump.sql
将停用了 TDE 的数据库迁移到启用了 TDE 的数据库
使用
pg_dump从未加密的数据库服务器转储数据库。Docker
docker exec -i NON_TDE_CONTAINER_NAME pg_dump -U postgres -d DATABASE_NAME > /tmp/src_plaintext_dump.sqlPodman
podman exec -i NON_TDE_CONTAINER_NAME pg_dump -U postgres -d DATABASE_NAME > /tmp/src_plaintext_dump.sql按照 创建启用了 TDE 的集群中的说明启动启用了 TDE 的 AlloyDB Omni 服务器。
恢复到启用了 TDE 的数据库服务器。写入数据时,系统会对数据进行透明加密。
Docker
docker exec -i TDE_CONTAINER_NAME psql -U postgres -c "CREATE DATABASE DATABASE_NAME" docker exec -i TDE_CONTAINER_NAME psql -U postgres -d DATABASE_NAME < /tmp/src_plaintext_dump.sqlPodman
podman exec -i TDE_CONTAINER_NAME psql -U postgres -c "CREATE DATABASE DATABASE_NAME" podman exec -i TDE_CONTAINER_NAME psql -U postgres -d DATABASE_NAME < /tmp/src_plaintext_dump.sql