Freitag, 7. Mai 2021
Export/Import Datenbank
Trotz aller möglicher Tests konnte der Hosttech-Support keinen Fehler finden und hatte auch keinerlei Erklärung, weshalb die vor dem Export der DB geschriebenen utf8mb4-Emojis nach dem Import nicht mehr sichtbar sind. Mir wurde ein DB-Dump der Datenbank zur Verfügung gestellt, welcher vor der Migration auf den neuen Server gezogen wurde.
Ich bin dann wie folgt vorgegangen:
- DB-Export der aktuellen DB
- Import der DB vom 29.04.2021
- Sichtkontolle auf diesem Testblog -> keine Emojis
- Import der heute exportierten DB (unter Punkt 1.)
- Sichtkontrolle auf diesem Testblog -> keine Emojis (auch diejenigen zwischen dem 29.04. und heute sind verschwunden). 😭
Zu Vergleichszwecken öffnete ich mit phpMyAdmin die Kommentar-Tabelle des Live-Blogs (Manitu). Hier sieht man im body-Eintrag effektiv die Emojis. Daneben die Ansicht der selben Tabelle von hier (Hosttech). Hier sieht man im body-Eintrag eben nur "?" anstelle der Emojis.
...Dann exportierte ich beide Datenbanken und schaute mir mit Notepad++ den Anfang der jeweiligen Datei an. Ich konnte dabei keine Unterschiede feststellen.
Als nächstes werde ich wohl mal einen DB-Export des Live-Blogs machen und hier importieren... mal sehen...
Nachtrag: 🤔 so einfach geht das nicht. Nachdem ich die beatsblog-DB eingelesen habe, kann ich diese Testinstallation nicht mehr erreichen. Ich erhalten folgende Fehlermeldung:
Fatal error: Uncaught Error: Undefined constant "IN_installer" in /include/serendipity_smarty_class.inc.php:166 Stack trace: #0 /include/serendipity_smarty_class.inc.php(106): Serendipity_Smarty->setParams() #1 /include/serendipity_smarty_class.inc.php(94): Serendipity_Smarty->__construct() #2 /include/functions_smarty.inc.php(1043): Serendipity_Smarty::getInstance() #3 /include/genpage.inc.php(27): serendipity_smarty_init(Array) #4 /include/functions_routing.inc.php(22): include('/var/www/vhosts...') #5 /index.php(113): serveIndex() #6 {main} thrown in /include/serendipity_smarty_class.inc.php on line 166
Da wird Smaty (Spartacus) angemäkelt. Das liegt wohl daran, dass ich nicht die gleichen Plugins auf beiden Instanzen installiert habe.
Habe jetzt keine Zeit mehr für diesen Kram. Kümmere mich später wieder darum.
Klar ist jedoch, dass ich bei jedem Ex- und Import die utf8mb4-Emojis verliere, denn nun sind auch die Emojis des letzten Kommentars weg und diejenigen in diesem Beitrag habe ich gerade jetzt wieder ersetzt. Ich denke so langsam, dass die DB schon falsch befüllt wird, denn die Inhalte sind ja "?" und eben keine Emojis. Wenn ich diese nun ex- und wieder importiere, kommt halt nichts anderes als "?" heraus.
Dieser Link ist nicht aktiv. Er enthält eine kopierbare Trackback-URI, um manuell ein Ping- und Trackback zu diesem Eintrag für ältere Blogsysteme zu generieren; zB (immer noch valide) über das zur Verfügung gestellte Eintragsfeld des serendipity_event_trackback Plugins. Serendipity und andere Blogsysteme erkennen die Trackback-URL heutzutage aber automatisch anhand der Artikel-URL. Die Trackback-URI für ihren Link des Sender-Eintrages lautet daher wie folgt: »https://www.blog.dokumenzi.ch/2660-ExportImport-Datenbank.html«
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt
Die Kommentarfunktion wurde vom Besitzer dieses Blogs in diesem Eintrag deaktiviert.
Ian Styx am :
Achtung lese auch im Backend.
Eigentlich sieht das ja entsprechend gut aus mit den 40101 Zeilen...
Bitte paste mal aus der dump.sql Datei die Datenbank-Struktur des comments tables als Beispiel. Vielleicht sind bei dir die Kollationen falsch gesetzt. Meine sieht zB. so aus:
Auch wenn bei dir nur utf8mb4_unicode_ci stünde wäre noch alles in Ordnung. Alle Felder die etwas mit Text zu tun haben, also text oder varchar Felder, müssten eine Kollation für utf8mb4 aufzeigen. Selbst bei utf8mb4_general.ci, denn https://www.pixelfriese.de/unterschied-zwischen-utf8_general_ci-und-utf8_unicode_ci/
Wenn du den Dump in notepad++ betrachtest, müsste du an den Stellen an denen Emojis verwendet werden, ein kleines (umrahmtes) Kästchen sehen, a la "<p> 🔗 If you use issue" (in der Übertragung ist hier daraus ein Kettenglied geworden) das anzeigt, dass dort ein 4-Byte Zeichen hockt. Ist das nicht so kannst du schon recht sicher sein, dass du den Dump nicht zufriedenstellend verwenden wirst können.
Deinen Live Blog mt diesem Testblog zu vermischen ist auch keine wirklich gute Idee und führt zu Fehlern und Verwirrrungen, wie du schon erlebt hast.
Es ist eben durchaus möglich, dass dein dokumenzi blog gerade was die SQL Struktur angeht noch etwas bedürftig ist, denn es stammt ja aus der Zeit in der versucht haben einem System das noch nicht bereit dafür war einen entsprechenden Überzug zu verpassen und du demzufolge mit Strukturen und Inhalten herumexperimentert hast, will sagen: Dass es keine eigene neue Installation auf gefügigem Grund war, bzw nicht die in Styx gegebene Konvertierungs/Migrations Wartungsaufgabe einer alten DB benutzt hat.
Ian Styx am :
Im ersten screenshot der dumps (im linken) sieht man allerdings auch schon den Fehler! Da fehlen überall die Kollationen auch bei den einzelnen Feldern. Da steht zb nur "ENGINE=MyISAM DEFAULT CHARSET=utf8mb4". Beides ist in Ordnung. es fehlt aber das entscheidende, die Kollation. Die rechte Ansicht hat sie alle.
Ist das der der von hosttech gezogene Dump? Ach nee, da steht ja manitu. Wieso hat der denn fehlende Kollationen? Ich bin verwirrt. Wen hast du wie in was gesetzt?
Beat Post author am :
Tja, blöd. 😵 Der Screenshot links ist tatsächlich von der Manitu-DB. Ich habe beides Mal einfach mit phpMyAdmin einen Standard-Export der DB gemacht. Es könnte natürlich sein, dass die beiden Standards zwischen Hosttech und Manitu unterschiedlich sind.
Deine letzte Frage verstehe ich leider nicht.
Beat Post author am :
wie gewünscht (aus der Hosttech-DB):
Ian Styx am :
Also ist die Struktur auf Hosttech ok. PHPMyAdmin bildet ja nur ab, was ist. Ist die comments Tabelle aus dem dump vor der Migration oder so wie sie jetzt ist?
Warum also ist ein Dump, der dann soweit OK aussieht, auf der neuen Dokumenzi DB falsch bezüglich der 4-Byte Zeichen, der Emojis? (Siehe Kästchenfrage in Notepad++)
Um das dokumenzi Problem zu lösen, musst du also den zur Verfügung gestellten Dump untersuchen und punktuell vergleichen mit der Struktur die jetzt als DB vorliegt (ohne dump). Denn das ist ja das, was sie bzw. nachfolgend du drauf gekippt haben. Ist der Dump soweit ok kann eigentlich auch nichts dergleichen geschehen. Sind die Tabellen gelöscht worden bevor der dump darauf entladen wurde? Irritierend finde ich auch, dass es sich als MariaDB 10.2.37 ausgibt. Das ist so ähnlich wie die openssl Versions Geschichte und passt überhaupt nicht zu einer Server-UPGRADE-Migration mit der sie ja schon soooowoesooooo schon lange gewartet haben. Zu erwarten wäre Minimum 10.3 wenn nicht schon .4 oder .5, da schon das sehr konservative Debian stable auf 10.3.x ist. Das dahinter jemand zurückfällt fällt mir schwer nachzuvollziehen. 🙄
Zum Zweiten:
Warum fehlen Manitu (was ja ursprünglich mit deinem dokumenzi Migrations Problem nichts zu tun hat) die COLLATE utf8mb4_unicode_ci Auszeichnungen?!?
In PHPMyAdmin kannst du ja jeden table auch als Struktur ansehen, dort siehts du es so wie es nachher auch im Dump zu finden wäre. Wenn dort nichts dergleichen steht, fehlen sie. Außerdem muß man den Dump als utf8 abgespeichert ziehen (aber das sollte eigentlich schon automatisch gesetzt sein).
Es geht doch um den Dump vom hosttech Server. Siehst du in ihm die oben angemerkten Kästchen (unter Notepad++) wo die Emojis stehen??
Check mal die Mainitu Struktur. Ist sie tatsächlich so wie es der dump screenshot bezüglich der Kollationen aussagt?
Wenn du das bestätigst, ist desweiteren die Frage wie das denn sein kann. Wie genau ist diese Datenstruktur dort bei Manitu entstanden? War es eine Kopie einer alten von Anno Domini von hosttech? Ein Mischmasch, zwischen neu installierter Struktur und alten Daten? etc.?
Beat Post author am :
Das waren zuviele Fragen zu einem zu komplexen Thema 😔.
Nein. Ausser dem Fragezeichen ist da nichts. Wenn ich nun z.B. den drittletzten Kommentar (c7914) ansehe, sehe ich in Notepad++ nur das:
Als Vergleich dazu ein Kommentar aus der Manitu-DB (www.beatsblog.ch):
However. Im Moment sieht es so aus, als ob ich bei jedem hosttech-DB-Export und Re-Import sämtliche Emojis verliere.
Laienmässig sage ich, dass ich ein Problem zwischen Styx und der Speicherung in der DB habe. Denn, wenn ich jetzt Emojis in einen Beitrag/Kommentar schreibe und diesen speichere, so sehe ich Sekunden später mit phpMyAdmin in der DB nur noch Fragezeichen.
Der einzige (für mich sichtbare) Unterschied zu der Manitu-Installation ist eben genau das:
Zeichensatz/Kollation der Verbindung zum Server: utf8mb4_unicode_ci
also eben die Verbindung zwischen Styx und der DB. Ich werde wohl mal den Hosttech-Support anschreiben und um die Umstellung von utf8_unicode_ci zu utf8mb4_unicode_ci ersuchen.
Ian Styx am :
Das ist verwirrend, ich weiß. Aber es gibt einfach ein paar Dinge auseinanderzuhalten. UTF8 als Beschreibung und Name ist eigentlich das was Mysql als UTF8MB4 versteht. Das ist einer der (historischen) Eigenarten von Mysql dass sie damals UTF8 für einen Raum benutzten ohne diesem den vollständigen unicode Satz zu geben. Überall sonst meint also der Name UTF8 eben den erweiterten Satz mit den inkludierten Bytes. Solch ein Byte, zb Emojis, sind belegte 4 Zeichen, die ein einzelnes Zeichen aus diesem erweiterten Unicode beschreiben, also 4 Byte je Zeichen. Hat also eine Datenbank die Anweisung 4-Byte pro Zeichen zuzulassen muss sie auch so zählen - was insbesondere wichtig ist für die Indizes, also die gecachten "Tabellen" zur schnelleren Indizierung bei Datenabfragen und Suchabfragen. Ohne diese wären Datenbanken grottig langsam und das zunehmend.
Nun speichert also zb phpmyadmin eigentlich als UTF8, wenn utf-8 für den Export gesetzt ist. (Trotzdem bitte noch mal nachkontrollieren ob es das auch bei dir macht.). So eine sql Datei hat dann eine versteckte Zeichenfolge, eine Byte Order Mark (BOM), am Dateianfang, die die Verwendung von UTF-8 als Kodierung kennzeichnet. Notepad++ liest das und weiß, dass es sich um UTF8 handelt. Darstellen kann es die erweiterten Zeichen aber nicht. Du wirst keine Emojis sehen, aber dafür ihren Platzhalter, also das ominöse umrandete Kästchen von dem ich sprach. Ist es nicht da und an dessen Stelle nur ein ? ist das 4-Byte Zeichen nicht erkannt bzw kaputt. Kaputtes aber kann man nicht so wieder in eine DB importieren so das daraus wieder komplette 4-Byte Zeichen werden. Deshalb sagte ich, dass ein Export der unzureichend war nicht zur Weiterverarbeitung taugt, außer man nimmt den Verlust in Kauf.
Ich meine das es eigentlich ausreichend wäre/ist, wenn die Kollation der Text Felder (wie schon beschrieben) in den Tabellen utf8mb4_irgendwas (ebenfalls wie beschrieben) ist. Das die ganze DB von vorrnherein so deklariert wird, ist nur dann möglich, wenn man selbst komplett dazu berechtigt ist, was wahrscheinlich bei Hostern nur eher bedingt der Fall sein wird. Bezüglich Kollationen und charsets haben wir also generelle Einstellungen für den Server und den Client, also eher sehr globale Einstellungen, spezifische Datenbankeinstellungen, denn ein Datenbanksystem kann ja mehrere Datenbanken haben, Tabelleneinstellungen die für die Tabellen selbst gelten und Einstellungen der einzelnen Felder in den Tabellen. Das sind die granulierten Abhängigkeiten, meine ich.
Vielleicht irre ich mich diesbezüglich auch und die Export/Import Frage ist doch von der globalen Einstellung abhängig. Geschrieben hatte ich die Datenbank Preparation für eine Styx Installation so: https://ophian.github.io/hc/en/preparing-db.html
Was steht denn im zur Verfügung gestellten Dump und deinen Dumps die du selbst hier gezogen hattest am Anfang bei
Das 40101 ist dabei nur ein comment, der besagt, es nicht unterhalb mysql versionen 4.1.1 zu installieren. Der set names Befehl aber ist wichtig.
Das verstehe ich nicht - auch nicht vom Sinne her. Denn wenn, dann dürftest du dieses Emoji 🤔 nicht sehen können, weder hier im blog comment, noch in der aufgeklappten pma Tabellenansicht, noch in der pma Bearbeitungsansicht für ein comment. Und wenn, dann hätte es bisher ja auch nicht geklappt.. 🧐
Ian Styx am :
Tut sich da diesbezüglich noch was? Nur um sicherzugehen dass es kein allgemeiner Fehler ist?! Oder auch nur um zu sicher zu sein dass deine Grundlagen stimmen?!! 😅 (Drängeln will ich aber nicht. Also keine Nötigung!)
Beat Post author am :
Hmmm... 🤔
Im Moment habe ich einfach andere Prioritäten. Zudem fällt es mir halt schwer einem Problem hinterherzujagen, welches ich nur halbwegs verstehe.
Ich denke nicht, dass es sich um ein Styx-Problem handelt, denn bei der Manitu-Installation habe ich diese Probleme nicht.
In den Hosttech-DB-Dumps steht zu Beginn:
Und zur Information, die Deklaration der DBs:
Diesbezüglich sind also beide Hoster ziemlich gleich (konservativ) unterwegs.
Ian Styx am :
Und hast du da unter notepad++ auch das angesprochene Kästchen als placeholder für die 4-Byte Zeichen stehen?
Dann wäre es dort auch richtig.
Ich nehme an, dass das eben inklusive dem SET NAMES utf8mb4 im hosttech dump eben nicht da war, was das ganze erklären kann. Dann bliebe nur noch zu klären, ob sie auch deine Datenstruktur (also die Tabellen) mit dem Dump überschrieben haben und ob wir da eventuell wieder etwas einfügen müssten. Und vielleicht, ob sie nicht doch noch die Originaldatenbank haben mit der man einen verbesserten Datenexport wagen könnte. Oder wir lassen das und leben halt mit unseren Fragezeichen, bzw tragen sie selbst wieder nach, wo sie zu fragwürdigen Irrsinn führen. 🤨
Das mit der email und mail steht auch immer noch aus, oder?
Beat Post author am :
Nein. Ausser den Fragezeichen war/ist da gar nichts.
Ja. Nach wie vor keine E-Mail-Benachrichtigungen.
Ian Styx am :
Kannst du mir solch einen Export bitte mal im Backend hinterlegen?!? (Dateiname a la 47478rvr68rcc4644x747x5xe57.sql als Beispiel bitte für die Öffentlichkeit unratbarbar machen 🙂)
Beat Post author am :
ist hochgeladen
Ian Styx am :
Danke. Schau noch mal in unseren Text bitte.
Beat Post author am :
Geht auch *.rar? Wenn ja, dann siehe Mediathek.
Ian Styx am :
Ja. Danke! Kann jetzt alles wieder weg. Sicher ist sicher.
Ich werde den Dump demnächst mal näher untersuchen. Auf den ersten Blick scheinen die Datei Kodierung in NPP und die Tabellen KOLLATIONEN des Dumps zu stimmen, aber es hat die Fragezeichen. Ich muss mal in Ruhe und mit etwas Zeit überlegen wie das nun eigentlich sein kann. Allerdings, zerstückelte 4-Byte Fragezeichen Ersatzlinge wieder rückzuverwandeln geht leider nicht, wie schon gesagt.
Das ist aber ja ein Dump des jetzigen Zustandes. Nicht der von hosttech gemachte Dump, nicht wahr?!
Ähneln die sich gerade in den beiden genannten genannten Überprüfungen? 🧐
Beat Post author am :
Ja. Ist glaub ich vom 07.05.21. Habe ich selber exportiert.
Ja. Die sind vom Aufbau her gleich.