Bases de données MySQL : backup quotidien
Voici un petit script tout simple qui vous permettra de gérer une sauvegarde quotidienne de vos bases de données MySQL. Il utilise mysqldump, mais sans l’option all-databases. Il génère donc un fichier par base et par jour (plus pratique pour la restauration des backups). La date de chaque backup se trouve dans le nom du fichier et 30 jours d’historique sont conservés. Il est donc possible de récupérer l’état de chaque base de J à J-30
Mise en garde
Attention, ce script crée un dossier /home/backupsql (paramètre modifiable) dans lequel il crée et il supprime des fichiers. N’utilisez pas ce répertoire pour stocker quoi que ce soit…
Le script
#!/bin/bash
#
# PARAMETRAGE
#
PASSWORD=xxxxxxxx
CHEMINSQL=/var/lib/mysql
CHEMINBACKUPSQL=/home/backupsql
#
# SCRIPT BACKUP MYSQL
#
mkdir -p $CHEMINBACKUPSQL
find $CHEMINBACKUPSQL -mtime +30 -exec rm -f {} \;
for base in `ls $CHEMINSQL/`
do
if [ -d $CHEMINSQL/$base ]
then
mysqldump -u root --password=$PASSWORD $base > $CHEMINBACKUPSQL/`date -I`-$base.sql
fi
done
Appelez le par exemple backup.sh et n’oubliez pas de le mettre en cron (avec l’instruction « sh /chemin/que/vous/voulez/backup.sh« ) , une fois par jour (de préférence la nuit lorsque le trafic sur votre serveur est faible voire nul).
Explications
Il n’y a que 3 paramètres à modifier :
PASSWORD=xxxxxxxx CHEMINSQL=/var/lib/mysql CHEMINBACKUPSQL=/home/backupsql
PASSWORD est votre mot de passe root MySQL (pas le pass root du serveur). CHEMINSQL est le répertoire dans lequel se trouvent vos bases (probablement /var/lib/mysql). CHEMINBACKUPSQL est évidemment le répertoire dans lequel vous voulez stocker les backups.
Le reste n’est qu’une petite boucle qui va parser le répertoire CHEMINSQL et effectuer un mysqldump sur chaque base trouvée.
Notez la ligne :
find $CHEMINBACKUPSQL -mtime +30 -exec rm -f {} \;
Elle est destinée à effacer tous les fichiers vieux de plus de 30 jours dans le répertoire CHEMINBACKUPSQL, on conserve ainsi 1 mois de sauvegardes. Si vous souhaitez modifier cette période de temps, il suffit de modifier le 30 par le nombre de jours voulus.
Bonjour Nicolas. Je ne comprends pas: les bases mysql, elles sont dans /var/lib/mysql ou dans /home/mysql sur gentoo (ovh release 2) ?
Dans /home/mysql (et il y a un lien symbolique de /var/lib/mysql vers /home/mysql).
donc dans ton script, on aurait pu remplacer pour une Gentoo OVH Release 2: CHEMINSQL=/var/lib/mysql par CHEMINSQL=/home/mysql. J’ai bon ?
Tout à fait.
/var/lib/mysql est d’ailleurs le chemin classique vers les bases de données MySQL. Il se fait simplement que, sur la release OVH, les bases ont été déplacées pour que ces dernières se trouvent sur la « grosse » partition (/home) et non pas sur la partition racine.