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.

Kategorien:Docker