如何在Postgres中每小时进行增量备份?


18

尝试每小时对单个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。

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

也许我需要设置archive_timeout=3600

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

次要问题:

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

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

  2. 最佳做法?pg_basebackup每周一次?将WAL归档到与PG相同的计算机或远程计算机上吗?

Answers:


5

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

如果需要从备份还原,则基本方案是需要将基本备份作为起点,并需要使用存档文件夹的全部内容来重放在起点和崩溃之间发生的事务性活动。

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


谢谢。几个问题:1.我是否要做pg_start_backup(),复制数据,然后运行pg_stop_backup()或pg_start_backup();pg_stop_backup(),然后复制?
尼尔·麦圭根

@Neil:1.和2.不用时使用pg_basebackup,它已经解决了这一问题。3. pg_log当不再需要WAL文件时,postgres将自动删除其中的WAL文件。您不应该在中手动执行任何操作pg_log。否则,请参阅wal_keep_segments参数
DanielVérité13年

“存档”文件夹的意思是pg_xlog,是吗?
尼尔·麦圭根

@NeilMcGuigan:完全没有。归档文件夹是归档命令的目标文件夹,例如,此处为“ c:\ postgres \ foo”。pg_xlog完全由postgres自动管理,而存档文件夹则完全由DBA管理。
DanielVérité2015年

我想我很困惑,因为在初始pg_basebackup之后,foo中的WAL永远不会改变
Neil McGuigan

8

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

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

从理论上讲,您可以执行一个新的完整备份,在它与上一个备份之间进行二进制比较,然后上传差异。不过,这让我感到这是一种脆弱且效率低下的处理方式,我真的不建议这样做。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.