Fr:Backups

From Davical
Jump to navigationJump to search
Help
Available languages

Sauvegarde complete

  • 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:
pg_dump -Fc davical >davical.pgdump
  • Pour restaurer la base de données utilisez la commande PostgreSQL pg_restore:
createdb --owner davical_dba --encoding UTF8 --template template0 davical
pg_restore -Fc -d davical davical.pgdump

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.

#!/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"

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

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

# Test si le répertoire de sauvegarde existe
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;

# Test si le fichier source est disponible
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;

# Test if backup increment already exists
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
#   chgrp backup /var/backups/postgres/${DST_FILENAME}.gz &&
    # 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

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.

Besoin de relécture Cet article ou cette section nécessitent d'être 'relu'. Si vous connaissez bien le français, n'hésitez pas! Merci pour DAViCal.