mysqldump permet de générer une sauvegarde d'une ou plusieurs bases de données MySQL. Pour que la sauvegarde puisse être effectuée, l'utilisateur doit posséder au moins les droits SELECT
et LOCK TABLES
.
Il est conseillé d'utiliser un utilisateur dédié, autorisé seulement localement à effectuer les dump et ne possédant que les droits nécessaires à sa tâche (principe du moindre privilège).
En tant qu'administrateur de la base, entrer la commande suivante pour autoriser l'utilisateur duplicateur en lecture sur toutes les bases du serveur:
-- Créer l'utilisateur s'il n'existe pas CREATE USER 'duplicateur'@'localhost'; -- Attribuer les droits à l'utilisateur GRANT SELECT, LOCK TABLES ON *.* TO 'duplicateur'@'localhost'; FLUSH privileges;
Pour générer le dump d'une base, il suffit depuis un script local ou en ligne de commande d'invoquer l'utilitaire mysqldump avec l'utilisateur duplicateur. Dans l'exemple ci-dessous, la base de donnée ss2j
est sauvegardée dans le fichier dump-base-ss2j.sql
.
yoann@janus:/tmp$ mysqldump -u duplicateur ss2j > ./dump-base-ss2j.sql
A l’exécution mysqdump affiche une erreur cependant fichier dump est créé et le code de retour de l'application vaut 0:
mysqldump -u anUser --databases aDatabase > /tmp/aDatabase.sql
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
Le message indique que le privilège PROCESS est nécessaire pour créer un dump intégrant les “tablespaces”. Pour éviter la levée de cette erreur on peut:
# Création du dump sans tablespaces (recommandé) mysqldump -u anUser --databases aDatabase --no-tablespaces > /tmp/aDatabase.sql
Si l'on fait le choix d'attribuer le privilège PROCESS, depuis une console SQL avec un utilisateur autorisé à attribuer des privilèges:
GRANT PROCESS ON aDatabase.* TO 'anUser'@'localhost'; FLUSH privileges;