MySQL: ANY command denied to user

Eine Anleitung, wie man den Definer in einem DB-Dump ersetzt

MySQL ANY command denied to user

Fehler

1
ERROR 1142 (42000) at line 11215: ANY command denied to user 'db-user-exported'@'%' for table 'dummy'

Lösung

Eine Kopie erstellen

1
cp dev-dump.sql dev-dump-copy.sql

Alten Benutzer und alte DB ersetzen

Im Dump steckt der DEFINER des Quellsystems (im Fehler oben db-user-exported). Dieser wird auf den lokalen Benutzer bzw. die lokale DB umgeschrieben:

Alter Benutzer (im Dump): db-user-exportedNeuer Benutzer: db-user-target

Alte DB (im Dump): db-exportedNeue DB: db-target

Zuerst den spezifischeren Benutzernamen ersetzen, dann den DB-Namen:

1
2
sed -i 's/db-user-exported/db-user-target/g' dev-dump-copy.sql
sed -i 's/db-exported/db-target/g' dev-dump-copy.sql

Reimport

1
mysql -u db-user-target -p db-target < dev-dump-copy.sql

Alternative: nur Routinen und Trigger nachziehen

Wenn nur Stored Procedures, Functions und Trigger am Definer scheitern, importiert man den Rest normal (z. B. mit --force) und zieht diese Objekte separat aus der Quell-DB nach.

Aus der Quell-DB exportieren:

1
mysqldump --no-data --no-create-info --routines --triggers db-exported > routines-triggers.sql

Definer ersetzen:

1
2
sed -i 's/db-user-exported/db-user-target/g' routines-triggers.sql
sed -i 's/db-exported/db-target/g' routines-triggers.sql

In die Ziel-DB einspielen:

1
mysql -u db-user-target -p db-target < routines-triggers.sql
Erstellt mit Hugo
Theme Stack gestaltet von Jimmy