Es war vor gut zwei Jahren, dass mir das Thema utf8mb4 auffiel. Ein Thema, das auch meinen Hoster uberspace betrifft, denn dort kommt – CentOS 6 sei “Dank” – MySQL 5.1.73 zum Einsatz, und utf8mb4 gibt es erst ab 5.5.3. Was ich leidvoll feststellen musste, als WordPress einen Post nur bis zu einem eingefügten Emoji gespeichert hat, alles darüber hinaus war (stillschweigend!) flöten. Damals wurde ich auf CentOS 7 vertröstet, das das dann können sollte.
Am 16.2. dieses Jahres kam dann der erlösende Blogpost: uberspace unterstützt MariaDB, und zwar in der “zu MySQL 5.5 kompatiblen” Version 10.0 – trotz CentOS 6:
eine Übergangslösung, die nur für Leute gedacht ist, die zwingend hier und jetzt unbedingt MySQL 5.5 bzw. etwas dazu Kompatibles brauchen.
“Hier und jetzt”, eh, ja. In dem Zusammenhang:
Sobald unsere CentOS-7-Hosts am Start sind […]
Dazu gibt es immer noch keinen Zeitplan, Stand 8. April 2016. Aber zurück zum Thema: Das Wiki sagt
Mit dem Befehl
uberspace-setup-mariadb
kannst du dir eine Datenbank auf dem Host anlegen. Die Zugangsdaten werden in~/.my.mariadb.cnf
abgelegt.
, was bei mir zuerst nicht geklappt hat:
1 2 |
[crusy@circinus ~]$ uberspace-setup-mariadb ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111) |
Nachdem der Support tätig wurde, war der Fehler zwar weg, aber erwähnte .my.mariadb.cnf
leer. Inzwischen läuft das aber rund (Danke an den Support an dieser Stelle für die schnelle Reaktion), deshalb hier die vollständige Migration:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// 1. Datenbank aus MySQL exportieren: [crusy@circinus ~]$ mysqldump -u crusy -pMeinMysqlPasswort crusy_blog > blog.sql // 2. Datenbank in MariaDB anlegen: [crusy@circinus ~]$ uberspace-setup-mariadb [crusy@circinus ~]$ mysql --defaults-file=~/.my.mariadb.cnf mysql> CREATE DATABASE crusy_blog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; mysql> exit // 3. MySQL-Dump in MariaDB importieren: [crusy@circinus ~]$ mysql --defaults-file=~/.my.mariadb.cnf crusy_blog < blog.sql // 4a. Zugangsdaten für MariaDB ansehen: [crusy@circinus ~]$ vi .my.mariadb.cnf // 4b. WordPress auf MariaDB umschalten: [crusy@circinus ~]$ vi virtual/blog.crusy.net/wp-config.php // zu ändern ist konkret: // define('DB_HOST', '127.0.0.1:3307'); // NICHT localhost:3307 // define('DB_PASSWORD', 'Passwort aus .my.mariadb.cnf'); // define('DB_CHARSET', 'utf8mb4'); // define('DB_COLLATE', 'utf8mb4_unicode_ci'); // '' scheint auch zu funktionieren // 5. dump löschen: [crusy@circinus ~]$ rm blog.sql |
Et voilà: Von 💩 zu 👍 in fünf einfachen Schritten! 😊 Dasselbe jetzt noch für meinen Feedreader! 💪
UPDATE
Meh: Fever “kann” das nicht. Erstens ist utf8 dort hart im Code verdrahtet, zweitens ist bsplw. der Titel eines Eintrags ein varchar(255) – und ein Key:
255 mal 4 Byte (wie in utf8mb4) sind aber mehr als 1000 Byte, und das ist das Limit für einen Schlüssel m( Change Request bei Fever läuft.
UPDATE
Ich empfehle Super Emoji Plus+!
UPDATE
uberspace zum Thema “CentOS uberspace 7″ und Zeitplänen – für solche Ansagen mag ich die Jungs 😉
UPDATE
Beim Update auf eine neuere MariaDB-Version hat sich die Interpretation von “utf8” seitens MariaDB “geändert”, jetzt wird daraus utf8_mb3 (nicht 4!). Dadurch gehen (wieder) alle Emojis kaputt. Man muss man jede Spalte (🤯) explizit von “utf8mb3_general_ci” auf “utf8mb4_general_ci” ändern – ich empfehle so.
Hi,
vielen Dank für den Beitrag, hat mir sehr geholfen! Ich musste die Tabellen meiner bestehenden Installation noch auf utf8mb4_unicode_ci aktualisieren, und habe da eine recht einfache Lösung für gefunden: http://wordpress.stackexchange.com/a/244992/112824
Viele Grüße
Florian
Danke dafür!
Und auch an Florian für deinen Kommentar!
Vorsicht mit Backups machen: Das mysqldump auf Uberspace 6 verwandelt all die schönen utf8mb4 Zeichen zu nutzlosen ??? Fragezeichen. Ist hier leider erst nach dem Umzug auf U7 Beta aufgefallen. Hatten zum Glück noch andere Backups.
Da MySQL auf U6 gar kein utf8mb4 kann (deshalb ja dieser ganze Zauber), stehen die schon kaputt in der DB, wie sollen sie dann heile exportiert werden? Oder stehe ich gerade auf dem Schlauch?
Wenn du mit mysqldump ein Backup von MariaDB machst. Wie es Uberspace in der eigenen Doku vorschlägt https://wiki.uberspace.de/database:mysql#mariadb_100 “””Wir erstellen zwar auch von diesem separaten Host regelmäßig Backups; auf jene hast du aber – im Gegensatz zu den normalen MySQL-Backups – nicht direkt Zugriff, sondern wir müssen dir Dumps auf Anfrage bereitstellen. Du kannst natürlich auch selbst mit mysqldump –defaults-file=~/.my.mariadb.cnf jederzeit eigene Dumps erstellen.”””
…und da MariaDB ja vorgeblich mit MySQL “kompatibel” ist verleitet es dazu, die auf U6 vorhandenen MySQL Userland-Tools weiter zu verwenden – machst du in deiner Anleitung ja auch so, mysql Befehl spielt auf mariadb.
Nur daß da dann stillschweigend, ganz ohne Fehlermeldungen, dann Zeichen verschütt gehen, das hatte ich nicht auf dem Radar.
Ah! Cool, Danke