Wissensdatenbank (FAQ)

Import eines Datenbank-Dumps mit Real Media Library scheitert an fehlenden Berechtigungen

Du hast einen Dump (SQL-Datei) deiner WordPress-Datenbank erstellt, z.B. um deine Website auf einen neuen Server umzuziehen, aber der Import schlägt fehl? Wenn du eine Fehlermeldung mit einer fn_realmedialibrary_childs Funktion bekommst, liegt das an der Real Media Library. Wir erklären, warum das passiert und wie du es beheben kannst.

Welche Fehlermeldung erhalte ich?

Wenn du versuchst, deinen Datenbank-Dump zurück in eine MySQL/MariaDB Datenbank zu importieren, wirst du folgende Fehlermeldung erhalten:

#1227 – Access denied; you need (at least one of) the SUPER privilege(s) for this operation

Als Ursache des Problems wirst du wahrscheinlich eine SQL-Abfrage sehen, die ähnlich aussieht wie diese:

--
-- Function
--
CREATE DEFINER=`k125083_wp_2mryz`@`%` FUNCTION `bSWa8_fn_realmedialibrary_childs` (`rootId` INT, `_useTempChildTableForCheck` BOOLEAN) RETURNS VARCHAR(1000) CHARSET utf8 SQL SECURITY INVOKER
BEGIN
        	DECLARE sTemp VARCHAR(1000);
        	DECLARE sTempChd VARCHAR(1000);
        	SET sTemp = '$';
        	SET sTempChd = CAST(rootId AS CHAR);
		    SET SESSION group_concat_max_len = 100000;
        	WHILE sTempChd IS NOT NULL DO
        		SET sTemp = CONCAT(sTemp,',',sTempChd);
        		IF _useTempChildTableForCheck IS NULL OR _useTempChildTableForCheck = false THEN
        		    SELECT GROUP_CONCAT(id) INTO sTempChd FROM bSWa8_realmedialibrary WHERE FIND_IN_SET(parent,sTempChd) > 0;
        		ELSE
        		    SELECT GROUP_CONCAT(id) INTO sTempChd FROM bSWa8_realmedialibrary_tmp WHERE FIND_IN_SET(parent,sTempChd) > 0;
        		END IF;
        	END WHILE;
        	RETURN sTemp;
        END

Warum erscheint dieser Fehler?

Real Media Library verwendet sogenannte MySQL FUNCTION und PROCEDURE Sprachkonstrukte. Vereinfacht gesagt, kannst du dir vorstellen, dass dies Code ist, der direkt in der MySQL-Datenbank ausgeführt wird und WordPress nur das Ergebnis der Berechnung erhält. Das ist um ein Vielfaches effizienter, als wenn WordPress (PHP) die gleiche Berechnung durchführt.

Real Media Library verwendet dieses Sprachkonstrukt, weil es die einzige Möglichkeit ist, zehntausende von Ordnern und hunderttausende von Dateien in der WordPress Mediathek ohne Performanceprobleme zu verwalten. Wenn die gleichen Berechnungen in PHP durchgeführt würden, würde deine Bibliothek mit vielen Dateien und Ordnern mehrere Sekunden zum Laden benötigen.

Aber jede FUNCTION und PROCEDURE hat standardmäßig einen Benutzer, der die Funktion ausführen darf (technisch gesehen DEFINER genannt), aus Sicherheitsgründen (für weitere Details lies die MySQL-Dokumentation). Wenn du deine Webseite umziehst und der MySQL-Benutzer oder der Hostname deines MySQL-Datenbank-Servers anders ist, bekommst du einen Fehler. In deinem MySQL-Dump ist der alte Benutzer und Hostname definiert, aber du importierst den Datenbank-Dump mit einem anderen Benutzer oder Hostnamen. Dies wird aus Sicherheitsgründen vernünftigerweise verweigert.

Wie löst du das Problem (und importierst die Datenbank wieder)?

Du kannst einfach die DEFINER Anweisung entfernen und dadurch deinem neuen Benutzer erlauben, die FUNCTION und PROCEDURE zu importieren. Einige WordPress Backup Tools wie Duplicator können dies automatisch tun. Wenn dein Backup-Tool das nicht kann, kannst du den DEFINER auch einfach manuell löschen:

  1. Öffne den MySQL Dump (.sql) in einem Texteditor (z.B. Visual Studio Code)
  2. Suche nach dem DEFINER (im Beispiel oben DEFINER=`k125083_wp_2mryz`@`%`)
  3. Delete the DEFINIER clause and save the MySQL dump, so the SQL looks like this: CREATE FUNCTION

WordPress Plugins von devowl.io

Finde hilfreiche Artikel

Themen