web-dev-qa-db-fra.com

Comment faire une sauvegarde incrémentielle toutes les heures dans Postgres?

Essayer de faire une sauvegarde incrémentielle toutes les heures d'un seul serveur Postgres (Win7 64).

J'ai la configuration suivante dans postgresql.conf:

max_wal_senders = 2
wal_level       = archive
archive_mode    = on
archive_command = 'copy "%p" "c:\\postgres\\foo\\%f"'

(redémarrer)

J'ai fait une sauvegarde de base avec pg_basebackup -U postgres -D ..\foo -F t -x

Ce qui a fait un gros base.tar fichier dans le dossier foo et ajouté quelques fichiers 16,384 KB, qui je suppose sont des WAL.

Ce que je ne comprends pas, c'est pourquoi les WAL dans foo ne changent pas. Les WAL dans data/pg_xlog changement. Pg n'est pas censé les copier? Comment décide-t-il de le faire?

Peut-être que je dois définir archive_timeout=3600?

J'ai vu plusieurs sites (listes de diffusion de pg, page postgres de bacula) qui disent que vous devez appeler pg_start_backup () et pg_stop_backup (), mais je pense que ceux-ci ne sont pas requis. Est-ce vrai?

Questions secondaires:

  1. À quelle fréquence les WAL dans data/pg_xlog être écrit? Qu'est-ce qui déclenche une écriture?

    Il semble mettre à jour un WAL si je fais du DML alors \q en psql. Ou modifiez un tableau dans pgAdmin puis fermez la fenêtre. J'ai pensé qu'il écrirait sur commit.

  2. Les meilleures pratiques? pg_basebackup une fois par semaine? Archiver les WAL sur la même machine que PG ou une machine distante?

18
Neil McGuigan

Vous souhaitez effectuer une sauvegarde incrémentielle du dossier d'archivage sur le stockage distant.

Si vous devez restaurer à partir de la sauvegarde, le scénario de base est que vous auriez besoin de votre sauvegarde de base comme point de départ et de tout le contenu du dossier d'archivage pour relire l'activité transactionnelle qui s'est produite entre le point de départ et le crash.

De plus, pour éviter que les fichiers du dossier d'archives ne s'empilent pour toujours, vous souhaitez effectuer une nouvelle sauvegarde de base de temps en temps et supprimer les fichiers qui ont été archivés avant la nouvelle sauvegarde de base.

5
Daniel Vérité

Il existe un outil existant qui vous aidera beaucoup, WAL-E . Il fournit un archive_command et restore_command pour PITR à S3.

Il n'y a aucune commande à exécuter incrémentielle ou sauvegardes logiques différentielles . pg_dump ne peut pas prendre une valeur incrémentielle ou différentielle. La seule façon de le faire est l'archivage des journaux.

En théorie, vous pouvez prendre une nouvelle sauvegarde complète, faire un diff binaire entre celle-ci et la dernière sauvegarde et télécharger le diff. Cela me semble cependant une manière fragile et inefficace de faire les choses, et je ne le recommanderais vraiment pas.

De plus, PgBarman prend en charge l'intégration avec S3 via des scripts de raccordement et automatisera une grande partie de la rotation et de la gestion des sauvegardes pour vous. Encore une fois, cela peut ne pas être une option sous Windows.

8
Craig Ringer