MySQL in Docker: root-Kennwort zurücksetzen
Bei einem Kunden war ein Docker-Stack mit MySQL im Einsatz. Das Kennwort für den MySQL-root-Benutzer war allerdings nicht bekannt.
In der Docker Compose-Datei war MySQL ungefähr wie folgt hinterlegt:
version: '3.3'
services:
db01:
image: "mysql:8.0"
restart: always
volumes:
- /common/database:/var/lib/mysql
Das root-Kennwort wurde für administrative Zwecke benötigt. Also: zurücksetzen. Kleiner Hinweis: hier ist mit Downtime der Datenbank zu rechnen.
In dem selben Verzeichnis, in dem die Compose-Datei liegt, neue Datei reset-pw.sql
erstellen:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'HierNeuesKennwort';
Diese Datei schleifen wir nun zu dem Container durch.
version: '3.3'
services:
db01:
image: "mysql:8.0"
restart: always
volumes:
- /common/database:/var/lib/mysql
- ./reset-pw.sql:/tmp/reset-pw.sql
Nun nehmen wir das komplette Compose-Projekt offline und starten den Datenbankserver-Container, ohne den MySQL-Dienst in diesem zu starten / stumpf ne Bash-Shell in diesem.
docker-compose down
docker-compose run db01 bash
Nun sind wir auch automatisch in dem Container; hier starten wir nun den MySQL Server mit dem oben gemountetem Startscript als initfile:
mysqld --init-file=/tmp/reset-pw.sql &
Nach einem kurzen warten, ob der Server wieder hoch kommt, testen wir mit folgendem Befehl die Verbindung:
mysql -h localhost -u root -p
Nach der Eingabe des Kennwortes „HierNeuesKennwort“ (siehe oben) checken wir kurz, ob alles chico ist:
SHOW DATABASES;
Sieht alles chico aus. Kennwort von MySQL im Container ist zurückgesetzt. Zwei mal exit
eingeben, dann ist der Container wieder gestoppt.
Die durchgeschliffene Datei wieder aus der Compose-Datei entfernen, vom Dateisystem löschen, und den Datenbank-Server wieder regulär starten:
docker-compose up
Und ditte wars.
Kleiner Hinweis: sollte ein anderer Container die root-Daten zur Anmeldung am MySQL-Server nutzten, müsst ihr das Kennwort an dieser auch anpassen. Oder idealerweise einen eigenen Benutzer hierfür erstellen.