Ansichten eines Informatikers

Debugging zum Mäusemelken

Hadmut
21.10.2026 3:34

Manchmal hat man es als Informatiker auch nicht leicht.

Gerade zwei, drei Stunden meiner Lebenszeit vergeudet.

Ich habe einen Server von Ubuntu 24.04 auf 26.04 aktualisiert. Dabei warnt einen das Tool do-release-upgrade sogar, dass es ein Problem gibt: Auf der Maschine war ein mysql installiert, und wenn man da aktualisiert, läuft man in ein Problem: Bisher war die Standard-Passwort-Methode ‘native’, und die ist nun deprecated und als default nicht mehr eingeschaltet, weil sie als nicht sicher genug gilt.

Nun hat man zwei Möglichkeiten:

  1. Man aktualisiert alle eingetragenen Benutzer vorher mit ALTER USER ''@'' IDENTIFIED WITH caching_sha2_password BY '';
  2. Man trägt in die Config ein, dass man die native-Methode vorerst weiterbenutzen will, bis sie dann in einer künftigen Version ganz rausfliegt, indem man in die Config
    [mysqld]
    mysql_native_password = ON
    

    einträgt oder einen Kommandozeilenparameter hinzufügt. Zum Beispiel hier beschrieben. Und aktualisiert die Benutzer dann nach dem Uprade.

Also dachte ich mir, die zweite Methode tut’s. Kommandozeilenparameter hinzufügen ist nicht so gut, weil man entweder die service-unit überschreibt und die dann beim nächsten Update überschrieben werden könnte, oder man legt eine overlay-Datei an, bekommt dann aber nicht mit, wenn sich an der Hauptversion etwas ändert. Und, so dachte ich mir weiter, dass das doch ideal ist, das wie beschrieben in die Config-Datei zu schreiben, weil ich den Server nämlich ohnehin mit Ansible konfiguriere und schon eine ini_file-Klausel hatte, da schreibe ich das einfach dazu, nur eine Zeile mehr:

- name: mysqld.cnf
  notify: restart mysql
  ini_file:
    path:     /etc/mysql/mysql.conf.d/mysqld.cnf
    section:  mysqld
    option:   "{{item.key}}"
    value:    "{{item.value}}"
    backup:   yes
  with_dict:
    bind-address:          127.0.0.1
    mysqlx-bind-address:   127.0.0.1
    mysqlx:                0
    mysql_native_password: ON

Sieht jemand den Fehler?

Hat mich jetzt zwei Stunden gekostet, bis ich auf den Fehler gekommen bin, weil immer dann der Server nicht gestartet ist und sich beschwert hat, dass er die Variable mysql_native_password nicht setzen kann.

Bis mir aufgefallen ist, dass Ansible in die Config-Datei

[mysqld]
mysql_native_password = True

schreibt. Merkt Ihr’s?

True statt ON.

Warum?

Weil die Konfigurationsdatei in Yaml geschrieben ist, und das beim Lesen als boolean interpretiert und beim rausschreiben anders darstellt wird, MySQL frisst das so nicht.

Setzt man Anführungszeichen, was ich eigentlich hätte wissen müssen, aber übersehen habe, also

    mysql_native_password: "ON"

läuft es richtig. Dann ist es nämlich kein Boolean, sondern ein String, und dann funktionert es auch.

Dann kann man sich schön einloggen und die Passworte in aller Ruhe wie oben beschrieben eines nach dem anderen auf das neue Verfahren umstellen.

Grrrr!

Oder, wie man unter Informatikern so schön sagt: Kaum macht man es richtig, geht’s.