Sauvegarder et restaurer la BDD de MediaWiki

De La Mouche VII

Comment sauvegarder et restaurer la base de données de son wiki favori ? Grave question en vérité… Non, pas tant que ça en fait : cela se passe comme pour toute autre base de données. [1]

Sauvegarde

Pour sauvegarder la base de données, utilisez la commande suivante (où BaseDeDonnées est la base de données de MediaWiki et Utilisateur l'utilisateur qui accède à la base) :

$ mysqldump -u Utilisateur -p -B BaseDeDonnées > FichierSauvegarde.dump

Puis compressez à l'aide de bzip2 (qui semble meilleur que gzip sur ce type de fichiers) :

$ bzip2 -9 FichierSauvegarde.dump

Pour tout faire en une seule commande :

$ mysqldump -u Utilisateur -p -B BaseDeDonnées | bzip2 -9 > FichierSauvegarde.dump.bz2

Restauration

Attention : la nouvelle base doit avoir le même nom que l'ancienne, car le nom de la base est inclus dans le fichier dump (que vous pouvez éditer, au besoin). Si vous lancez ces commandes avec un vieux backup sur une base plus récente, vous risquez de perdre des données.

Avant de restaurer notre base de données, il faut recréer une base vide, comme fait lors de l'installation de MediaWiki :

$ mysql -u root -p
mysql> create database BaseDeDonnées ;
mysql> grant all on BaseDeDonnées.* to 'Utilisateur'@'localhost' identified by 'MotDePasseEnClair' ;
mysql> exit

Puis la restauration à proprement parler. Décompression du fichier de sauvegarde...

$ bunzip2 FichierSauvegarde.dump.bz2

... et injection dans la base vide :

$ mysql -h localhost -D BaseDeDonnées -u Utilisateur -p < FichierSauvegarde.dump

Ce qui donne, en une seule commande :

$ bunzip2 -c FichierSauvegarde.dump.bz2 | mysql -h localhost -D BaseDeDonnées -u Utilisateur -p

Script de sauvegarde automatique

La sauvegarde de la base de données est une chose, mais il faut également sauvegarder les fichiers du wiki. Le plus simple est de sauvegarder tout le répertoire de MediaWiki. Et si on peut automatiser tout ça, c'est mieux. Mettez-donc ce qui suit dans un fichier appelé par exemple sauvegarde_mediawiki.sh (je manque d'inspiration) :

#!/bin/sh
#
# Déclarations des variables
DATE=`date +'%Y-%m-%d'` # date au format année-mois-jour
REP_SAUV="/chemin/vers/le/répertoire/de/sauvegarde"
REP_MW="/chemin/vers/le/répertoire/de/MediaWiki"
#
# Préparatifs
if [! -d "$REP_MW" ] ; then
    echo "Erreur : le répertoire à sauvegarder ($REP_MW) n'existe pas !"
    exit 1
fi
if [ ! -d "$REP_SAUV" ] ; then
    mkdir -p "$REP_SAUV" || exit 2
fi
#
# Sauvegarde des fichiers
tar cf - "$REP_MW" | bzip2 -9 > "${REP_SAUV}/mediawiki_${DATE}.tar.bz2
#
# Sauvegarde de la base de données
mysqldump -u Utilisateur -pMotDePasseEnClair -B BaseDeDonnées | bzip2 -9 > "${REP_SAUV}/mediawiki_${DATE}.dump.bz2"

Adaptez le contenu des variables REP_SAUV et REP_MW, respectivement en indiquant le répertoire où les sauvegardes seront stockées et le répertoire d'installation de MediaWiki.

Donnez-vous le droit d'exécuter ce fichier :

$ chmod u+x sauvegarde_mediawiki.sh

Il ne reste qu'à indiquer à notre ami cron qu'il doit exécuter ce script à fréquence régulière :

$ crontab -e

Par exemple, si vous désirez sauvegarder tous les deux jours à trois heures du matin, indiquez :

# m h dom mon dow command
  0 3 */2  *   *  /chemin/vers/sauvegarde_mediawiki.sh

Quittez, sauvegardez, c'est prêt ! Dégustez très frais.

Notes

  1. Lorsque j'ai commencé à écrire cette page, il y avait un problème avec les accents dans les titres des pages, qui étaient mal restaurés avec les options par défaut. Il fallait forcer l'utilisation de l'encodage latin1 (ISO-8859-1). Le problème semble néanmoins être résolu, et on peut à présent sauvegarder la base de données aussi bien en latin1 qu'en UTF-8.