PostgreSQL增量备份的最佳方法

我目前使用pg_dumppipe道通过gzippipe道来split 。 但是这个问题是所有的输出文件总是被改变。 所以基于校验和的备份总是复制所有的数据。

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

例如,如果pg_dump可以使所有的东西都是绝对有序的,那么所有的改变只能在转储结束时或类似的地方应用。

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

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

优点:

  • 增量,WAL档案包括恢复数据库当前状态所需的一切
  • 几乎没有开销,复制WAL文件是便宜的
  • 您可以随时恢复数据库(此function称为PITR或时间点恢复)

缺点:

  • 设置比pg_dump更复杂
  • 完整备份将比pg_dump大得多,因为包含所有内部表结构和索引
  • 对于大量写入的数据库来说效果不佳,因为恢复需要很长时间。

有一些工具,如pitrtools和omn​​ipitr ,可以简化设置和恢复这些configuration。 但是我自己没有用过

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

同时检查出http://www.pgbackrest.org

pgBackrest是PostgreSQL的另一个备份工具,您应该对它进行评估:

  • 并行备份(经过testing几乎可以线性扩展到32个内核,但可能会更远..)
  • 静态压缩备份
  • 增量和差异(压缩!)备份
  • stream式压缩(数据在源处只压缩一次,然后通过networking传输并存储)
  • 并行,增量恢复(能够将旧版本更新到最新版本)
  • 完全支持表空间
  • 备份轮换和存档到期
  • 能够恢复由于某种原因失败的备份
  • 等等。