
#  Mise en place de sauvegardes des bases de données ScoDoc 
Il est ***vivement recommandé*** de mettre en place une stratégie de sauvegarde permettant de rétablir le service en minimisant les pertes de données à la suite d'un accident majeur mais probable comme: crash de disque dur, bug, vol du serveur, incendie...

Nous recommandons d'agir à deux niveaux:

 * sauvegarde des bases de données postgresql: dump des bases dans des fichiers. Le script donné ci-dessous peut se charger de gérer cela.

 * sauvegarde du système complet (et de ses disques durs): la forme dépend de l'environnement (machine virtuelle ou non...). Dans tous les cas, les données doivent être sauvegardées dans une salle (voire un bâtiment) différente de celle abritant le serveur ScoDoc (vols ou incendies). Typiquement, une sauvegarde quotidienne (nocturne) est suffisante. Le script `/opt/scodoc/instance/Products/ScoDoc/misc/backup_to_remote_server.sh` peut être utilisé pour cela.

Notons que ScoDoc sauvegarde certaines informations sous le répertoire `/opt/scodoc` (en particulier les photos, les documents archivés et divers réglages): *il est absolument nécessaire de sauvegarder aussi ce répertoire*, en plus des bases de données SQL.


###  Dump des bases de données 
Le script `backup_db` (ou bien `backup_db2`, fournis dans le répertoire `.../ScoDoc/misc`) peut être utilisé pour effectuer des sauvegardes automatisées des bases de données SQL. Les données sont extraites de la base et écrites sur le disque local du serveur, qui doit bien entendu être sauvegardé par d'autres moyens, comme indiqué ci-dessus.

Le nouveau (mars 2014) script `backup_db2` permet de conserver des sauvegardes de chaque heure durant les 48 (par défaut) dernières heures, des sauvegardes quotidiennes des 40 derniers jours, hebdomadaires des 30 dernières semaines, et mensuelles des 200 derniers mois (tout ceci est paramétrable dans le script `.../ScoDoc/backup_rotation.sh`).

Par défaut, les fichiers de sauvegardes sont créés dans le répertoire de l'utilisateur `postgres` (actuellement `/var/lib/postgresql/`).


En tant que `root` sur le serveur, faire:
```
# su postgres
# cd
# crontab -e
```
et ajouter:
```
10 * * * * /opt/scodoc/Products/ScoDoc/misc/backup_db2 SCOUSERS
15 * * * * /opt/scodoc/Products/ScoDoc/misc/backup_db2 SCOXXXX
20 * * * * /opt/scodoc/Products/ScoDoc/misc/backup_db2 SCOYYYY
...
```
Remplacer `SCOXXXX` et `SCOYYYY` par les noms des bases de vos départements (la commande `psql -l` permet de lister toutes les bases).



###  En cas de problème: restaurer la base à partir d'une sauvegarde 
<img src="/img/alert.png" style="vertical-align: bottom; margin:0 0 0 0;" alt="/!\" /> Attention, certaines informations sont stockées dans des fichiers et non dans la base de données: configuration du logiciel, photos des étudiants. Ce paragraphe ne traite que de la restauration à de la base de données.

 1. Choisir la sauvegarde à utiliser, en fonction de la date à partir de laquelle on a fait une erreur (eg suppression non intentionnelle d'un semestre...). Le fichier se trouve sous `/var/lib/postgresql/SCOXXX-BACKUPS`où `XXX` est le département concerné. Utiliser par exemple `ls -lrt` pour visualiser les sauvegardes triées par date. (Note: la version précédente du script écrivait dans `/var/lib/postgresql/BACKUP-SCOXXX`).

 1. Copier le fichier de sauvegarde choisi et le décomprimer; par exemple: 

```
 cp /var/lib/postgresql/SCOGEII-BACKUPS/backup.hourly/2014-03-04T05\:35/SCOGEII_pgdump.gz /tmp
 gunzip /tmp/SCOGEII_pgdump.gz
```
 
 3. Recharger la base complète pour le département concerné. <img src="/img/alert.png" style="vertical-align: bottom; margin:0 0 0 0;" alt="/!\" /> Attention, cette opération effacera et remplacera) le contenu de la base de données actuelle... 
```
# en tant que root...
/etc/init.d/scodoc stop  # arret du serveur
su postgres
dropdb SCOXXX # <<< par exemple SCOGEII
pg_restore -C -d postgres /tmp/SCOXXX_pgdump # <<< changer le nom du fichier 
exit # retour a l'utilisateur root
/etc/init.d/scodoc start # relance ScoDoc
```



 

