Outils pour utilisateurs

Outils du site


software:applications:mysqldump

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

software/applications/mysqldump.txt · Dernière modification : 2023/02/21 15:00 de yoann