Fehler beim Aufbau einer Datenbankverbindung
WordPress geladen, lesen wp-config.php, und konnte keine Antwort von MySQL erhalten. Jede Seite auf der Website ist leer, bis sie kann.
Error establishing a database connection
Neunmal in zehn stimmen die Anmeldeinformationen in wp-config.php nicht mehr mit der Datenbank überein. Bestätigen Sie mit einer direkten Verbindung, die genau diese vier Werte verwendet; wenn dies eine Verbindung herstellt, sind das Problem nicht die Anmeldeinformationen und der nächste Abschnitt sagt Ihnen, wo Sie stattdessen suchen sollen.
Die wahrscheinlichsten Ursachen zuerst.
Gehen Sie die Liste der Reihe nach durch. Prüfen Sie jede Ursache, bevor Sie etwas ändern, da die Lösungen unterschiedlich sind und eine Vermutung mehr Zeit kostet als ein Befehl.
| Ursache | So prüfen Sie es | Lösung |
|---|---|---|
| Falsche Anmeldeinformationen in wp-config.php | Verbinden Sie sich von Hand mit den gleichen vier Werten, die wp-config.php verwendet. Wenn dies mit "Zugriff verweigert" fehlschlägt, ist die Datei das Problem und es muss nichts anderes getestet werden. | Richtig DB_NAME, DB_USER, DB_PASSWORD und DB_HOST. Eine Migration ist der übliche Grund, warum sie drifteten: Das Archiv brachte die Werte des alten Hosts mit. |
| Der Datenbankserver läuft nicht | Die gleiche direkte Verbindung schlägt mit "Kann nicht verbinden" statt "Zugriff verweigert" fehl. Die Unterscheidung zwischen diesen beiden Nachrichten ist die gesamte Diagnose. | Starten Sie MySQL. Wenn es nicht auf dem Laufenden bleibt, benennt sein eigenes Fehlerprotokoll den Grund, und auf Shared Hosting ist dieser Grund normalerweise Speicher. |
| Die Datenbank hat ihr Verbindungslimit erreicht | Der Fehler ist intermittierend - die Website funktioniert, dann nicht, dann tut. Eine direkte Verbindung gelingt, während die Besucher den Fehler noch sehen. | Erheben Sie max_connections oder finden Sie, was Verbindungen offen hält. Ein Plugin, das eine Verbindung pro Anfrage öffnet und niemals schließt, ist der häufigste Schuldige. |
| Ein beschädigter Tisch | Nur einige Seiten scheitern oder wp-admin lädt, während das Frontend nicht. WordPress bietet möglicherweise einen Reparaturlink anstelle dieses Fehlers. | Setzen Sie WP_ALLOW_REPAIR in wp-config.php, besuchen Sie /wp-admin/maint/repair.php, und entfernen Sie dann die Konstante - diese Seite hat keine Authentifizierung. |
| DB_HOST benennt etwas Unerreichbares | Die Anmeldeinformationen sind richtig und MySQL ist verfügbar, aber der Host in wp-config.php wird nicht vom Webserver aufgelöst. | Auf containerisierten Stacks ist das ein Dienstname, nicht localhost, und localhost ist das, was die meisten migrierten Konfigurationen enthalten. |
Schritt für Schritt zur Lösung.
Die Befehle setzen WP-CLI und Shell-Zugriff voraus. Jeder Schritt erklärt, was er tut, damit Sie ihn bei Bedarf im Dashboard oder per SFTP ausführen können.
Lesen Sie, was wp-config.php tatsächlich sagt
Die vier Konstanten, die wichtig sind, sind nahe der Spitze der Datei.
grep -E "DB_(NAME|USER|PASSWORD|HOST)" wp-config.php
Probieren Sie diese genauen Werte gegen MySQL aus
Dies ist der Test, der das Problem in zwei Teile teilt. "Zugriff verweigert" bedeutet, dass die Anmeldeinformationen falsch sind; "Kann nicht verbinden" bedeutet, dass der Server nicht antwortet.
mysql --user='DB_USER' --password='DB_PASSWORD' --host='DB_HOST' 'DB_NAME' -e 'SELECT 1;'
Wenn die Anmeldeinformationen falsch waren, korrigieren Sie sie
Bearbeiten Sie wp-config.php oder setzen Sie sie mit WP-CLI, damit Sie nicht selbst die richtigen Zitate finden müssen.
wp config set DB_PASSWORD 'the-real-password' wp db check
Wenn der Server ausgefallen ist, schauen Sie sich an, warum, bevor Sie ihn neu starten
Ein MySQL, das einmal gestorben ist, wird wieder sterben. Sein Fehlerprotokoll nennt den Grund, und Out-of-Memory ist die häufigste Antwort auf einem kleinen Server.
tail -n 50 /var/log/mysql/error.log
Bestätigen Sie von WordPress, nicht von der Shell
Eine Shell-Verbindung beweist, dass MySQL von der Shell aus erreichbar ist. Nur WordPress kann beweisen, dass es von WordPress aus erreichbar ist.
wp db check && wp option get siteurl
Darum kümmert sich die Plattform.
Die Anmeldeinformationen driften hier nie, weil wp-config.php sie nicht trägt: es liest sie aus der Umgebung mit getenv(), so dass das Drehen eines Passworts eine Änderung an einem Ort ist und nicht eine Bearbeitung, die in einer Datei wiederholt werden muss. Die Datenbank läuft in einem eigenen Container mit eigener Speicherzulage, so dass ein beschäftigter PHP-Prozess sie nicht aushungern kann, und Fix Site zeigt eine wiederhergestellte Site in einer Aktion auf die richtige Datenbank.
Häufige Fragen.
Warum hat das von selbst begonnen, ohne dass sich etwas geändert hat?
Bedeutet das, dass meine Daten weg sind?
Sollte ich die eingebaute Reparaturseite verwenden?
Die Seite funktioniert und bricht dann alle paar Minuten. Was ist das?
War es keiner davon?
Diese Fehler können im Browser ähnlich aussehen.