J'essayais de sauvegarder la base de données à l'aide de la commande MySQL dump, cependant, la commande a échoué avec un message d'erreur 'Erreur :Accès refusé; vous avez besoin d'au moins un des privilèges PROCESS pour cette opération' . Voici le message d'erreur complet.
$ mysqldump -u dbuser -p tg_db > tg_db.sql Enter password: mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
J'ai vidé la base de données comme ça pendant de nombreuses années et la commande a soudainement échoué. Comment ai-je résolu cette erreur ? C'est parti.
Correction d'erreur :accès refusé ; vous avez besoin d'au moins un des privilèges PROCESS pour cette opération
Tout ce que j'ai fait a été d'ajouter '--no-tablespaces
‘ à la commande comme indiqué ci-dessous :
$mysqldump -u dbuser -p tg_db --no-tablespaces > tg_db.sql
Et cela a fonctionné. Alors qu'est-ce que --no-tablespaces
option et pourquoi devrais-je l'ajouter ?
Eh bien, ce changement s'est produit à partir de la version MySQL 5.7.31+ et la version installée sur mon serveur était la 8.0.23. Selon la documentation,
mysqldump nécessite au moins le privilège SELECT pour les tables vidées, SHOW VIEW pour les vues vidées, TRIGGER pour les déclencheurs vidés, LOCK TABLES si l'option –single-transaction n'est pas utilisée, et (à partir de MySQL 8.0.21) PROCESS si le –no-tablespaces option n'est pas utilisée. Certaines options peuvent nécessiter d'autres privilèges, comme indiqué dans les descriptions des options.
Jetez également un œil à l'option –no-tablespaces. Cette option supprime le CREATE LOGFILE GROUP
et CREATE TABLESPACE
déclarations de la sortie.
Mais pourquoi PROCESS
le privilège est requis pour mysqldump
commande? Parce que mysqldump
essaie d'accéder à INFORMATION_SCHEMA.FILES
table qui requiert le privilège PROCESS. Eh bien, les privilèges peuvent être ajoutés via GRANT
au niveau global, ou une seule base de données ou table. Mais le PROCESS
le privilège doit être ajouté au niveau global, comme indiqué ci-dessous.
GRANT PROCESS ON *.* TO user@localhost;
Pourquoi cette erreur ne s'affiche-t-elle pas pour tous les utilisateurs ? L'utilisateur root de MySQL n'est évidemment pas affecté. Le comportement peut être différent pour les autres utilisateurs en fonction de leurs niveaux de privilège.