Script de backup MySQL
Rédigé par Marc GUILLAUME | Aucun commentaireLe 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.