Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Best method for PostgreSQL incremental backup

I am currently using pg_dump piped to gzip piped to split. But the problem with this is that all output files are always changed. So checksum-based backup always copies all data.

Are there any other good ways to perform an incremental backup of a PostgreSQL database, where a full database can be restored from the backup data?

For instance, if pg_dump could make everything absolutely ordered, so all changes are applied only at the end of the dump, or similar.

like image 749
Dennis Thrysøe Avatar asked Apr 03 '11 12:04

Dennis Thrysøe


People also ask

What is incremental backup in PostgreSQL?

PostgreSQL provides the incremental backup functionality to the user, in which that PostgreSQL server saves all user modified data or we can say different transactions such as update, insert and delete and at the same time it performs the write operation into a WAL log file.

Which backup is faster incremental or differential?

Advantages of Incremental backup The result is a much smaller, faster backup. The characteristic of incremental backups is the shorter the time interval between backups, the less data to be backed up.

Which backup method is fastest?

Full Backup This is the most time-consuming backup of all methods to perform and may put a strain on your network if the backup is occurring on the network. But it's also the quickest to restore from because all the files you need are contained in the same backup set.

What are different approaches to backing up PostgreSQL data?

There are three fundamentally different approaches to backing up PostgreSQL data: SQL dump. File system level backup. Continuous archiving.


2 Answers

Update: Check out Barman for an easier way to set up WAL archiving for backup.

You can use PostgreSQL's continuous WAL archiving method. First you need to set wal_level=archive, then do a full filesystem-level backup (between issuing pg_start_backup() and pg_stop_backup() commands) and then just copy over newer WAL files by configuring the archive_command option.

Advantages:

  • Incremental, the WAL archives include everything necessary to restore the current state of the database
  • Almost no overhead, copying WAL files is cheap
  • You can restore the database at any point in time (this feature is called PITR, or point-in-time recovery)

Disadvantages:

  • More complicated to set up than pg_dump
  • The full backup will be much larger than a pg_dump because all internal table structures and indexes are included
  • Does not work well for write-heavy databases, since recovery will take a long time.

There are some tools such as pitrtools and omnipitr that can simplify setting up and restoring these configurations. But I haven't used them myself.

like image 122
intgr Avatar answered Sep 28 '22 00:09

intgr


Also check out http://www.pgbackrest.org

pgBackrest is another backup tool for PostgreSQL which you should be evaluating as it supports:

  • parallel backup (tested to scale almost linearly up to 32 cores but can probably go much farther..)
  • compressed-at-rest backups
  • incremental and differential (compressed!) backups
  • streaming compression (data is compressed only once at the source and then transferred across the network and stored)
  • parallel, delta restore (ability to update an older copy to the latest)
  • Fully supports tablespaces
  • Backup rotation and archive expiration
  • Ability to resume backups which failed for some reason
  • etc, etc..
like image 44
Stephen Frost Avatar answered Sep 27 '22 23:09

Stephen Frost