Sauvegarde et restauration des bases de données

Sauvegarde manuelle des bases de données

# su postgres -c 'pg_dump freedom' | gzip > freedom.pg_dump.gz


Sauvegarde d'une seule table (famille)

# su postgres -c 'pg_dump --table doc1201 freedom' > doc1201.sql


Sauvegarde automatique

Installation

Il existe un paquet fournissant un script permettant de sauvegarder automatiquement les bases de données et les fichiers de Dynacase.

Installation (sous Debian) :

aptitude install ankpsql-tools 

Fonctionnement

Le système est configuré pour réaliser cycliquement une sauvegarde sur disques de l'ensemble des informations nécessaires au fonctionnement de Dynacase (bases, fichiers,…).

Configuration de la sauvegarde

Cette sauvegarde est paramétrable. L'ensemble des éléments de configuration se trouvent dans le répertoire /etc/ankpsql-tools. Le fichier ankpsql-tools.conf permet de déterminer le cycle, le répertoire de sauvegarde et le nombre de sauvegardes conservées en ligne.

#
# Anakeen postgres sql backup/restore configuration
# -------------------------------------------------
#
# BACKUP_WDIR root directory where backup are stored
BACKUP_DIR=/var/freedom-backup
BACKUP_WDIR=$BACKUP_DIR/tmp
BACKUP_ADIR=$BACKUP_DIR/archives

# BACKUP_CYCLE : D dayly W weekly M monthly

BACKUP_CYCLE=W

# BACKUP_KEEP : backup count

BACKUP_KEEP=3


# Used only when qmail is installed

BACKUP_MAILTO=postmaster@<domaine>
BACKUP_USER=postgres
BACKUP_PGSTOP=1
BACKUP_PGRC="/etc/rc.d/init.d/postgresql"
BACKUP_PGDUMP_CMD="pg_dump -D"

Les bases à sauvegarder sont spécifiées dans le dossier /etc/ankpsql-tools/db.d qui n'existe pas par défaut. Dans ce dossier, on doit trouver un fichier par base à sauvegarder. Ce fichier doit être postfixé par .db .

Par exemple, le fichier localhost-freedom.db contient :

ANKDB_SERVICE=default-freedom
ANKDB_BASE=freedom
ANKDB_HOST=localhost
ANKDB_PORT=5432
ANKDB_USER=freedom
ANKDB_PASS=secret
ANKDB_ENCODING=latin1
ANKDB_FS="/var/freedom/freedom-dev"

Explication des variables :

VariableExplication
ANKDB_SERVICE Nom du pg_service à sauvegarder, défini dans les pgservices
ANKDB_BASE Nom de la base à sauvegarder
ANKDB_HOST Nom du serveur hôte de la base de données
ANKDB_PORT Port de dialogue avec la base de données
ANKDB_USER Nom de l'utilisateur déclaré dans les pgservice
ANKDB_PASS Mot de passe de l'utilisateur déclaré dans les pgservice
ANKDB_ENCODING Encoding de la base de données
ANKDB_FS liste de répertoires, séparés par des blancs, qu'il faut sauvegarder avec la base

Pour une sauvegarde de Dynacase, il faut au minimum sauvegarder la base anakeen et la base Dynacase.

Espaces de sauvegarde

Les espaces de sauvegarde sont situés dans le répertoire identifié par la variable de configuration BACKUP_DIR. Dans son sous-répertoire archives sont créés autant de sous-répertoires que de bases à sauvegarder. Chacun des répertoires 'base' peut contenir plusieurs sous répertoire correspondants aux différents cycles de sauvegarde, nommés de à n ( étant le plus récent). Chacun de ces répertoires contient : le dump compressé de la base (<base>.dump.gz) et les éventuelles archives compressées des rootdirs associés à la base (<base>-fs-x.tgz).

Procédures particulières

La sauvegarde peut être forcée en dehors de son cycle par la commande (root) :

# /usr/local/ankpsql-tools/ankpsql-backup --force

Pour sauvegarder dans un répertoire particulier, taper la commande :

# /usr/local/ankpsql-tools/ankpsql-backup --ddir <répertoire existant>

Pour ne sauvegarder qu'une base (et ses éventuels espaces de fichiers), taper la commande :

# /usr/local/ankpsql-tools/ankpsql-backup --base <base>

Toutes ces options peuvent être utilisées conjointement.

Restauration

La restauration des bases se déroule sous le compte root sur le serveur.

Pour Dynacase-platform 2.12, il est nécessaire de désactiver l'exécution des cron durant la restauration afin d'éviter que le cron fdl_cronexec ne crée des éléments parasites avant l'injection du dump dans les nouvelles bases.

# /etc/init.d/cron stop

Il faut tout d'abord se rendre dans le répertoire contenant la dernière sauvegarde (cf. paragraphe précédent) et la décompresser :

# cd <répertoire de la sauvegarde>
# gunzip freedom.pg_dump.gz

Il faut dans un premier temps stopper le serveur http afin de se protéger de tout accès à la base.

# /etc/init.d/apache2 stop

Ensuite, lancer l'interpréteur de commande PSQL et supprimer les bases actuelles Ensuite se connecter sous le compte postgres et supprimer la base actuelle (pour éventuellement la sauvegarder se reporter au paragraphe “Procédures particulières”) :

# su postgres -c 'psql'
postgres=# DROP DATABASE "freedom";

L'étape suivante consiste à recréer la base et à importer les données sauvegardées :

# su postgres -c 'psql'
postgres=# CREATE DATABASE "freedom" WITH OWNER "anakeen" NCODING 'UTF8';
postgres=# ALTER DATABASE "freedom" SET DateStyle='sql,european';
postgres=# \c "freedom"
postgres=# \q

# su postgres -c 'psql freedom' < freedom.pg_dump > /dev/null

Ré-itérer l'opération pour re-créer et re-importer d'autres bases si besoin.

Éventuellement, si des arborescences de fichiers sont sauvegardées avec la base, les restaurer.

# tar -C / -zxf <répertoire de sauvegarder>/<basename>-fs-[0...n].tgz

Enfin redémarrer le serveur http (et le service cron) :

# /etc/init.d/apache2 start
# /etc/init.d/cron start
freedom_3.1/manex/sauvegarde.txt · Dernière modification: 28/09/2010 11:17 par nicolas.thing