Fr:Backups

Sauvegarde complete
pg_dump -Fc davical >davical.pgdump
 * Les données de DAViCal sont enregistrées dans une base de données PostgreSQL. Vous devriez les sauvegarder périodiquement avec la commande PostgreSQL pg_dump:

createdb --owner davical_dba --encoding UTF8 --template template0 davical pg_restore -Fc -d davical davical.pgdump
 * Pour restaurer la base de données utilisez la commande PostgreSQL pg_restore:

Note
Si vous restaurez sur un nouveau serveur vous devrez créer la table des utilisateurs (habituellement 'davical_dba' et 'davical_app'), et vous devrez probablement modifier le fichier pg_hba.cong comme lors d'une nouvelle installation.

Sauvegarde incrémentale
PostgreSQL supporte les sauvegardes incrémentale automatique.

Qu'est ce que cela signifie?

Au lieu de sauvegarder la base de donnée entière -et devoir se souvenir de le faire- PostgreSQL enregistrera les modifications dans des 'fichiers incrémentés'.

Pourquoi vous devriez faire attention?

Vous devriez toujours garder de multiple sauvegarde de n'importe quel base de données. Si par exemple, vous ne conservez qu'une seule sauvegarde et qu'accidentellement vous effacer un évènement et écrasez votre sauvegarde, vous ne pourrez jamais restaurer ce dernier.

L'inconvénient de conserver plusieurs sauvegarde et l'utilisation rapide d'espace disque. Donc au lieux d'avoir plusieurs sauvegardes complète, il est plus judicieux de conserver une sauvegarde complète et d'enregistrer ke s changements au fur et a mesure depuis cette dernière.

Bénéfices des sauvegardes incrémentales:
 * restauration a un moment précis
 * sauvegardes automatiques
 * taille des sauvegardes optimisée

Il est important de noter que les sauvegardes incrémentale s'effectue sur l'ensemble des bases de données et non pas seulement les tables de DAViCal.

Comment configurer les sauvegardes incrémentales
Une page du manuel PostreSQL en parle ici (en)archivage continu, qui fournis un guide complet sur la mise en place d'une telle fonction et devrait être lu pour comprendre ce qui se passe.

Ici un guide basique pour la mise en place des sauvegardes en continu:

Créer un répertoire de sauvegarde et définir des autorisations mkdir /var/backups/postgres/ chown postgres:postgres /var/backups/postgres/ chmod 750 /var/backups/postgres/

Créer un script de sauvegarde Voici un exemple que j'enregistre dans /usr/local/bin/postgres-backup.
 * 1) !/bin/bash

BACKUP_DIR="/var/backups/postgres" POSTGRES_MANUAL="http://www.postgresql.org/docs/8.3/static/continuous-archiving.html" NOTIFY_EMAIL="root" NOTIFY_SUBJECT="Postgres backup fail - $0"

if test ${BASH_ARGC} -ne 2; then echo "The incorrect number of arguments were supplied" exit 1; fi
 * 1) Vérifiez si le nombre correct d'arguments a été donné

SRC_FILE=${1} DST_FILENAME=${2}
 * 1) Arguments copier dans des noms de variables convivial

if test ! -d ${BACKUP_DIR}; then echo "The usual postgres incremental backup has failed, the ${BACKUP_DIR} directory does not exist. Look at ${POSTGRES_MANUAL}" | mail -s "${NOTIFY_SUBJECT}" ${NOTIFY_EMAIL}; exit 1; fi;
 * 1) Test si le répertoire de sauvegarde existe

if test ! -f ${SRC_FILE}; then echo "The usual postgres incremental backup has failed, the source file (${SRC_FILE}) does not exist. Look at ${POSTGRES_MANUAL}" | mail -s "${NOTIFY_SUBJECT}" ${NOTIFY_EMAIL}; exit 1; fi;
 * 1) Test si le fichier source est disponible

if test ! -f ${BACKUP_DIR}/${DST_FILENAME}.gz; then # Make a compressed copy of the increment to the backup directory gzip -c ${SRC_FILE} > ${BACKUP_DIR}/${DST_FILENAME}.gz && # If you have included the postgres user in the backup group, uncomment the line below # Make the copy readable by the backup group # Make the copy readable by the owner and group only chmod 440 ${BACKUP_DIR}/${DST_FILENAME}.gz; else echo "The usual postgres incremental backup has failed, there is a filename conflict (${DST_FILENAME}). Look at ${POSTGRES_MANUAL}" | mail -s "${NOTIFY_SUBJECT}" ${NOTIFY_EMAIL}; exit 1; fi
 * 1) Test if backup increment already exists
 * 1)   chgrp backup /var/backups/postgres/${DST_FILENAME}.gz &&

Rendre le script exécutable chown postgres:postgres /usr/local/bin/postgres-backup chmod 550 /usr/local/bin/postgres-backup

Modifier PostgreSQL pour faire de l'archivage Vous de vez modifier votre fichier postgresql.conf, qui dans Debian est enregistré dans /etc/postgresql/8.3/main/ Ces options ont besoins d'être modifié. archive_mode = on                                       # Active l'archiavge archive_command = '/usr/local/bin/postgres-backup %p %f' # Quelle commande à lancer archive_timeout = 86400                                 # Forcer une sauvegarde tout les 7 jours

Relancer PostgreSQL /etc/init.d/postgresql-8.3 reload

Démarrer une sauvegarde complète de l'ensemble des bases de données sudo -u postgres psql postgres=# SELECT pg_start_backup('/var/backups/postgres/'); postgres=# \q

Archiver la sauvegarde complète tar czvf /var/backups/postgres/fullbackup-$(date +%Y%m%d).tar.gz /var/lib/postgresql/8.3/main/base/

Arrêter la sauvegarde complète des BDD sudo -u postgres psql postgres=# SELECT pg_stop_backup; postgres=# \q

C'est fait!

Comment restaurer une sauvegarde incrémentale
La page du manuel PostreSQL ici (en)archivage continu, explique aussi comment effectuer une restauration.