PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

David Mercereau : Script de sauvegarde Mysql par base “mysql_dump.sh”

mercredi 5 décembre 2012 à 13:00

EDIT : 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 {} \\;

Gravatar de David Mercereau
Original post of David Mercereau.Votez pour ce billet sur Planet Libre.