{{tag>software mysql mysqldump backup sauvegarde troubleshooting dépannage}}
====== mysqldump ======
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).
===== Créer l'utilisateur =====
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;
===== Générer le dump =====
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
===== Dépannage =====
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:
* Utiliser l'option **%%--no-tablespaces%%** lors de l'invocation de **mysqldump** (solution généralement recommandée);
* Attribuer le privilège PROCESS à l'utilisateur (besoin spécifique).
# 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;
===== Références =====
* https://dba.stackexchange.com/questions/271981/access-denied-you-need-at-least-one-of-the-process-privileges-for-this-ope#273040