Ich schreibe diesen Blogbeitrag auf meinem neuen Server. Der alte wird in etwa zwei Stunden abgeschaltet. Da ich einige WordPress-Seiten und eine Matomo-Instanz hoste, war die Migration schon eine größere Aufgabe.
Ich bin bei der Migration meinem „5 Minuten Migration-Prozess“ gefolgt und alles lief so weit wie erwartet. Als ich dann aber meinem Blog nach der DNS-Umstellung aufgerufen hatte, haben auf einmal zwei Text-Widgets gefehlt. Was war passiert?
Emojis ?
Seit einer ganzen Weile unterstützt WordPress nativ Emojis. Man kann sie einfach in einen Blogbeitrag einfügen und WordPress zeigt sie an. In der Vergangenheit wurde dazu noch ein SVG-Sprite verwendet. Aber da moderne Betriebssysteme und Browser diese nun nativ unterstützen, ist das nicht mehr notwendig.
Aber wieso hat die Verwendung von Emojis bei nach der Migration zu einem Fehler geführt? Auf dem alten Server habe ich MySQL 8 verwendet und auf dem neuen ist es MariaDB 10. Beim Export der Datenbank habe ich einfach wie immer wp db export
ausgeführt. Aber nach dem Import waren dann UTF-8-Multibyte-Zeichen defekt. Anstelle von Emojis wurden nur einige ??
Symbole angezeigt.
Vermutlich hat dies die unserialize()
Funktion WordPress, die WordPress verwendet gestört, und das ganze Widget war kaputt. Dies hat dann dazu geführt, dass die ersten beiden Text-Widgets nicht mehr angezeigt wurden, obwohl sie in der Datenbank vorhanden waren.
Exportieren der Datenbank mit utf8mb4
Nachdem ich den Fehler gefunden und ein wenig recherchiert habe, bin ich auf ein WP-CLI Issue zu diesem Effekt gestoßen. Ich konnte anschließend durch das Hinzufügen eines Flags für das Standard-Charset einen funktionierenden Dump exportieren:
$ wp db export --default-character-set=utf8mb4
Das Importieren dieses SQL-Dumps hat den Fehler dann behoben, und die beiden Text-Widgets waren wieder da. Und es wurden auch wieder alle Emojis in den Blogbeiträgen angezeigt.
Fazit: Immer die WP-CLI aktualisieren!
Nachdem ich die Datenbank erfolgreich reparieren konnte, wollte ich wissen, wieso das (noch immer) passiert. Das Issue gibt an, dass der Fehler im db-command behoben und mit Version 2.5.0 der WP-CLI veröffentlicht wurde. Allerdings habe ich auf dem Server noch die Version 2.4.0 verwendet, die diesen Fix noch nicht enthielt.
Nach einem Update auf die aktuelle Version (2.7.1), musste ich das Flag nicht mehr angeben, und habe dennoch einen korrekten Export inklusive Emojis und andere utf8mb4 Zeichen erhalten.
Bevor ihr also wichtige Wartungsaufgaben durchführt, solltet ihr besser immer die WP-CLI auf die neueste Version aktualisieren, um nicht in Fehler zu rennen, die schon lange behoben sind und die ihr vielleicht nicht sofort bemerkt. Hätte ich den Fehler erst in ein paar Tagen/Wochen bemerkt, dann wäre es sehr schwierig geworden, die Datenbank zu reparieren/synchronisieren.