![持续备份大型 PostgreSQL 数据库](https://linux22.com/image/619483/%E6%8C%81%E7%BB%AD%E5%A4%87%E4%BB%BD%E5%A4%A7%E5%9E%8B%20PostgreSQL%20%E6%95%B0%E6%8D%AE%E5%BA%93.png)
我在 PostgreSQL 9.2 中有一个 20 Tb 的数据库,我不知道如何高效地创建备份。这个数据库每天都会增长一点,每月 1 号就会增长大约 200 Gb。
我本来想做一个 pg_dump,但是每个月都做的话太费事了,然后我想做一次,然后只用副本备份新的或更改的表,但是我不能停止使用数据库来创建第一个转储,所以我不知道备份到底包含哪些数据。
如何在不停止使用数据库的情况下进行增量备份?
答案1
备份在PostgreSQL 手册。
为了实现连续备份,归档预写日志.建议设置如下:
archive_mode = on
wal_level = hot_standby
archive_command = '/usr/bin/rsync --archive --ignore-existing "%p" "/backup-dest/%p"'
# Ensures that a log file is written at least once every 30 minutes even if little
# activity has occurred
archive_timeout = 30min
你可以这样做,而不是pg_dump
为你的基线做一个pg_basebackup
,这不需要您冻结数据库。但是,如果您还没有archive_mode
您需要重新启动数据库来更改该设置。
答案2
就我个人而言,我不知道增量备份解决方案,但我可以想到两种方法来实现您的要求。
你可以看看酒保它运行 pg_basebackup(如果我没记错的话),然后将 WAL 记录传输到 barman 服务器。这样做的缺点是您需要一个服务器持续运行 barman,而不仅仅是在每个月的第一天运行。但是,这样做的优点是能够根据特定日期和时间创建数据库。
我能想到的另一个解决方案是尝试使用快照文件系统。我只使用过 ZFS,但 BTRFS 也应该可以。然后,在每个月的第一天,您可以创建托管数据库的文件系统的增量快照,并在出现问题时进行恢复。但是,考虑到您已经有一个正在运行的数据库,这将是一个问题,除非您在为此目的而启动的只读副本上使用它。
答案3
如果你使用 AWS 来托管你的 Postgres db,你可以尝试使用 Heroku 创建的工具从 EC2 备份到 S3,该工具名为沃尔