{"id":227291,"date":"2021-03-01T15:00:27","date_gmt":"2021-03-01T14:00:27","guid":{"rendered":"https:\/\/devowl.io\/?post_type=knowledge-base&#038;p=227291"},"modified":"2021-09-13T16:08:51","modified_gmt":"2021-09-13T14:08:51","slug":"real-media-library-sql-dump-import-failed-due-to-function-procedure","status":"publish","type":"knowledge-base","link":"https:\/\/devowl.io\/de\/wissensdatenbank\/real-media-library-sql-dump-import-fehlerhaft-wegen-function-procedure\/","title":{"rendered":"Import eines Datenbank-Dumps mit Real Media Library scheitert an fehlenden Berechtigungen"},"content":{"rendered":"<section class=\"l-section wpb_row height_medium\"><div class=\"l-section-h i-cf\"><div class=\"g-cols vc_row via_flex valign_top type_default stacking_default\"><div class=\"vc_col-sm-12 wpb_column vc_column_container\"><div class=\"vc_column-inner\"><div class=\"wpb_wrapper\"><div class=\"wpb_text_column us_custom_4f24afa8\"><div class=\"wpb_wrapper\"><p class=\"translation-block\">Du hast einen Dump (SQL-Datei) deiner WordPress-Datenbank erstellt, z.B. um deine Website auf einen neuen Server umzuziehen, aber der Import schl\u00e4gt fehl? Wenn du eine Fehlermeldung mit einer <code>fn_realmedialibrary_childs<\/code> Funktion bekommst, liegt das an der Real Media Library. Wir erkl\u00e4ren, warum das passiert und wie du es beheben kannst.<\/p>\n<h2>Welche Fehlermeldung erhalte ich?<\/h2>\n<p>Wenn du versuchst, deinen Datenbank-Dump zur\u00fcck in eine MySQL\/MariaDB Datenbank zu importieren, wirst du folgende Fehlermeldung erhalten:<\/p>\n<blockquote>\n<p>#1227 - Kein Zugriff. Hierf\u00fcr wird die Berechtigung SUPER ben\u00f6tigt<\/p>\n<\/blockquote>\n<p>Als Ursache des Problems wirst du wahrscheinlich eine SQL-Abfrage sehen, die \u00e4hnlich aussieht wie diese:<\/p>\n<pre><code class=\"language-sql\">--\n-- Function\n--\nCREATE DEFINER=`k125083_wp_2mryz`@`%` FUNCTION `bSWa8_fn_realmedialibrary_childs` (`rootId` INT, `_useTempChildTableForCheck` BOOLEAN) RETURNS VARCHAR(1000) CHARSET utf8 SQL SECURITY INVOKER\nBEGIN\n        \tDECLARE sTemp VARCHAR(1000);\n        \tDECLARE sTempChd VARCHAR(1000);\n        \tSET sTemp = &#039;$&#039;;\n        \tSET sTempChd = CAST(rootId AS CHAR);\n\t\t    SET SESSION group_concat_max_len = 100000;\n        \tWHILE sTempChd IS NOT NULL DO\n        \t\tSET sTemp = CONCAT(sTemp,&#039;,&#039;,sTempChd);\n        \t\tIF _useTempChildTableForCheck IS NULL OR _useTempChildTableForCheck = false THEN\n        \t\t    SELECT GROUP_CONCAT(id) INTO sTempChd FROM bSWa8_realmedialibrary WHERE FIND_IN_SET(parent,sTempChd) &gt; 0;\n        \t\tELSE\n        \t\t    SELECT GROUP_CONCAT(id) INTO sTempChd FROM bSWa8_realmedialibrary_tmp WHERE FIND_IN_SET(parent,sTempChd) &gt; 0;\n        \t\tEND IF;\n        \tEND WHILE;\n        \tRETURN sTemp;\n        END<\/code><\/pre>\n<\/div><\/div><div class=\"wpb_text_column us_custom_4f24afa8\"><div class=\"wpb_wrapper\"><h2>Warum erscheint dieser Fehler?<\/h2>\n<p class=\"translation-block\">Real Media Library verwendet sogenannte MySQL <code>FUNCTION<\/code> und <code>PROCEDURE<\/code> Sprachkonstrukte. Vereinfacht gesagt, kannst du dir vorstellen, dass dies Code ist, der direkt in der MySQL-Datenbank ausgef\u00fchrt wird und WordPress nur das Ergebnis der Berechnung erh\u00e4lt. Das ist um ein Vielfaches effizienter, als wenn WordPress (PHP) die gleiche Berechnung durchf\u00fchrt.<\/p>\n<p>Real Media Library verwendet dieses Sprachkonstrukt, weil es die einzige M\u00f6glichkeit ist, zehntausende von Ordnern und hunderttausende von Dateien in der WordPress Mediathek ohne Performanceprobleme zu verwalten. Wenn die gleichen Berechnungen in PHP durchgef\u00fchrt w\u00fcrden, w\u00fcrde deine Bibliothek mit vielen Dateien und Ordnern mehrere Sekunden zum Laden ben\u00f6tigen.<\/p>\n<p class=\"translation-block\"><strong>Aber jede <code>FUNCTION<\/code> und <code>PROCEDURE<\/code> hat standardm\u00e4\u00dfig einen Benutzer, der die Funktion ausf\u00fchren darf (technisch gesehen <code>DEFINER<\/code> genannt), aus Sicherheitsgr\u00fcnden (f\u00fcr weitere Details lies die <a href=\"https:\/\/dev. mysql.com\/doc\/refman\/8.0\/de\/create-procedure.html\" target=\"_blank\" rel=\"noopener\">MySQL-Dokumentation<\/a>).<\/strong> 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\u00fcnden vern\u00fcnftigerweise verweigert.<\/p>\n<\/div><\/div><div class=\"wpb_text_column\"><div class=\"wpb_wrapper\"><h2>Wie l\u00f6st du das Problem (und importierst die Datenbank wieder)?<\/h2>\n<p class=\"translation-block\">Du kannst einfach die <code>DEFINER<\/code> Anweisung entfernen und dadurch deinem neuen Benutzer erlauben, die <code>FUNCTION<\/code> und <code>PROCEDURE<\/code> zu importieren. Einige WordPress Backup Tools wie <a href=\"https:\/\/github.com\/snapcreek\/duplicator\/issues\/404\" target=\"_blank\" rel=\"noopener\">Duplicator k\u00f6nnen dies automatisch tun<\/a>. Wenn dein Backup-Tool das nicht kann, kannst du den DEFINER auch einfach manuell l\u00f6schen:<\/p>\n<ol>\n<li class=\"translation-block\">\u00d6ffne den MySQL Dump (<code>.sql<\/code>) in einem Texteditor (z.B. <a href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" rel=\"noopener\">Visual Studio Code<\/a>)<\/li>\n<li class=\"translation-block\">Suche nach dem <code>DEFINER<\/code> (im Beispiel oben <code>DEFINER=`k125083_wp_2mryz`@`%`<\/code>)<\/li>\n<li>Delete the <code>DEFINIER<\/code> clause and save the MySQL dump, so the SQL looks like this: <code>CREATE FUNCTION<\/code><\/li>\n<\/ol>\n<\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/section>","protected":false},"template":"","topic":[31],"class_list":["post-227291","knowledge-base","type-knowledge-base","status-publish","hentry","topic-common-issues-rml"],"acf":[],"_links":{"self":[{"href":"https:\/\/devowl.io\/de\/wp-json\/wp\/v2\/knowledge-base\/227291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devowl.io\/de\/wp-json\/wp\/v2\/knowledge-base"}],"about":[{"href":"https:\/\/devowl.io\/de\/wp-json\/wp\/v2\/types\/knowledge-base"}],"version-history":[{"count":9,"href":"https:\/\/devowl.io\/de\/wp-json\/wp\/v2\/knowledge-base\/227291\/revisions"}],"predecessor-version":[{"id":230376,"href":"https:\/\/devowl.io\/de\/wp-json\/wp\/v2\/knowledge-base\/227291\/revisions\/230376"}],"wp:attachment":[{"href":"https:\/\/devowl.io\/de\/wp-json\/wp\/v2\/media?parent=227291"}],"wp:term":[{"taxonomy":"topic","embeddable":true,"href":"https:\/\/devowl.io\/de\/wp-json\/wp\/v2\/topic?post=227291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}