Postgresql每日备份

Postgresql每日备份

有没有简单的方法可以每天备份所有本地数据库(同一个 postgresql 服务器)?我找到了一些可以使用的 bash 脚本,但它们对于这样的工作来说似乎非常复杂。

有什么简单的建议吗?

答案1

由于我的数据库相当小,我“作弊”使用 logrotate 来做我的 postgresql 备份。 /etc/logrotate.d/postgresql-backup 中的内容如下:

/var/backups/postgresql-dump.sql {
        daily
        nomissingok
        rotate 30
        compress
        delaycompress
        ifempty
        create 640 root adm
        dateext
        postrotate
                /usr/bin/sudo -u postgres /usr/bin/pg_dumpall --clean > /var/backups/postgresql-dump.sql
        endscript
}

这为我提供了方便获取的完整转储(不超过一天),并且自动压缩和轮换以前的转储。

显然,这不会随着更大的数据库而扩展,但对于我的目的来说,它几乎是完美的。(我还使用 BackupPC 来处理包括本地 postgresql 备份在内的异地备份)

答案2

如果你有 /etc/cron.daily,请在其中添加一行代码来调用pg_dumpall

注意:这是最简单的方法,但会创建一个未压缩的 SQL 脚本,以便从 psql 执行。

对于压缩,gzip(更快),bzip2 或 lzma(更慢,输出更小)

在简单情况下,每周保留一份不同的副本就足够了。存储每周、每月或增量备份由您决定。

我认为您所看到的复杂脚本使用 pg_dump/pg_restore 以二进制格式备份数据库,这种格式更加灵活。

答案3

我是这样设置每日备份的:

mkdir /home/dbdump

vim /etc/cron.daily/dbdump

#!/bin/sh
pg_dumpall --globals-only --username=postgres > /home/dbdump/globals.dump
pg_dump --format=custom --username=postgres > /home/dbdump/postgres.dump

chmod 700 /etc/cron.daily/dbdump

然后我使用来自不同网站的 rsnapshot 来保存这些转储的副本

我选择不使用 pg_dumpall 的原因是 pg_dump 有更灵活的选择pg_dump。如果您有多个数据库,则需要使用多个命令

答案4

我用自动备份(automysqlbackup 的 PostgreSQL 端口),也可以安装为Debian 软件包

相关内容