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.