David Mercereau : Script de sauvegarde Mysql par base “mysql_dump.sh”
mercredi 5 décembre 2012 à 13:00EDIT : v0.2 du script avec prise en compte des commentaires de l’article
Un énième script de sauvegarde à plat de bases Mysql sur internet. Celui-ci crée un fichier texte (.sql) par base et compresse le tout ensuite.
J’utilise ce script depuis plus de 3 ans, ça tourne bien et surtout ça dépanne bien !
Attention : ce script est à coupler avec un système de sauvegarde complet et distant…
Préparation
Il faut créer un utilisateur Mysql (appelé dump) avec des droits restreints en lecture sur toutes les bases :
$ mysql -u root -p -e "CREATE USER 'dump'@'localhost' IDENTIFIED BY 'LEMOTDEPASSE';" $ mysql -u root -p -e "GRANT SELECT , SHOW DATABASES , LOCK TABLES , SHOW VIEW ON * . * TO 'dump'@'localhost' IDENTIFIED BY 'LEMOTDEPASSE' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;"
Le script
Copier le contenu du script dans un fichier mysql_dump.sh puis faite un chmod +x mysql_dump.sh afin de le rendre exécutable. Ajouter ensuite ce script dans vos tâches crons pour qu’il s’exécute toutes les nuits (par exemple).
Note : les remarques sont les bienvenus…
#!/bin/bash # Inspiré d'un script trouvé sur phpnews.fr (plus en ligne) # Version 0.2 06/12/2012 set -eu ionice -c3 -p$$ renice -n 19 -p $$ ## Paramètres # Utilisateur mysql USER='dump' # Mot de passe Mysql PASS='LEMOTDEPASSE' # Répertoire de stockage des sauvegardes DATADIR="/var/backups/mysql/" # Nom du dump DATANAME="dump_$(date +%d.%m.%y@%Hh%M)" # Rétention / rotation des sauvegardes RETENTION=30 ## Début du script # On crée sur le disque un répertoire temporaire mkdir "$DATADIR$DATANAME" # On place dans un tableau le nom de toutes les bases de données du serveur databases="$(mysql -u $USER -p$PASS -Bse 'show databases' | grep -v information_schema)" #Pour chacune des bases de données trouvées ... for database in ${databases[@]} do mysqldump -u $USER -p$PASS --quick --add-locks --lock-tables --extended-insert $database > ${DATADIR}${DATANAME}/${database}.sql done #On tar tous cd $DATADIR tar -czf ${DATANAME}.tar.gz $DATANAME/ chmod 600 ${DATANAME}.tar.gz unlink last.tar.gz ln ${DATANAME}.tar.gz last.tar.gz #On supprime le répertoire temporaire rm -rf $DATANAME echo "Suppression des vieux backup" find $DATADIR -name "*.tar.gz" -mtime +$RETENTION -print -exec rm {} \\;
Original post of David Mercereau.Votez pour ce billet sur Planet Libre.
Articles similaires
- Brice Capelle : Dedibox – Serveur Web dynamique multidomaine (05/10/2006)
- Emilien Macchi : Petit script de sauvegarde d’un serveur Web avec Shell restreint (07/08/2011)
- David Mercereau : emailPoubelle.php – script libre d’email jetable (07/08/2012)
- David Mercereau : [Web-Dynamic-Dnsupdate] Administrer vos zones DNS sans base de données (03/08/2012)
- Tigrou Damien : Faire la somme de nombres en shell (11/03/2009)