Volles Unicode in MySQL Datenbanken

MySQL hatte lange Zeit Probleme mit Zeichensätzen; der bekannte Zeichensalat (auch „Mojibake“ genannt) war die Folge. Dann kam endlich der universelle Zeichensatz Unicode, bzw. UTF8. Praktisch verborgen blieb jedoch bis heute, dass MySQL standardmässig nur einen „beschränkten Unicode Zeichensatz“ verwendet. Dieser besteht nur aus 3, anstelle von 4 Zeichen und war wohl ursprünglich als „Performace-Optimierung“ gedacht.

Das reicht zwar für die allermeisten Schriftzeichen und Symbole, beispielsweise aber nicht für die mittlerweile sehr häufig verwendeten emojis. Schlimmer noch, probiert man ein solches Zeichen (z.B. ein emoji) in die Datenbank einzufügen, wird alles was nach dem Zeichen kommt abgeschnitten. Und das kann wiederum zu schlimmen Sicherheitslücken führen.

Dabei hatte MySQL seit etwa 2010 einen „neuen“ (bzw. den vollen) UTF8-Zeichensatz eingeführt mit dem Namen: utf8mb4.

Neuere Web-Applikationen, wie WordPress oder Typo3 verwenden diesen seit einiger Zeit standardmässig, allerdings nur bei einer Neuinstallation. Viele ältere Datenbanken haben also noch den unvollständigen Zeichensatz eingestellt. Höchste Zeit also die alten Datenbanken mit dem richtigen Unicode Zeichensatz zu aktualisieren.

Continue reading Volles Unicode in MySQL Datenbanken

mysql general query log einschalten

Wenn man einen Vorgang in der mysql/mariadb Datenbank debuggen will, kann es nützlich sein, sämtliche Queries die mysql macht zu loggen. Dies geht mit dem general query log, welches mit diesen drei Zeilen in der /etc/mysql/server.cnf erreicht wird:

log_output=FILE
general_log
general_log_file=/var/log/mysql/queries.log

Aber Achtung: Dies kan enorm viel loggen und ist somit sowohl für die Performance, wie auch Festplatte eine grosse Belastung. Das sollte unbedingt nur kurzzeitig zum Debuggen eines Problems aktiviert. und danach wieder deaktiviert werden.

Bareos: Backup Clients umbenennen

Will man einmal die hostnamen seiner Clients im Netzwerk umbenennen und somit auch die Client-Namen in der bareos Konfiguration entsprechend anpassen muss man vorsichtig sein: Denn dann sieht Bareos jeden Client als „neu“ an und fängt somit wieder mit einem FULL Backup an. Dies kann je anch Anzahl Clients und/oder Speichermenge zu einem plötzlich heftigen Anstieg des Backup-Speichers führen.

Continue reading Bareos: Backup Clients umbenennen

regex String zwischen zwei Zeichen isolieren

Mit regex kann man wunderbar nach allen möglichen Ausdrücken suchen. Nur wird z.B. wenn man genau einen String zwischen zwei Zeichen sucht (z.B. in einem HTML Output: <a href=server> will ich nur das Wort „server“) auch das die Zeichen links- und rechts ausgegeben.
Mittels „lookaround“ lässt sich in regex nur der Gesucht String ausgeben.

Continue reading regex String zwischen zwei Zeichen isolieren

typo3: Benutzergruppe von Benutzer per SQL auslesen

Will man die Benutzergruppe eines Benutzer in typo3 aus der Datenbank auslesen, steht man zunächst einmal vor einem Problem: Denn alle Benutzergruppen stehen in der Tabelle fe_users im Feld usergroup als Komma-Separierte Liste drin.

Continue reading typo3: Benutzergruppe von Benutzer per SQL auslesen

kickstart Definition für Variable Festplatten Grössen

Möchte man mittels kickstart ein RHEL/CentOS automatisiert aufsetzen, ist es etwas ungenau dokumentiert, wie man die Partitionierung macht, so dass der Rest des Platzes einfach in der Volume Group landet.

Continue reading kickstart Definition für Variable Festplatten Grössen

MySQL Galera Cluster: Specified key was too long; max key length is 767 bytes

Der Grund diese Meldung ist, dass bei MySQL die Gesamtzahl aller UNIQUE/PRIMARY keys 767 Bytes nicht überschreiten darf, wobei bei utf8 drei- und bei utf8mb4 vier Bytes pro Zeichen kommen. Somit dürfte die Gesamtzahl aller UNIQUE/PRIMARY keys 191 Zeichen (767 / 4) pro Tabelle nicht überschreiten.

Continue reading MySQL Galera Cluster: Specified key was too long; max key length is 767 bytes