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