不断备份一个大的PostgreSQL数据库

我在PostgreSQL 9.2中有一个20 Tb的数据库,我不知道如何有效地创build备份。 这是一个每天增长一点的数据库,在每个月的1点增长大约200GB。

我正在考虑做一个pg_dump,但是每个月都需要花费太多的时间,然后我考虑一次,然后用copy来备份新的或者更改的表,但是我不能停止使用数据库为了创build第一个转储,所以我不会完全知道备份包含哪些数据。

如何在不停止使用数据库的情况下进行增量备份?

备份在PostgreSQL手册中有广泛的介绍。

要实现连续备份,请将预写日志归档。 build议的设置是:

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_basebackup ,而不需要冻结数据库,而不是执行基准的pg_dump 。 但是,如果您尚未启用archive_mode ,则需要重新启动数据库才能更改该设置。

就个人而言,我不知道增量备份解决scheme,但我可以想出两种方法来实现你所要求的。

你可以看看运行pg_basebackup(如果我没有弄错)的酒保,然后将WALloggingstream到酒保服务器。 这有一个缺点,就是你需要一个服务器经常运行酒保,而不是每个月的第一个。 但是,它具有能够基于特定date和时间创build数据库的优点。

我能想到的另一个解决scheme是尝试使用快照文件系统。 我只有ZFS的经验,但BTRFS也应该工作。 然后在每个月的第一天,您可以创build一个主pipe数据库的文件系统的增量快照,并在出现问题时进行恢复。 但是,假设您已经有一个正在运行的数据库,那么这将是一个问题,除非您将其用于您为此启动的只读副本。

如果您使用AWS来托pipe您的Postgres数据库,您可以尝试使用由Heroku创build的工具来从EC2备份到S3,称为Wal-E