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:
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):
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:















