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