有没有简单的方法可以每天备份所有本地数据库(同一个 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 软件包。