Get WAL files from AWS RDS PostgreSQL instance

jas*_*man 21 postgresql amazon-ec2

We have a Postgres RDS instance on Amazon Web Services. We have automatic backups enabled, and we take snapshots on a daily basis. We would like to generate a local 'up-to-date' backup of the RDS instance that we can manage ourselves. Running pg_dump against the instance is not sufficient because we want to be able to restore the database to any point in time. We would prefer to have a local backup of RDS and all WAL files since that backup was taken. Questions:

  1. Is it possible to access the WAL files and backups that RDS is automatically generating in its backup routine? This would be ideal. I would want to download a local copy of them. After initial investigation, I feel the answer to this question is 'no'. It sounds like RDS is storing its WAL files and backups in S3, but it makes them inaccessible to us. I would love confirmation.

  2. 还有其他方法可以访问 RDS 实例上发生的事务(WAL 文件)吗?我想我们应该能够在 EC2 上创建一个 Postgres 数据库,并将我们的主要“实时”RDS 实例“馈送”事务到这个 EC2 实例中。一旦我们的 EC2 实例更新,我们就可以从那里提取 WAL 文件。不过,这真令人头疼:/ 这种设置可能吗?从我们的 RDS 实例“馈送”到 EC2 实例以使其始终保持最新状态有什么神奇之处?

谢谢!

Cra*_*ger 20

更新:我已经在 AWS 论坛上发布了有关此内容的信息 - 请在那里插话并在那里索取


在撰写本文时,Amazon RDS 不支持 RDS 之外的物理复制。您可以GRANT用户REPLICATION使用正确的rds_superuser登录,但你不能配置replication在外面的IP条目pg_hba.conf

此外,当您在 RDS 中创建数据库参数组时,一些关键参数会显示但被锁定,例如archive_command,锁定到/etc/rds/dbbin/pgscripts/rds_wal_archive %p。AWS RDS for PostgreSQL 似乎没有公开这些 WAL 以供外部访问(例如,通过 S3),因为如果您要为外部 PITR 使用 WAL-shipping 复制,则需要这样做。

所以此时,如果你想要wal-shipping,不要使用RDS。它是一个易于使用的罐头数据库,但易于使用通常意味着它也是有限的,这里当然就是这种情况。正如 Joe Love 在评论中指出的那样,它在 RDS 内提供 WAL 运输和 PITR ,但您无法从RDS外部访问 WAL 。

所以你需要使用 RDS 自己的备份工具——转储、快照和它自己的基于 WAL 的 PITR。


即使 RDS 确实允许您建立复制连接(用于pg_basebackup或流式复制)并允许您访问存档的 WAL,您也可能无法实际使用该 WAL。RDS 运行打过补丁的 PostgreSQL,但没人知道打了多少补丁,或者它是否显着改变了磁盘格式。它还运行在 Amazon 选择的架构上,可能是 x64 Linux,但不容易确定。由于 PostgreSQL 的磁盘格式和复制依赖于架构,因此您只能复制到与 Amazon RDS 使用的架构相同的主机,并且仅当您的 PostgreSQL 构建与其兼容。

除其他外,这意味着您没有任何简单的方法可以从 RDS 迁移。您必须停止对数据库的所有写入足够长的时间,以进行pg_dump恢复并运行新的数据库。复制和故障转移、rsync 等的常用技巧将不起作用,因为您无法直接访问数据库主机。

即使 RDS 运行未打补丁的 PostgreSQL,pg_basebackup出于安全原因,亚马逊也可能不希望您将 WAL 流式传输到 RDS 或导入到 RDS 中使用。PostgreSQL 将数据目录视为受信任的内容,如果您制作了任何巧妙的“LANGUAGE c”函数来挂钩内部功能或做了任何其他棘手的事情,您可能能够利用服务器获得比预期更大的访问权限. 所以亚马逊不会很快允许入站 WAL。

他们可以支持出站 WAL 发送,但上述格式兼容性、更改自由等问题仍然适用。


相反,您应该使用 Londiste 或 Bucardo 之类的工具。