如何在 Postgres 中每小时做一次增量备份?

Nei*_*gan 18 postgresql backup windows postgresql-9.4

尝试对单个 Postgres 服务器(Win7 64)进行每小时增量备份。

我有以下设置postgresql.conf

max_wal_senders = 2
wal_level       = archive
archive_mode    = on
archive_command = 'copy "%p" "c:\\postgres\\foo\\%f"'
Run Code Online (Sandbox Code Playgroud)

(重新开始)

我做了一个基本备份 pg_basebackup -U postgres -D ..\foo -F t -x

它在base.tar文件foo夹中创建了一个大文件并添加了一些 16,384 KB 的文件,我认为这些文件是 WAL。

我不明白的是为什么 WALfoo不会改变data/pg_xlog变化中的 WAL 。pg 不应该复制它们吗?它是如何决定这样做的?

也许我需要设置archive_timeout=3600

我见过几个站点(pg 的邮件列表、bacula 的 postgres 页面)说您需要调用 pg_start_backup() 和 pg_stop_backup(),但我相信这些不是必需的。真的吗?

次要问题:

  1. 多久data/pg_xlog写入一次 WAL ?什么触发写入?

    如果我\q在 psql 中执行一些 DML,它似乎会更新 WAL 。或者在 pgAdmin 中编辑一个表,然后关闭窗口。我认为它会在提交时写入。

  2. 最佳实践?pg_basebackup 每周一次?将 WAL 存档到与 PG 或远程机器相同的机器?

Cra*_*ger 8

有一个现有的工具可以为您提供很大帮助,WAL-E。它为 PITR 到 S3提供了一个archive_commandrestore_command

没有命令来执行增量差分逻辑备份。pg_dump不能采用增量或差异。唯一的方法是通过日志归档。

从理论上讲,您可以进行新的完整备份,在它与上次备份之间进行二进制差异,然后上传差异。不过,这让我觉得这是一种脆弱且低效的做事方式,我真的不推荐它。

此外,PgBarman 支持通过钩子脚本与 S3 集成,并将为您自动化大部分备份轮换和管理。同样,这在 Windows 上可能不是一个选项。


Dan*_*ité 5

您希望将存档文件夹增量备份到远程存储。

如果您需要从备份中恢复,基本情况是您需要将基本备份作为起点,以及存档文件夹的全部内容来重放起点和崩溃之间发生的事务活动。

此外,为了避免存档文件夹中的文件永远堆积,您需要不时进行新的基础备份并删除在新基础备份之前存档的文件。