Aller au contenu

Mise en place de sauvegardes des bases de données ScoDoc 9

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.

Notons que ScoDoc sauvegarde de nombreuses informations sous le répertoire /opt/scodoc-data (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_db9 (fourni dans le répertoire /opt/scodoc/tools/backups) 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 script backup_db9 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 /opt/scodoc/tools/backups/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:

15 * * * * /opt/scodoc/tools/backups/backup_db9 SCODOC

(ScoDoc9 utilise par défaut la base nommée SCODOC, adaptez si vous l'avez configuré sur une autre base).

En cas de problème: restaurer la base à partir d'une sauvegarde

🚸 Attention, certaines informations sont stockées dans des fichiers (sous /opt/scodoc-data) et non dans la base de données: configuration du logiciel, photos des étudiants, archives des PV, fichiers Apogée, etc. Ce paragraphe ne traite que de la restauration de la base de données.

Rappel: en ScoDoc 9, il n'y a qu'une seule base de donnée SQL, nommée par défaut SCODOC. Cette base contient les données des départements et la définition des comptes utilisateurs.

  1. Choisir la sauvegarde à utiliser, en fonction de la date à partir de laquelle on a fait une erreur (par ex. suppression non intentionnelle d'un semestre...). Le fichier se trouve sous /var/lib/postgresql/SCODOC-BACKUPSXXX est concerné. Utiliser par exemple ls -lrt pour visualiser les sauvegardes triées par date.

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

 cp /var/lib/postgresql/SCODOC-BACKUPS/backup.hourly/2021-09-17T19\:15/SCODOC_pgdump.gz  /tmp
 gunzip /tmp/SCODOC_pgdump.gz
  1. Recharger la base complète. 🚸 Attention, cette opération effacera et remplacera le contenu de la base de données actuelle !
# en tant que root...
systemctl stop scodoc9  # arret du serveur
su - scodoc
dropdb SCODOC # <<< votre base production 
createdb -E UTF-8  SCODOC
pg_restore -d SCODOC /tmp/SCODOC_pgdump # (nom du fichier dump)
source venv/bin/activate
flask db upgrade # nécessaire seulement si sauvegarde ancienne
flask clear-cache

exit # retour a l'utilisateur root
systemctl start scodoc9 # relance ScoDoc

Déplacement de toute une installation

Les scripts ci-dessus ne se chargent que de la base de données SQL.

Pour créer une sauvegarde complète d'une installation, vous pouvez utiliser le script

    tools/save_scodoc9_data.sh /tmp/sauvegarde-scodoc.tgz

Ce script va générer une archive (tar, format .tgz) contenant non seulement la base de données SQL mais aussi tous les fichiers générés par votre ScoDoc: photos, configurations locales, archives, PV de jurys, logos, etc (tout ceci étant stocké sous /opt/scodoc-data).

Attention à l'espace disque: le répertoire destination (/tmpdans l'exemple ci-dessus) doit avoir de l'espace (sinon utilisez un autre répertoire dans lequel l'utilisateur scodoc puisse écrire, ou montez un autre disque. La commande df -hest votre amie).

Pour restaurer ce type de sauvegarde, sur une autre machine (ou plus tard sur la même), transférer le fichier généré (/tmp/sauvegarde-scodoc.tgz) dans l'exemple ci-dessus) et utiliser

    tools/restore_scodoc9_data.sh /tmp/sauvegarde-scodoc.tgz

(Note: la sauvegarde s'effectue comme utilisateur scodoc, en revanche le rechargement doit se faire en tant que root car il faut évidemment arrêter et relancer le service).