Ich habe versucht, die Datenbank mit dem MySQL-Dump-Befehl zu sichern, aber der Befehl ist mit einer Fehlermeldung fehlgeschlagen:‘Error:Access denied; Sie benötigen (mindestens eine) der PROCESS-Berechtigung(en) für diese Operation . Hier ist die vollständige Fehlermeldung.
$ 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
Ich habe die Datenbank viele Jahre lang so ausgegeben und der Befehl ist plötzlich fehlgeschlagen. Wie habe ich diesen Fehler behoben? Los geht's.
Fehler beheben:Zugriff verweigert; Sie benötigen (mindestens eines) der PROCESS-Berechtigung(en) für diese Operation
Ich habe lediglich ‚--no-tablespaces hinzugefügt ‘-Option für den Befehl wie unten gezeigt:
$mysqldump -u dbuser -p tg_db --no-tablespaces > tg_db.sql
Und das funktionierte. Was ist also --no-tablespaces Option und warum sollte ich das hinzufügen?
Nun, diese Änderung erfolgte ab MySQL-Version 5.7.31+ und die auf meinem Server installierte Version war 8.0.23. Laut Dokumentation
mysqldump erfordert mindestens das SELECT-Privileg für gedumpte Tabellen, SHOW VIEW für gedumpte Ansichten, TRIGGER für gedumpte Trigger, LOCK TABLES, wenn die Option –single-transaction nicht verwendet wird, und (ab MySQL 8.0.21) PROCESS, wenn die Option –no-tablespaces Option wird nicht verwendet. Bestimmte Optionen erfordern möglicherweise andere Berechtigungen, wie in den Optionsbeschreibungen angegeben.
Sehen Sie sich auch die Option –no-tablespaces an. Diese Option entfernt die CREATE LOGFILE GROUP und CREATE TABLESPACE Anweisungen aus der Ausgabe.
Aber warum PROCESS Berechtigung ist für mysqldump erforderlich Befehl? Weil mysqldump versucht auf die INFORMATION_SCHEMA.FILES zuzugreifen Tabelle, die das PROCESS-Privileg erfordert. Nun, die Privilegien können über GRANT hinzugefügt werden auf globaler Ebene oder einer einzelnen Datenbank oder Tabelle. Aber der PROCESS Berechtigung muss wie unten gezeigt auf globaler Ebene hinzugefügt werden.
GRANT PROCESS ON *.* TO user@localhost;
Warum wird dieser Fehler nicht für alle Benutzer angezeigt? Der MySQL-Root-Benutzer ist offensichtlich nicht betroffen. Das Verhalten kann für andere Benutzer basierend auf ihren Berechtigungsstufen unterschiedlich sein.