Script bash de sauvegarde des bases de données MySQL
La stratégie de sauvegarde des informations est primordiale. On a tendance à la négliger et on y pense après la première perte d'information. Voici en détail mon script de sauvegarde de mes bases de données MySQL.
La sauvegarde d'une base de donnée avec MySQL est relativement simple avec la commande 'mysqldump'. Faire un script qui sauvegarde tous les jours une base ne pose pas de problème, mais faire un script qui sauvegarde toutes les bases est déjà plus contraignant. Il faut maintenir à jour la liste des bases à sauver et s'il y a bien un truc qu'on oublie une fois que c'est en place, ce sont les outils de sauvegarde qui sont en place.
Cela peut devenir très simple si vous utilisez MySQL grâce à la requête 'show databases' qui retourne la liste de toutes les bases existantes sur votre serveur MySQL.
Il ne reste plus qu'a boucler sur le résultat pour construire en dynamique la commande 'mysqldump'. Il faudra juste penser a exclure les bases 'information_schema', 'mysql' et 'Database' qui sont utilisées en interne par le serveur MySQL et qui n'ont pas vraiment besoin d'être sauvegarder.
Pour faire mes sauvegardes, j'ai créé un utilisateur spéciale, qui n'a que les droits 'Select' et 'Lock Tabe' sur toutes les bases. 'Lock table' est nécessaire à l'exécution d'un dump.
#!/bin/bash #date du jour DATE=`date +%y_%m_%d` #liste des dossier LISTEBDD=$( echo 'show databases' | mysql -usaveLogin -psavePassword ) #on boucle sur chaque dossier (for découpe automatiquement par l'espace) for SQL in $LISTEBDD do if [ $SQL != "information_schema" ] && [ $SQL != "mysql" ] && [ $SQL != "Database" ]; then #echo $SQL mysqldump -usaveLogin -psavePassword $SQL | gzip > /home/backup/sql/$SQL"_mysql_"$DATE.sql.gz fi done
Et voilà! Un dump de chaque base de donnée sera mis dans le dossier /home/backup/sql
Il ne reste plus qu'a appelé le script via un cron:
> crontab -e
Ajouter la ligne suivante pour une sauvegarde journalière à minuit une.
01 00 * * * sh /root/backup_mysql.sh
Au cas où, voici la ligne de commande qui permet de remettre un dump dans mysql. Vous noterez que l'on n'utilise pas la commande 'mysqldump'.
> mysql -usaveLogin -psavePassword maBaseDeDonnee < mondump.sql
Bien entendu pensez à remplacer saveLogin, savePassword et éventuellement le chemin où stocker vos fichiers.
Il ne reste plus qu'a copier les fichiers sur une autre machine, mais ce sera le sujet d'un prochain article.
Il y a 4 commentaires.
Ecrit par leeroy le 2 juil. 2013
Ecrit par kopo le 20 mai 2013
Ecrit par Psaac le 22 janv. 2013
Ecrit par Mika le 6 juin 2012
Ajouter un commentaire