Skip to content

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 utilisateur 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 (Paramètre -h), le login (-u) et le mot de passe (-p).

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

Voici le code source :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#! /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ètre

1
2
3
4
5
6
7
8
9
10
#! /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

One Comment

  1. Elyse wrote:

    Backup all mysql user from server.. Super :)

    Vendredi, mars 11, 2011 at 10 h 42 min | Permalink

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*