-
Was ist ein vServer?
-
vServer und Sicherheit
-
vServer - Anwendungsfälle
-
vServer bei dogado
-
vServer und Plesk
-
vServer Betriebssyteme
-
vServer Glossar
Für das root-Passwort von MySQL und MariaDB gibt es keinen „Passwort vergessen“-Link. Zurücksetzen lässt es sich trotzdem: Du brauchst dafür nur Root- bzw. sudo-Zugriff auf deinen Server, zum Beispiel per SSH.
Wie du vorgehst, hängt davon ab, ob die Datenbank direkt auf dem Server installiert ist oder in einem Docker-Container läuft. Beide Wege findest du hier.
1. Welches Passwort willst du zurücksetzen?
Datenbank ist nicht gleich Datenbank. Je nach Ausgangslage brauchst du eine andere Lösung:
| Fall | Lösung |
|---|---|
| Du kennst das root-Passwort, nur das Passwort eines Anwendungs-Users (z. B. „wordpress“) fehlt. | Melde dich als root an und setze das Passwort des Users neu: Kapitel 3. |
Du kommst mit sudo mariadb bzw. sudo mysql ohne Passwort in die Datenbank. | Du hast bereits alle Rechte über den Systembenutzer: Kapitel 3.3 für Anwendungs-User, Kapitel 4.1 für das root-Passwort. |
| Du hast ein Webhosting-Paket und keinen eigenen Server. | Setze das Passwort im Kundenbereich zurück oder wende dich an den Support. |
| Du betreibst deinen eigenen Server und hast das root-Passwort vergessen. | Kapitel 4 (Datenbank direkt installiert) bzw. Kapitel 5 (Datenbank im Docker-Container). |
2. Datenbank und Betriebsart ermitteln
Prüfe zuerst, welche Datenbank auf deinem Server läuft und ob sie direkt installiert ist oder per Docker bereitgestellt wird. Eine direkt installierte Datenbank findest du so:
systemctl list-units --type=service --all | grep -E 'mariadb|mysql'
Die Ausgabe zeigt dir auch den Namen der Service-Unit, den du später brauchst. MariaDB läuft als mariadb.service, MySQL unter Debian und Ubuntu als mysql.service, bei anderen Installationen auch als mysqld.service. Merke dir, ob es sich um MariaDB oder MySQL handelt. In meinem Beispiel ist ein MySQL-Server direkt installiert.
Auf einem Server können gleichzeitig eine direkt installierte Datenbank und weitere Datenbanken in Containern laufen. Deine Docker-Container listest du so auf:
sudo docker ps --format '{{.Names}}\t{{.Image}}'
Achte vor allem auf die Image-Spalte, zum Beispiel mariadb:11.8 oder mysql:8.4. Containernamen sind frei wählbar und verraten nicht zuverlässig, welche Datenbank dahintersteckt. In meinem Beispiel laufen zwei Datenbanken per Docker: MariaDB im Dienst „db“ und MySQL im Dienst „db-mysql“.
Ist dein Benutzer Mitglied der Gruppe docker, kannst du bei allen Docker-Befehlen in dieser Anleitung das sudo weglassen.
3. Nur das Passwort eines Anwendungs-Users fehlt
Das ist der häufigste Fall, denn Anwendungen wie WordPress nutzen in der Regel einen eigenen Datenbank-User statt root. Kannst du dich als root anmelden, änderst du das Passwort in wenigen Schritten.
3.1 Login bei direkt installierter Datenbank
Probiere zuerst den passwortlosen Login über sudo:
sudo mariadb # MariaDB
sudo mysql # MySQL
Klappt das nicht, meldest du dich mit dem root-Passwort an:
mariadb -u root -p # MariaDB
mysql -u root -p # MySQL
Nach erfolgreichem Login machst du mit Kapitel 3.3 weiter.
3.2 Login im Docker-Container
Wechsle in das Verzeichnis deiner Docker-Compose-Datei und ersetze den Dienstnamen durch deinen eigenen (wie du ihn findest, steht in Kapitel 5.1):
sudo docker compose exec db mariadb -u root -p # MariaDB
sudo docker compose exec db-mysql mysql -u root -p # MySQL
Bei sehr alten MariaDB-Images heißt der Client noch mysql statt mariadb.
3.3 Passwort des Users ändern
Ein Benutzer ist in MySQL und MariaDB immer die Kombination aus Nutzername und Host. Lass dir deshalb zuerst alle Konten anzeigen:
SELECT user, host FROM mysql.user;
In meinem Beispiel gibt es neun Konten, darunter wordpress@localhost und wordpress@%. Ändere nur die Konten deines Users, diese aber alle. Ersetze „wordpress“ und das Passwort durch deine eigenen Werte.
MariaDB:
ALTER USER 'wordpress'@'localhost' IDENTIFIED BY 'NeuesSicheresPasswort';
ALTER USER 'wordpress'@'%' IDENTIFIED BY 'NeuesSicheresPasswort';
EXIT;
MySQL:
ALTER USER 'wordpress'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'NeuesSicheresPasswort';
ALTER USER 'wordpress'@'%' IDENTIFIED WITH caching_sha2_password BY 'NeuesSicheresPasswort';
EXIT;
Ein FLUSH PRIVILEGES brauchst du hier nicht, ALTER USER wirkt sofort.
Trage das neue Passwort anschließend in der Konfiguration deiner Anwendung ein, bei WordPress zum Beispiel in der wp-config.php unter DB_PASSWORD. Sonst kann die Anwendung keine Verbindung mehr zur Datenbank aufbauen.
root-Passwort zurücksetzen: Datenbank direkt auf dem Server
Lege vor jeder Änderung ein Backup an, damit du im Fehlerfall zum vorherigen Stand zurückkehren kannst.
4.1 Erst prüfen: Klappt der Login über sudo?
Unter Debian und Ubuntu ist der Datenbank-root standardmäßig an den root-Benutzer des Systems gekoppelt. MariaDB nennt das unix_socket, MySQL auth_socket. Probiere deshalb zuerst:
sudo mariadb # MariaDB
sudo mysql # MySQL
Kommst du so in die Datenbank, brauchst du keinen Notfallmodus und meist auch kein root-Passwort. Willst du trotzdem eines setzen, führst du direkt den ALTER USER-Befehl aus Kapitel 4.2 (MariaDB) bzw. 4.3 (MySQL) aus.
Erscheint stattdessen diese Meldung, wurde root auf Anmeldung per Passwort umgestellt, zum Beispiel bei der Installation:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
Dann machst du mit Kapitel 4.2 (MariaDB) oder 4.3 (MySQL) weiter.
4.2 MariaDB: Notfallmodus starten
Im Notfallmodus startet der Datenbankserver ohne die Berechtigungstabellen (Grant Tables). Dann kann sich jeder ohne Passwort und mit allen Rechten anmelden. Die Option --skip-networking sperrt deshalb alle Netzwerkverbindungen, möglich sind nur lokale Anmeldungen. Die Datenbank ist dabei kurz nicht erreichbar, plane das für deine Websites und Anwendungen ein.
sudo systemctl stop mariadb
sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"
sudo systemctl start mariadb
Jetzt meldest du dich ohne Passwort an:
sudo mariadb -u root
Lade zuerst die Berechtigungstabellen nach. Ohne diesen Schritt lehnt der Server den Passwortwechsel ab:
FLUSH PRIVILEGES;
Anschließend setzt du das neue Passwort und verlässt den Datenbank-Client:
ALTER USER 'root'@'localhost' IDENTIFIED VIA unix_socket OR mysql_native_password USING PASSWORD('NeuesSicheresPasswort');
EXIT;
Dieser Befehl behält die Anmeldung über sudo bei und ergänzt das Passwort als zweiten Weg. Ein einfaches IDENTIFIED BY würde die Anmeldung über sudo abschalten. Dann könnten auch Wartungsskripte scheitern, die sich so anmelden.
Jetzt deaktivierst du den Notfallmodus wieder:
sudo systemctl stop mariadb
sudo systemctl unset-environment MYSQLD_OPTS
sudo systemctl start mariadb
Teste das neue Passwort ohne sudo, sonst greift die Socket-Anmeldung und das Passwort wird gar nicht abgefragt:
mariadb -u root -p
4.3 MySQL: Notfallmodus starten
Auch hier startet der Server ohne Berechtigungstabellen und die Datenbank ist kurz nicht erreichbar. Bei MySQL ergänzt du die Startoptionen über eine systemd-Override-Datei. Heißt deine Unit mysqld statt mysql (siehe Kapitel 2), passt du den Namen in allen systemctl-Befehlen an.
sudo systemctl stop mysql
sudo systemctl edit mysql
Im Editor fügst du folgende Zeilen ein, und zwar im oberen Bereich zwischen den beiden Kommentarzeilen. Was außerhalb steht, verwirft systemd beim Speichern.
[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --skip-grant-tables --skip-networking
Die leere Zeile ExecStart= löscht den ursprünglichen Startbefehl. Ohne sie hätte der Dienst zwei Startbefehle und würde nicht starten. Speichere die Datei, starte MySQL und melde dich ohne Passwort an:
sudo systemctl start mysql
sudo mysql -u root
Lade die Berechtigungstabellen nach, vergib das neue Passwort und verlasse den Client:
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'NeuesSicheresPasswort';
EXIT;
root meldet sich danach nur noch per Passwort an, sudo mysql ohne Passwort funktioniert nicht mehr. Möchtest du die Anmeldung über sudo später zurück, setzt du ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;.
Jetzt entfernst du die Override-Datei und startest MySQL normal:
sudo systemctl stop mysql
sudo systemctl revert mysql
sudo systemctl daemon-reload
sudo systemctl start mysql
Teste zum Schluss die Anmeldung mit deinem neuen Passwort:
mysql -u root -p
5. root-Passwort zurücksetzen: Datenbank per Docker-Container
Die Umgebungsvariablen MARIADB_ROOT_PASSWORD bzw. MYSQL_ROOT_PASSWORD in der Compose-Datei zu ändern, hilft hier nicht. Sie werden nur beim allerersten Start mit leerem Datenverzeichnis ausgewertet, eine spätere Änderung bewirkt nichts mehr. Lege auch hier vorher ein Backup an.
5.1 Dienstnamen ermitteln
sudo docker ps zeigt dir die Containernamen. Für docker compose-Befehle brauchst du aber den Dienstnamen, also den Namen direkt unter services: in deiner Compose-Datei. Docker Compose benennt Container standardmäßig nach dem Schema projekt-dienst-1, mit container_name kann der Name sogar ganz abweichen.
Wechsle in das Verzeichnis deiner Compose-Datei (meist compose.yaml oder docker-compose.yml) und lass dir die Dienste anzeigen:
sudo docker compose ps --services
Merke dir den Dienstnamen und ob der Container MariaDB oder MySQL nutzt (Image-Spalte aus Kapitel 2). So änderst du nicht versehentlich die falsche Datenbank.
5.2 MariaDB: Notfallmodus per Docker Compose
Öffne die Compose-Datei und ergänze beim Datenbankdienst die Startoptionen:
services:
db:
image: mariadb:11.8
command: --skip-grant-tables --skip-networking
Hat der Dienst schon eine command-Zeile, hängst du die beiden Optionen dort an, statt eine zweite Zeile anzulegen.
Erstelle den Container neu und melde dich ohne Passwort an. Den Dienstnamen (hier „db“) ersetzt du durch deinen eigenen:
sudo docker compose up -d --force-recreate db
sudo docker compose exec db mariadb -u root
Solange der Notfallmodus läuft, erreichen andere Container die Datenbank nicht und Healthchecks können fehlschlagen. Lade zuerst die Berechtigungstabellen nach und lass dir die root-Konten anzeigen:
FLUSH PRIVILEGES;
SELECT user, host FROM mysql.user WHERE user = 'root';
Ändere alle angezeigten root-Konten, meist root@localhost und root@%. Das Konto mit % ist wichtig, damit sich andere Container weiterhin als root verbinden können. IF EXISTS verhindert einen Abbruch, falls eines der Konten fehlt:
ALTER USER IF EXISTS 'root'@'localhost' IDENTIFIED BY 'NeuesSicheresPasswort';
ALTER USER IF EXISTS 'root'@'%' IDENTIFIED BY 'NeuesSicheresPasswort';
EXIT;
Jetzt stellst du den Normalbetrieb wieder her: Entferne die beiden Optionen aus der Compose-Datei (bzw. die ganze command-Zeile, wenn du sie neu angelegt hast) und erstelle den Container erneut:
sudo docker compose up -d --force-recreate db
sudo docker compose exec db mariadb -u root -p
5.3 MySQL: Notfallmodus per Docker Compose
Bei MySQL gehst du genauso vor. Ergänze in der Compose-Datei die Startoptionen bzw. hänge sie an eine bestehende command-Zeile an:
services:
db-mysql:
image: mysql:8.4
command: --skip-grant-tables --skip-networking
Erstelle den Container neu und melde dich ohne Passwort an (Dienstname hier „db-mysql“):
sudo docker compose up -d --force-recreate db-mysql
sudo docker compose exec db-mysql mysql -u root
Lade die Berechtigungstabellen nach, prüfe die root-Konten und ändere alle angezeigten:
FLUSH PRIVILEGES;
SELECT user, host FROM mysql.user WHERE user = 'root';
ALTER USER IF EXISTS 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'NeuesSicheresPasswort';
ALTER USER IF EXISTS 'root'@'%' IDENTIFIED WITH caching_sha2_password BY 'NeuesSicheresPasswort';
EXIT;
Entferne die Startoptionen wieder aus der Compose-Datei, erstelle den Container neu und teste das neue Passwort:
sudo docker compose up -d --force-recreate db-mysql
sudo docker compose exec db-mysql mysql -u root -p
6. Sicherheit: Darauf solltest du achten
- Lass den Notfallmodus nie länger laufen als nötig. Solange er aktiv ist, kann sich jeder mit Zugriff auf den Server ohne Passwort und mit allen Rechten anmelden.
- Befehle mit Passwörtern können in Verlaufsdateien wie
~/.mysql_historyoder in Server-Logs landen. Prüfe diese nach dem Reset und entferne betroffene Zeilen. - Speichere das neue Passwort sofort in einem Passwortmanager, zum Beispiel in einem selbst gehosteten Bitwarden oder KeePass.
Fazit
Ein vergessenes Datenbankpasswort ist kein Grund zur Panik. Prüfe zuerst, ob dir der Login über sudo reicht. Nur wenn nicht, greifst du zum Notfallmodus, und das ist in wenigen Minuten erledigt. Wenn du dich um solche Wartungsaufgaben nicht selbst kümmern möchtest, ist ein Managed vServer eine Alternative. Bei Fragen stehen wir dir natürlich zur Verfügung.