Sauvegarder et restaurer une base Mysql à chaud

Posted on 20 May 2010 by Thomas

Un (des) moyen de sauvegarder proprement une base Mysql est d’utiliser la commande mysqldump.
Cette commande permet d’effectuer la sauvegarde à chaud et peut séparer les squelettes des tables de leurs données (pratique par exemple pour transférer une base vers un autre serveur qui ne serait pas forcément du Mysql).

Voici un script shell qui va parser l’ensemble de vos bases Mysql puis effectuer la sauvegarde:

#!/bin/bash

user="login"
pass="mdp"
listdb=$(mysql --user=$user --password=$pass --exec="SHOW DATABASES;" | tail -n +2)

for dbname in $listdb; do

destdir="/usr/local/dumps/$dbname"

if [ -d $destdir ]; then
echo "Dumping $dbname database"
mysqldump --tab /usr/local/dumps/$dbname --opt --all $dbname --user=$user --password=$pass || echo "Error when dumping $dbname database"
else
mkdir /usr/local/dumps/$dbname
chown -R mysql:mysql /usr/local/dumps/$dbname
echo "Dumping $dbname database"
mysqldump --tab /usr/local/dumps/$dbname --opt --all $dbname --user=$user --password=$pass || echo "Error when dumping $dbname database"
fi
done
echo "Finished"
exit 0

Le script va ici aller mettre dans /usr/local/dumps/nomdelabase (le répertoire sera créé s’il n’existe pas) l’ensemble des squelettes des tables de chaque base au format .sql ainsi que les données au format .txt

A noter que vous pouvez très bien ne pas séparer les squelettes des données en supprimant l’argument –tab. Je vous invite à vous reporter à la doc de mysqldump pour voir l’ensemble des possibilités que vous offre cette commande.

Pour restaurer tout cela, on va utiliser les commandes suivantes (et pourquoi pas les scripter elles aussi):

mysql -u login -pmdp mabase < squelette.sql
mysqlbinlog mysql-bin.xxxxxx (si vous avez activé les fichiers de logs binaires)
mysqlimport --lock-tables --user=login --password=mdp mabase données.txt

Related posts:

  1. Sauvegarder et restaurer sa base OpenLDAP

Commenter