web-dev-qa-db-fra.com

Meilleure méthode pour la sauvegarde incrémentielle PostgreSQL

J'utilise actuellement pg_dump redirigé vers gzip redirigé vers split. Mais le problème est que tous les fichiers de sortie sont toujours modifiés. La sauvegarde basée sur la somme de contrôle copie donc toujours toutes les données.

Existe-t-il d'autres bons moyens d'effectuer une sauvegarde incrémentielle d'une base de données PostgreSQL, où une base de données complète peut être restaurée à partir des données de sauvegarde?

Par exemple, si pg_dump pourrait tout rendre absolument ordonné, donc toutes les modifications ne sont appliquées qu'à la fin du vidage, ou similaire.

55
Dennis Thrysøe

Mise à jour: Consultez Barman pour un moyen plus simple de configurer l'archivage WAL pour la sauvegarde.

Vous pouvez utiliser la méthode archivage WAL continu de PostgreSQL . Vous devez d'abord définir wal_level=archive, Puis effectuer une sauvegarde complète au niveau du système de fichiers (entre les commandes pg_start_backup() et pg_stop_backup()), puis copier simplement les fichiers WAL plus récents en configurant l'option archive_command.

Avantages:

  • Incrémentielles, les archives WAL incluent tout le nécessaire pour restaurer l'état actuel de la base de données
  • Presque pas de frais généraux, la copie de fichiers WAL est bon marché
  • Vous pouvez restaurer la base de données à n'importe quel point dans le temps (cette fonctionnalité est appelée PITR, ou récupération ponctuelle)

Désavantages:

  • Plus compliqué à configurer que pg_dump
  • La sauvegarde complète sera beaucoup plus volumineuse qu'un pg_dump car toutes les structures de table internes et les index sont inclus
  • Ne fonctionne pas bien pour les bases de données lourdes en écriture, car la récupération prendra beaucoup de temps.

Il existe des outils tels que pitrtools et omnipitr qui peuvent simplifier la configuration et la restauration de ces configurations. Mais je ne les ai pas utilisés moi-même.

55
intgr

Consultez également http://www.pgbackrest.org

pgBackrest est un autre outil de sauvegarde pour PostgreSQL que vous devriez évaluer car il prend en charge:

  • sauvegarde parallèle (testé pour évoluer de façon presque linéaire jusqu'à 32 cœurs mais peut probablement aller beaucoup plus loin ..)
  • sauvegardes compressées au repos
  • sauvegardes incrémentielles et différentielles (compressées!)
  • compression en continu (les données sont compressées une seule fois à la source, puis transférées sur le réseau et stockées)
  • parallèle, restauration delta (possibilité de mettre à jour une ancienne copie vers la dernière)
  • Prise en charge complète des espaces de table
  • Rotation de la sauvegarde et expiration de l'archive
  • Possibilité de reprendre les sauvegardes qui ont échoué pour une raison quelconque
  • etc..
8
Stephen Frost

Une autre méthode consiste à sauvegarder en texte brut et à utiliser rdiff pour créer des différences incrémentielles.

1
Scott Marlowe