# su postgres -c 'pg_dump freedom' | gzip > freedom.pg_dump.gz
# su postgres -c 'pg_dump --table doc1201 freedom' > doc1201.sql
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
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,…).
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 :
| Variable | Explication |
|---|---|
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.
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).
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.
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