持续备份大型 PostgreSQL 数据库

持续备份大型 PostgreSQL 数据库

我在 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,该工具名为沃尔

相关内容