PostgreSQL 增量备份的最佳方法

我目前正在使用 pg_dump管道到 gzip管道到 split。但是这样做的问题是所有的输出文件总是被更改。因此,基于校验和的备份总是复制所有数据。

有没有其他好的方法来执行 PostgreSQL 数据库的增量备份,其中可以从备份数据恢复完整的数据库?

例如,如果 pg_dump可以使所有内容都绝对有序,那么所有更改都只在转储结束时应用,或者类似的情况。

75392 次浏览

更新: 看看 Barman,以更简单的方式设置备份的 WAL 归档。

可以使用 PostgreSQL 的连续 WAL 归档方法。首先需要设置 wal_level=archive,然后执行完整的文件系统级备份(在发出 pg_start_backup()pg_stop_backup()命令之间) ,然后通过配置 archive_command选项复制新的 WAL 文件。

优点:

  • WAL 归档包括恢复数据库当前状态所需的所有内容
  • 几乎没有开销,复制 WAL 文件是便宜的
  • 您可以在 任何时间点恢复数据库(这个特性称为 PITR 或时间点恢复)

缺点:

  • 设置比 pg _ dump 更复杂
  • 完整备份将比 pg _ dump 大得多,因为它包含所有内部表结构和索引
  • 对于大量写入的数据库不能很好地工作,因为恢复将花费很长时间。

有一些工具,如 迷你工具Omnipitr,可以简化设置和恢复这些配置。但我自己还没用过。

另一种方法是备份到纯文本,并使用 rdiff 创建增量差异。

还有 http://www.pgbackrest.org

PgBackrest 是 PostgreSQL 的另一个备份工具,因为它支持:

  • 并行备份(测试的规模几乎可以达到32个核心,但是可能可以走得更远... ...)
  • 压缩静止备份
  • 增量和差异(压缩!)备份
  • 流式压缩(数据只在源压缩一次,然后通过网络传输并存储)
  • Delta 恢复(能够将旧的副本更新为最新的副本)
  • 完全支持表空间
  • 备份轮换和归档过期
  • 能够恢复由于某种原因失败的备份
  • 等等,等等。