我在 Amazon RDS 上有一个相当大的 postgres DB(压缩后大约 9GB),有时我们需要复制它并在本地机器上对其进行一些测试。
执行数据库转储(pg_dump)并下载它实在是太慢了,老实说,我们最近几次尝试时都卡住了。
有没有一种简单的方法可以以智能的方式获取数据库的各个部分?例如,仅获取过去 10 天的更改,然后我们可以将它们与我们拥有的本地数据库合并,或者可能以分块的形式获取数据库等?
我确信我不是第一个有这种需要的人,但找不到合适的方法或教程来解释最好的方法。
谢谢!
答案1
9GB 的压缩转储实际上并不算大。你只需要正确操作即可:
- 从运行 RDS 数据库的同一 AWS 账户和区域中的 EC2 实例转储 — 而不是通过互联网;
- 使用目录转储格式(
--format=directory
或-Fd
)——它会自动压缩; - 使用并行转储(例如
--jobs=16
或-j16
)和并行恢复; sslmode=disable
在连接字符串中使用或env PGSSLMODE=disable pg_dump …
禁用 SSL - 某些版本的 AWS RDS 在单个连接上有 64GB 的 SSL 数据限制;- 请记住,从快照恢复的 RDS 数据库非常慢,直到所有数据至少被读取一次 - 第一次读取比正常速度慢 10 倍以上,因为数据是根据需要从存档存储(可能是 S3)中提取的 - 不要从最近从快照恢复的数据库执行此转储;
- 仅在压缩状态下成功转储后才将其移出 AWS。