Magento 2 – Datenbank Import mit fehlenden SUPER-Rechten abgebrochen

Beim Import eines Datenbank-Exports von einem anderen Server erschien immer der Fehler “ERROR 1227 (42000) at line 15126: Access denied; you need (at least one of) the SUPER privilege(s) for this operation” – schaute man im Dump an dieser Stelle nach, fand man dort

/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`MEINDBUSER`@`%` SQL SECURITY INVOKER */

Das Problem war hier der Part “DEFINER=`MEINDBUSER`@`%`” (wobei MEINDBUSER natürlich nur als Beispiel zu sehen ist). Hier musste der beim Import verwendete Datenbankuser und in diesem Fall auch localhost hinterlegt werden. Das sah dann so aus

/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=MEINDBUSERNEU@localhost SQL SECURITY INVOKER */

Wichtig war auch die einzelnen Anführungszeichen zu entfernen, dass nur noch MEINDBUSERNEU@localhost dort stand. Anschließend klappte der Import dann problemlos.

Update vom 11.05.2020

Nun stellte sich diese Problematik erneut, diesmal aber nicht ganz so einfach. Der auslösende Part für den Error beim Import der Datenbank war diesmal jener:

/*!50003 CREATE*/ /*!50017 DEFINER=`[MEINDBUSER]`@`localhost`*/ /*!50003 TRIGGER trg_catalog_category_entity_after_insert AFTER INSERT ON catalog_category_entity FOR EACH ROW

Der Definer wurde nun aber sehr häufig -und nicht nur einmal wie beim vorigen Teil- aufgerufen.

Somit gab es zwei Möglichkeiten:

  1. Verhindern, dass beim Backup / Dump der Datenbank dieser Datenbank-User in das Backup-File geschrieben wird ODER
  2. Nachträglich den User aus dem File entfernen und dann importieren.

Für beides gibt es Möglichkeiten. Habe ich die Backup-Datei selber per SSH-Befehl erstellt, kann ich den Befehl ein wenig anpassen und damit erreichen, dass kein konkreter User sondern “Current User” verwendet wird. Der Befehl wäre dann dieser hier:

mysqldump -u "[User]" --opt --single-transaction --password="[Passwort]" -h "[Host z.B. localhost]" "[Datenbankname]" | sed -E 's/DEFINER=`[^`]+`@`[^`]+`/DEFINER=CURRENT_USER/g' | gzip -9 > DATEINAME.sql.gz;

Hiermit wird ein Datenbank-Backup erstellt mit dem Namen DATEINAME.sql.gz (es ist also direkt gepackt). Während des Erstellens der Datei werden durch den SED-Befehl die datenbankdefinierten User-Daten gegen die allgemeinen “CURRENT_USER”-Infos ausgetauscht. Somit lässt sich die Datei später importieren. (Um die Datei auf dem Zielserver wieder zu entpacken einfach “gunzip DATEINAME.sql.zip” eingeben. Wobei ich wahrscheinlich nicht extra erwähnen muss, dass der Name frei vergeben werden kann. Ebenso werden die Platzhlater innerhalb der eckigen Klammern INKL. der Klammern durch die jeweiligen eigenen Daten ersetzt.)

Muss ich aber die fertige SQL-Datei überarbeiten, um sie zu importieren, kann ich dies per SSH mit folgendem Befehl machen und selbiges Ergebnis erhalten wie oben

sed -E 's/DEFINER=`[^`]+`@`[^`]+`/DEFINER=CURRENT_USER/g' DATEINAME.sql > DATEINAMEneu.sql

Zur Sicherheit wird die Datei nicht einfach überschrieben, sondern es wird eine neue Datei erstellt, die den Namen DATEINAMEneu.sql hat.

Update vom 04.05.2021

Heute hatten wir wieder einmal dieses Problem beim Anlegen eines Testshops. Beim Import der Liveshop-Datenbank in die neue Datenbank gab es den Fehler

ERROR 1227 (42000) at line 717: Access denied; you need (at least one of) the SU          PER privilege(s) for this operation

Wir haben dann nochmals diesen Artikel ausgegraben und haben nun eine Möglichkeit, diesen noch ein wenig zu erweitern mit einer neuen Möglichkeit dieses Problem zu beheben. Der folgende Befehl entfernt alle Verweise auf den User und somit ist ein Import problemlos möglich:

 sed -i.bak -e "s/\/\*[^*]*DEFINER=[^*]*\*\///" meindumpfile.sql

Published by Covos

Seit 2009 arbeite ich nun intensiv mit Magento. Begonnen habe ich mit der Erstellung und dem Betrieb von B2C-Shops. Ausgeweitet wurde dies durch meine Tätigkeit im Logistik-Sektor. Hieraus entstanden erste spezialisierte B2E-Systeme. Heute arbeite ich tag-täglich mit spannenden B2C-, B2B- und B2E-Projekten und berichte in diesem Blog über Herausforderungen und gebe Insider-Tipps.

Leave a Reply

Your email address will not be published. Required fields are marked *