PostgreSQL EC2备份策略

我试图确定在Amazon EC2上备份PostgreSQL数据库的最佳方法。 我已经阅读了几个选项。

1)获取数据库正在使用的EBS卷的每日快照。

我用这种方法看到的问题是在写入快照时发生了什么? 那么我的数据会不会腐败?

2)使用pg_dump,压缩文件并存储在S3中。

pg_dump不会创build损坏的数据,但是从pg_dump恢复数据库可能非常耗时

应该采用什么策略? 选项1似乎很诱人,因为它更容易做和恢复,但是我是否正在冒这个风险?

我不能说PostgreSQL,因为我不使用它,但是我使用选项1上的一个变体来备份EC2上的MySQL数据库,并成功地恢复它们,没有问题。

第一个要求当然是,你的数据库存储在一个EBS卷上,以便它们可以被快照。 我喜欢使用XFS作为文件系统,因为整个文件系统可以很容易地被冻结。

要开始快照过程,您需要冻结数据库并刷新表格。 有一个伟大的脚本会做到这一点,以及冻结你的文件系统(如果xfs) ec2-consistent-snapshot (该网站对PostgreSQL有一些评论,可能指向你的一个可接受的方向 – 它是为Ubuntudevise的,但是,在其他发行版(如Amazon的Linux / CentOS)上工作没有太多问题)。 我的理解是,使用PostgreSQL,人们通常只需要快照(在冻结文件系统之后),并依靠PostgreSQL的内置恢复function将所有内容恢复到正常运行状态。 尽pipe如此,xfs_freeze对获得一致的快照依然很重要。

一旦你的文件系统被冻结(如果可能的话,你的数据库被刷新并locking),拍摄你的快照(理想情况下,直接使用API​​,而不是基于(非常)慢的Java命令)。 快照命令仅需要(几秒)返回,之后您可以解冻文件系统 – 创build的快照将保持一致,尽pipe有额外的读取。

鉴于快照是有区别的(以某种方式)和压缩的,这种方法比使用S3更加经济,并且提供了更多的select,它还允许你以更快的速度恢复数据,并且应该locking数据库一段较短的时间比生成转储。 也可以旋转你的快照,以保持他们的数字在控制之下 – 我写了一个Perl脚本来为我做。

如果有疑问,请尝试第一个选项,然后创build一个EBS卷并testing数据库以查看所有的工作 – 不要只相信备份是好的。