Réseau - Web - GNU/Linux

2012 09 novembre

Script de backup MySQL

Rédigé par Marc GUILLAUME | Aucun commentaire

Le but est de sauvegarder toutes les bases d'un SGBD MySQL dans des fichiers séparés horodatés dans un répertoire portant comme nom l'horodatage des sauvegardes. Ce script est un mixte dérivé de ceux trouvés à ces deux URLs : Le site de Maciej Mensfeld et cette astuce de Tim Kuijsten sur GitHub.

#!/bin/bash -

umask 007

# On donne une priorité moyenne au processus
renice 10 $$>/dev/null

# On indique dans quel répertoire vont se trouver les sauvegardes
BACKUP_DIR=/opt/backupsMySQL

# On crée un timestamp pour l'horodatage des répertoires et fichiers (année-jour-mois-heure-minute)
# ce qui permet d'envisager des sauvegardes horaires si besoin est.
TIMESTAMP=$(date +"%Y%m%d%H%M")

# On crée le répertoire de la sauvegarde portant comme nom l'horodatage
BACKUPPATH="${BACKUP_DIR}/${TIMESTAMP}"
$(mkdir -p ${BACKUPPATH})

# On lance le dump en parcourant la liste des bases donnée par la commande SHOW DATABASES
# Sur Debian Squeeze il ne semble pas qu'on aie besoin d'ignorer la table mysql.event mais
# on peut laisser l'option sauf si il apparaît une erreur (à voir avec les nouvelles versions de MySQL)
# on zip les sauvegardes (au cas où il faudrait les récupérer sur un système non Linux).
for db in $(mysql --batch --skip-column-names --execute="SHOW DATABASES" | grep -v performance_schema)
do
     $(/usr/bin/nice /usr/bin/mysqldump --events --ignore-table=mysql.event --single-transaction --quick --extended-insert ${db} |  gzip > ${BACKUPPATH}/${TIMESTAMP}-mysql_${db}.sql.gz)
done

# Puis on on redonne la sauvegarde à l'utilisateur et au groupe mysql:mysql pour que
# dans une sauvegarde rsync on puisse plus facilement restaurer les bases.
$(chown -R mysql\:${BACKUPPATH})

Pour éviter d'avoir à entrer dans le script le mot de passe de l'utilisateur privilégié (root ou équivalent) une solution est d'utiliser un fichier .my.cnf que l'on placera dans le répertoire /root avec seulement des droit d'accès pour root et qui lui sera le mieux protégé pour conserver un mot de passe en clair :

# ls -lhA /root/
-rw------- 1 root  root    93 Aug 14 02:27 .my.cnf

Et l'on y pacera le contenu suivant :

[mysq
user=root
password=xxxxxxxxxxxxxxxxx

[mysqldum
user=root
password=xxxxxxxxxxxxxxxxx

Maintenant on peut travailler sur MySQL sans avoir à saisir de nom d'utilisateur ou de mot de passe.

Écrire un commentaire

Quelle est la dernière lettre du mot lqaaa ?

Fil RSS des commentaires de cet article

À propos

Yakati.info - Réseau - Web - GNU/Linux © 2017

Généré par PluXml en 0.029s  - Administration

Mes coordonnées

Marc Guillaume
contact[at]yakati.info
79150 ÉTUSSON

Crédits

Pour la gestion du contenu

Généré par PluXml, le Blog ou Cms sans base de données

Pour le contenu

Licence Creative Commons
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.

Pour le thème

Thème SOLID de blacktie.co adapté pour PluXml