尝试对单个 Postgres 服务器 (Win7 64) 进行每小时增量备份。
我有以下设置postgresql.conf
:
max_wal_senders = 2
wal_level = archive
archive_mode = on
archive_command = 'copy "%p" "c:\\postgres\\foo\\%f"'
(重新开始)
我做了一个基础备份pg_basebackup -U postgres -D ..\foo -F t -x
它在文件夹中创建了一个大base.tar
文件foo
并添加了一些 16,384 KB 的文件,我认为这些文件是 WAL。
我不明白的是为什么 WALfoo
没有改变。变化中的 WAL data/pg_xlog
。pg 不应该复制它们吗?它是如何决定这样做的?
也许我需要设置archive_timeout=3600
?
我见过几个网站(pg 的邮件列表、bacula 的 postgres 页面)说您需要调用 pg_start_backup() 和 pg_stop_backup(),但我相信这些不是必需的。真的吗?
次要问题:
WAL 多久
data/pg_xlog
写一次?什么触发了写入?\q
如果我在 psql 中执行一些 DML,它似乎会更新 WAL 。或者在 pgAdmin 中编辑一个表,然后关闭窗口。我认为它会在提交时写入。最佳实践?pg_basebackup 每周一次?将 WAL 归档到与 PG 或远程机器相同的机器上?
有一个现有的工具可以帮助你很多,WAL-E。它为 S3 的 PITR 提供了一个
archive_command
和restore_command
。没有用于执行增量或差异逻辑备份的命令。不能采用增量或差异。唯一的方法是通过日志归档。
pg_dump
从理论上讲,您可以进行新的完整备份,在它与上次备份之间进行二进制差异,然后上传差异。不过,这让我觉得这是一种脆弱且低效的做事方式,我真的不推荐它。
此外,PgBarman 支持通过钩子脚本与 S3 集成,并将为您自动执行大部分备份轮换和管理。同样,这在 Windows 上可能不是一个选项。
您想要将存档文件夹增量备份到远程存储。
如果您需要从备份中恢复,基本情况是您需要基本备份作为起点,并需要存档文件夹的全部内容来重播起点和崩溃之间发生的事务活动。
此外,为了避免存档文件夹中的文件永远堆积,您需要不时进行新的基础备份,并删除在新基础备份之前存档的文件。