name: nullfeld-mariadb-socket-bind-fix
description: "MariaDB *:3306-Bind auf nullfeld live gefixt (2026-08-13) â Root Cause war mariadb.socket (Systemd-Socket-Aktivierung), nicht die App-Config; Override-Muster fĂŒr kĂŒnftige Ă€hnliche FĂ€lle"
metadata:
node_type: memory
type: project
Der seit [[crumbquestions-v0-crumb-bridge]]/deployment_checklist.rs (2026-08-11) dokumentierte Fund â MariaDB auf nullfeld bindet an *:3306 statt 127.0.0.1 â ist live behoben, nicht nur umbenannt.
Root Cause war ĂŒberraschend: /etc/mysql/mariadb.conf.d/50-server.cnf hatte die ganze Zeit korrekt bind-address = 127.0.0.1 â MariaDB selbst bestĂ€tigte das per SHOW VARIABLES LIKE 'bind_address'. Die tatsĂ€chliche Ursache war mariadb.socket (Debian nutzt Systemd-Socket-Aktivierung fĂŒr MariaDB): die Unit-Datei hat ListenStream=3306 ohne Adresse, wodurch Systemd den Port auf alle Interfaces bindet, bevor mariadbd ĂŒberhaupt startet â die App-Config war die ganze Zeit korrekt, aber irrelevant.
Fix: /etc/systemd/system/mariadb.socket.d/override.conf:
[Socket]
ListenStream=
ListenStream=@mariadb
ListenStream=/run/mysqld/mysqld.sock
ListenStream=127.0.0.1:3306
Die leere ListenStream= zuerst ist zwingend nötig â sonst addiert der Override-Mechanismus nur zur bestehenden Liste, statt sie zu ersetzen. Danach daemon-reload.
Reihenfolge beim Neustart war der einzige Stolperstein: systemctl restart mariadb.socket schlĂ€gt fehl, solange mariadb.service noch lĂ€uft ("Socket service mariadb.service already active, refusing") â kein Schaden entstanden (alter Prozess lief unverĂ€ndert weiter), aber die richtige Reihenfolge ist: stop mariadb.service â restart mariadb.socket â start mariadb.service.
Verifiziert: ss -tlnp danach 127.0.0.1:3306 statt *:3306. mysql SELECT 1 und der App-Health-Check (GET /health der laufenden Crumbforest-Instanz) blieben wĂ€hrend des gesamten Eingriffs erreichbar â kein Ausfall.
In CrumbQuestions_v0 dokumentiert: deployment_checklist.rss Fail-Eintrag auf Pass gehoben, mit dem echten Fix als Evidence, Test in zwei benannte Tests aufgeteilt (Fix bestĂ€tigt vs. der zweite bekannte Fail â fehlende NGINX-Security-Header â bleibt offen).
Warum relevant fĂŒr Ă€hnliche FĂ€lle: wenn eine Bind-Adresse in einer App-Config korrekt aussieht, aber ss -tlnp trotzdem eine offene Bindung zeigt, bei Debian/Systemd-verwalteten Diensten IMMER prĂŒfen, ob ein <dienst>.socket-Unit mit eigenem ListenStream= existiert â das gewinnt gegen die App-eigene Config, weil Systemd den Socket öffnet, bevor der Dienst ĂŒberhaupt startet. LISTEN-Zeile in ss -tlnp, die sowohl den Dienst-Prozess als auch systemd (pid=1) als Owner zeigt, ist der Hinweis auf Socket-Aktivierung.
Verwandt: [[nullfeld-qdrant-ollama-loopback-bind]] (gleicher nullfeld-Kontext, gleiches "wo bindet was wirklich"-Muster, aber dort war die App-Config selbst die Quelle â hier war es ausdrĂŒcklich nicht die App-Config).