Backup de tous les utilisateurs d’un serveur mysql

Voici un petit script qui permet de générer un backup SQL de tous les utilisateurs mysql d’un serveur.

Il utilise le bash et le client mysql en ligne de commande.Pour l’utiliser, il suffit de lui donner comme paramètres le nom de la machine (-h), le login (-u) et le mot de passe (-p).

$> ./backup-user.sh -h localhost -u login -p passwd

Voici le code source :

#! /bin/bash

while getopts ':h:u:p:' flag ; do
case $flag in
h ) sHost=$OPTARG ;;
u ) sLogin=$OPTARG ;;
p ) sPasswd=$OPTARG ;;
* ) ;;
esac
done

if [ "x" != "x${sPasswd}" ] ; then
sPasswd="-p${sPasswd}"
fi

for u in $(mysql -h "$sHost" -u "$sLogin" "${sPasswd}" --skip-column-names -e "SELECT DISTINCT CONCAT('\'', User, '\'@\'', Host, '\'') FROM mysql.user;" | sort) ; do
echo "### User : $u" ;
mysql -h "$sHost" -u "$sLogin" "-p${sPasswd}" --skip-column-names -e "SHOW GRANTS FOR $u" | ( while read l ; do echo -e "$l ;\nFLUSH PRIVILEGES ;" ; done ) ;
done

Et voici une version sans paramètres

#! /bin/bash

sHost='localhost' ;
sLogin='login' ;
sPasswd='passwd' ;

for u in $(mysql -h "$sHost" -u "$sLogin" "-p${sPasswd}" --skip-column-names -e "SELECT DISTINCT CONCAT('\'', User, '\'@\'', Host, '\'') FROM mysql.user;" | sort) ; do
echo "### User : $u" ;
mysql -h "$sHost" -u "$sLogin" "-p${sPasswd}" --skip-column-names -e "SHOW GRANTS FOR $u" | ( while read l ; do echo -e "$l ;\nFLUSH PRIVILEGES ;" ; done ) ;
done

5 réflexions au sujet de « Backup de tous les utilisateurs d’un serveur mysql »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *