PostgreSQL增量备份的最佳方法
我目前使用pg_dump
pipe道通过gzip
pipe道来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和omnipitr ,可以简化设置和恢复这些configuration。 但是我自己没有用过
另一种方法是备份到纯文本,并使用rdiff创build增量差异。
同时检查出http://www.pgbackrest.org
pgBackrest是PostgreSQL的另一个备份工具,您应该对它进行评估:
- 并行备份(经过testing几乎可以线性扩展到32个内核,但可能会更远..)
- 静态压缩备份
- 增量和差异(压缩!)备份
- stream式压缩(数据在源处只压缩一次,然后通过networking传输并存储)
- 并行,增量恢复(能够将旧版本更新到最新版本)
- 完全支持表空间
- 备份轮换和存档到期
- 能够恢复由于某种原因失败的备份
- 等等。