Dans PostgreSQL, la sauvegarde et la récupération sont très conviviales par rapport à d'autres bases de données. Beaucoup d'entre eux ne seront pas d'accord avec cela, ok ne nous lançons pas dans le débat. En ce qui concerne les sauvegardes, PostgreSQL ne prend pas en charge la sauvegarde incrémentielle, mais il existe des outils de sauvegarde très cohérents et des solutions de contournement au niveau du système d'exploitation pour atteindre cet objectif.
Ma présentation illustrée sur PostgreSQL Backup and Recovery donne une idée conceptuelle complète. En regardant dans le diagramme, vous pouvez déterminer quelles sauvegardes peuvent être utilisées pour restaurer ou récupérer.
Sauvegarde logique
Utilitaires pg_dump, pg_restore et pg_dumpall utilisés pour les sauvegardes logiques. pg_dump et pg_restore aideront à effectuer des sauvegardes au niveau de la base de données, au niveau du schéma et au niveau de la table. Pg_dumpall utilisé pour le vidage au niveau du cluster.
Trois formats sont pris en charge avec pg_dump, le format Plain SQL, le format personnalisé et le format Tar. Les vidages au format personnalisé et tar sont compatibles avec l'utilitaire pg_restore tandis que les vidages au format Plain SQL sont compatibles avec l'utilitaire psql pour la restauration.
Vous trouverez ci-dessous des exemples pour chaque niveau de sauvegarde et avec les commandes de restauration associées.
Remarque :Définissez les valeurs par défaut pour PGDATABASE, PGUSER, PGPASSWORD et PGPORT dans .bash_profile (variables d'environnement sous Windows)
Vidage et restauration du format SQL brut
$ pg_dump -U username -Fp dbname> filename
ou
$ pg_dump -U username dbname -f filename
ou
$ pg_dump -Fp -U username dbname -f filename
Pour restaurer, utilisez la commande psql
$ psql -U username -f filename dbname
ou
postgres=# i SQL-file-name / /dans le terminal psql avec l'option i
Format personnalisé
$ pg_dump -Fc dbname -f filename
$ pg_restore -Fc -U username -d dbname filename.dmp
Format tar
$ pg_dump -Ft dbname -f filename
$ pg_restore -U username -d dbname filename
ou
$ cat tar-file.tar | psql -U nom d'utilisateur nombd
Remarque :Les vidages au niveau du schéma et au niveau des tables peuvent être effectués de la même manière en ajoutant des options associées.
Vidage au niveau du cluster :
$pg_dumpall -p portnumber> filename
Pour la restauration, utilisez la commande psql
$ psql -f filename
Il existe le meilleur moyen de prendre des décharges et de restaurer des méthodologies. En particulier, le livre de Simon Riggs et Hannu Krosing - "PostgreSQL 9 Administration Cookbook - 2010" est un bon moyen de commencer avec PostgreSQL Backup and Recovery publié par www.2ndQuadrant.com.
Sauvegarde physique (sauvegarde du système de fichiers)
Sauvegarde à froid :
Dans la sauvegarde à froid, il s'agit d'une simple sauvegarde du système de fichiers du répertoire /data lorsque l'instance Postgres est en panne, ce qui signifie que pour obtenir une sauvegarde du répertoire de données cohérente, le serveur de base de données doit être arrêté avant la copie. PostgreSQL offre la possibilité de conserver pg_xlog et pg_tblspce dans différents points de montage via softlink. Lors de la copie du répertoire /data, y compris les données du lien symbolique, utilisez la commande ci-dessous.
tar czf backup.tar.gz $PGDATA
ou
cp -r $PGDATA /backup/
ou
rsync -a $PGDATA /wherever/data
Sauvegarde à chaud (sauvegarde en ligne) :
Dans Hot Backup, le cluster sera opérationnel et la base de données devrait être en mode Archive Log. Deux fonctions système informeront l'instance du démarrage et de l'arrêt du processus de sauvegarde à chaud (pg_start_backup(),pg_stop_backup()). Avant d'aller de l'avant avec la sauvegarde en ligne, discutons du mode de journal d'archivage de la base de données qui est obligatoire pour les sauvegardes en ligne.
Activation de l'archivage WAL :
Mes prochains messages vous donneront des informations sur PITR / Tunning WAL, etc., actuellement nous examinons l'archivage WAL. Dans le système de base de données PostgreSQL, la base de données réelle "écrit" dans un fichier supplémentaire appelé journal d'écriture anticipée (WAL) sur le disque. Il contient un enregistrement des écritures effectuées dans le système de base de données. En cas de crash, la base de données peut être réparée/récupérée à partir de ces enregistrements.
Normalement, le journal à écriture anticipée est enregistré à intervalles réguliers (appelés points de contrôle) comparé à la base de données, puis supprimé car il n'est plus nécessaire. Vous pouvez également utiliser le WAL comme sauvegarde car il existe un enregistrement de toutes les écritures effectuées dans la base de données.
Concept d'archivage WAL :
Le journal d'écriture anticipée est composé de 16 Mo chacun, appelés segments. Les WAL résident dans le répertoire pg_xlog et c'est le sous-répertoire du "répertoire de données". Les noms de fichiers seront nommés numériquement dans l'ordre croissant par l'instance PostgreSQL. Pour effectuer une sauvegarde sur la base des WAL, il faut une sauvegarde de base c'est-à-dire une sauvegarde complète du répertoire de données, et des Segments WAL entre la sauvegarde de base et la date courante.
La configuration de l'archivage des segments WAL peut être choisie en définissant les deux paramètres de configuration archive_command et archive_mode dans le postgresql.conf. Faire passer le cluster en mode Archive-log nécessite RESTART.
archive_mode=on/off (paramètre booléen)
archive_command ='cp –i %p / Archive/Location/ f% 'Remarque : %p pour le fichier à copier avec le chemin utilisé comme nom de fichier et % f sans entrée de répertoire pour le fichier de destination.
Pour plus d'informations sur le processus d'archivage, reportez-vous à la publication PostgreSQL 9.0 Memory &Processess.
Sauvegarde en ligne :
Pour effectuer une sauvegarde en ligne :
Étape 1 :lancez pg_start_backup('lable') dans le terminal psql
postgres=# select pg_start_backup('fb');
Étape 2 :copiez au niveau du système d'exploitation le répertoire $PGDATA vers n'importe quel emplacement de sauvegarde
$ cp -r $PGDATA /anylocation
Étape 3 :lancez pg_stop_backup() dans le terminal psql.
postgres=# select pg_stop_backup();Remarque : Il n'est pas nécessaire que ces deux fonctions s'exécutent dans la même connexion à la base de données. Le mode de sauvegarde est global et persistant.
Dans PostgreSQL, il n'y a pas de catalogue pour stocker l'heure de début et de fin de la sauvegarde en ligne. Cependant, lorsque la sauvegarde en ligne est en cours, quelques fichiers sont créés et supprimés.
pg_start_backup(‘label’) et pg_stop_backup sont les deux fonctions système pour effectuer la sauvegarde en ligne. Avec pg_start_backup(‘label’) un fichier backup_label est créé sous le répertoire $PGDATA et avec pg_stop_backup() un fichier ‘wal-segment-number.backup’ créé sous $PGDATA/pg_xlog. Backup_label donnera l'heure de début et l'emplacement du point de contrôle du segment WAL, il informera également l'instance PostgreSQL que le cluster est en BACKUP-MODE. Le fichier 'wal-segment-number.backup' sous le répertoire $PGDATA/pg_xlog décrit l'heure de début et de fin, l'emplacement du point de contrôle avec le numéro de segment WAL.
Remarque :Après pg_stop_backup(), le fichier backup_label est supprimé par l'instance PostgreSQL.
Postez vos commentaires, suggestions.