本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 pg_transport 在两个 Amazon RDS 数据库实例之间传输 PostgreSQL 数据库
创建者:Raunak Rishabh(AWS)和 Jitender Kumar(AWS)
环境:PoC 或试点 | 源:数据库:关系 | 目标:Amazon RDS for PostgreSQL |
R 类型:重新定位 | 工作负载:开源 | 技术:迁移;数据库 |
Amazon Web Services:Amazon RDS |
总结
此模式描述了使用 pg_transport 扩展程序在适用于 PostgreSQL 数据库实例的两个 Amazon Relational Database Service(Amazon RDS)之间迁移超大型数据库的步骤。该扩展提供了物理传输机制以移动每个数据库。通过以最少的处理流式传输数据库文件,它为在数据库实例之间迁移大型数据库提供了一种极快的方法,将停机时间降到最低。此扩展程序使用拉取模式,其中,目标数据库实例从源数据库实例导入数据库。
先决条件和限制
先决条件
两个数据库实例必须运行相同的 PostgreSQL 主要版本。
数据库不得存在于目标上。否则,传输将失败。
在源数据库中,除了 pg_transport 之外的任何扩展程序都不能启用。
所有源数据库对象必须位于默认 pg_default 表空间中。
源数据库实例的安全组应允许来自目标数据库实例的流量。
安装像
psql 这样的 PostgreSQL 客户端,PgAdmin 或者使用 Amazon RDS PostgreSQL 数据库实例。您可以将客户端安装在本地系统中,也可以使用 Amazon Elastic Compute Cloud(Amazon EC2)实例。在这种模式中,我们在 EC2 实例上使用 psql。
限制
您无法在 Amazon RDS for PostgreSQL 的不同主要版本之间传输数据库。
源数据库的访问权限和所有权不会转移到目标数据库。
您不能在只读副本或只读副本的父实例上传输数据库。
您不能在打算使用该方法传输的任何数据库表中使用 reg 数据类型。
您总共可以在数据库实例上同时运行 32 个传输(包括导入和导出)。
您不能重命名或包含/排除表。所有内容都按原样迁移。
小心
在移除扩展程序之前先进行备份,因为移除扩展程序还会移除依赖对象和一些对数据库运行至关重要的数据。
在确定 pg_transport 的 Worker 数量和
work_mem
值时,请考虑在源实例上的其他数据库上运行的实例类和进程。传输开始时,源数据库上的所有连接都将终止,数据库将进入只读模式。
注意:在一个数据库上运行传输时,它不会影响同一服务器上的其他数据库。
产品版本
Amazon RDS for PostgreSQL 10.10 和更高版本,Amazon RDS for PostgreSQL 11.5 和更高版本。有关最新版本的信息,请参阅 Amazon RDS 文档中的在数据库实例之间传输 PostgreSQL 数据库。
架构
工具
pg_transport 提供了物理传输机制以移动每个数据库。通过以最少的处理流式传输数据库文件,物理传输移动数据的速度比传统的转储和加载过程快得多,并且需要最少的停机时间。PostgreSQL 可传输数据库使用拉取模式,其中,目标数据库实例从源数据库实例导入数据库。在准备源环境和目标环境时,您可以在数据库实例上安装此扩展程序,如本模式中所述。
psql
使您能够连接和使用 PostgreSQL 数据库实例。要在系统上安装 psql,请参阅 PostgreSQL 下载量 页面。
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
创建目标系统的参数组。 | 指定一个将其标识为目标参数组的组名;例如, | 数据库管理员 |
修改参数组中的参数。 | 设置以下参数:
有关参数组的更多信息,请参阅 Amazon RDS 文档。 | 数据库管理员 |
任务 | 描述 | 所需技能 |
---|---|---|
创建源系统的参数组。 | 指定一个将其标识为源参数组的组名;例如, | 数据库管理员 |
修改参数组中的参数。 | 设置以下参数:
有关参数组的更多信息,请参阅 Amazon RDS 文档。 | 数据库管理员 |
任务 | 描述 | 所需技能 |
---|---|---|
创建一个新的 Amazon RDS for PostgreSQL 数据库实例,将源数据库传输到该数据库中。 | 根据业务需求确定实例类和 PostgreSQL 版本。 | 数据库管理员、系统管理员、数据库架构师 |
修改目标的安全组以允许从 EC2 实例通过数据库实例端口进行连接。 | PostgreSQL 实例的默认端口为 5432。如果您使用其他端口,则必须为 EC2 实例打开与该端口的连接。 | 数据库管理员、系统管理员 |
修改实例,然后分配新的目标参数组。 | 例如, | 数据库管理员 |
重启 Amazon RDS 目标数据库实例。 | 参数 | 数据库管理员、系统管理员 |
使用 psql 从 EC2 实例连接到数据库。 | 使用 命令:
| 数据库管理员 |
创建 pg_transport 扩展程序。 | 以具有该
| 数据库管理员 |
任务 | 描述 | 所需技能 |
---|---|---|
修改源的安全组以允许从 Amazon EC2 实例和目标数据库实例的数据库实例端口进行连接 | 默认情况下,PostgreSQL 实例的端口为 5432。如果您使用其他端口,则必须为 EC2 实例打开与该端口的连接。 | 数据库管理员、系统管理员 |
修改实例,然后分配新的源参数组。 | 例如, | 数据库管理员 |
重启 Amazon RDS 源数据库实例。 | 参数 | 数据库管理员 |
使用 psql 从 EC2 实例连接到数据库。 | 使用 命令:
| 数据库管理员 |
创建 pg_transport 扩展程序并从要传输的数据库中删除所有其他扩展程序。 | 如果源数据库上安装了 pg_transport 以外的任何扩展程序,则传输将失败。此命令必须由具有该 | 数据库管理员 |
任务 | 描述 | 所需技能 |
---|---|---|
执行试运行。 | 使用该
此函数的最后一个参数(设置为 此函数显示您在运行主传输时会看到的任何错误。在运行主传输之前解决错误。 | 数据库管理员 |
如果试运行成功,则启动数据库传输。 | 运行该
此函数的最后一个参数(设置为 | 数据库管理员 |
执行传输后步骤。 | 数据库传输完成后:
| 数据库管理员 |