Jeśli od dłuższego czasu pracujesz z WordPressem, to pewnie nie raz natknąłeś się na wiadomość:
„Error Establishing a Database Connection”
To jedna z najbardziej stresujących sytuacji – szczególnie gdy nie zdążyłeś zrobić backupu. Błąd może wystąpić bez żadnego wyraźnego powodu: po automatycznej aktualizacji, nagłym skoku ruchu, czy zmianie uprawnień. Ja sam wielokrotnie musiałem stawić czoła tej awarii – nie raz siwe włosy pojawiły się w chwilach kryzysu. Zazwyczaj udawało się to naprawić w 15-30 minut, ale zmuszało do zebrania całej wiedzy w jednym miejscu.
Z tego powstał ten poradnik, który zawiera zarówno klasyczne przyczyny i metody napraw, jak i nowoczesne rozwiązania – od wdrożenia monitoringu, przez komendy WP-CLI, aż po rozwiązania chmurowe.
Uwaga: zawsze rób backup bazy danych przed jakimikolwiek działaniami – nawet gdy wydaje się, że wstawiasz jedną linijkę SQL.
Co oznacza ten błąd?
Błąd Error Establishing a Database Connection oznacza, że WordPress nie może połączyć się z bazą danych MySQL/MariaDB. Najczęstsze przyczyny:
- Błędne dane w
wp-config.php
(DB_NAME, DB_USER, DB_PASSWORD, DB_HOST). - Uszkodzona lub brakująca baza lub tabele.
- Serwer bazy danych jest niedostępny (z powodu przeciążenia lub awarii).
- Zmiany uprawnień użytkownika bazodanowego.
- Cień zmian DNS lub hostingu (np. migracja).
Błędy w wp-config.php
i dane połączenia
Najpierw sprawdź dane w pliku wp-config.php
:
define('DB_NAME', 'moja_baza');
define('DB_USER', 'moja_bazowy_user');
define('DB_PASSWORD', 'haslo');
define('DB_HOST', 'localhost'); // lub np. 127.0.0.1:8889, można też użyć DSN hosta chmurowego
🔍 Upewnij się, że:
- Nie są zbędne spacje przed lub po haśle.
DB_HOST
odpowiada serwerowi baz danych (na hostingu może być inny).- Wszystkie dane zgadzają się z danymi użytkownika bazy.
Czy błąd występuje również w panelu admina?
- Wejdź w panelu (wp-admin) i sprawdź czy błąd jest ten sam.
- Jeśli pojawi się inny komunikat:
- „One or more database tables are unavailable. The database may need to be repaired” → napraw tabele WP przy użyciu:
define('WP_ALLOW_REPAIR', true);
- Otwórz
http://twojastrona.pl/wp-admin/maint/repair.php
i kliknij Repair Database. - Usuń ten wpis z
wp-config.php
po naprawie.
Diagnostyka serwera bazy
Użyj wp-cli (jeśli masz SSH):
wp db check # Sprawdza bazę
wp db repair # Naprawia tabele
Te komendy są szybsze i wygodniejsze niż ręczną naprawa przez phpMyAdmin.
Skorzystaj z phpMyAdmina lub adminera:
- Spróbuj zalogować się do bazy.
- Jeśli przechodzisz przez wszystkie bazy, błąd może sugerować uprawnienia lub pracę serwera.
- Jeśli połączenie nie działa z dwóch źródeł, to prawdopodobnie problem z hostem bazy.
Testowy skrypt PHP:
<?php
$link = mysqli_connect('localhost','user','pass','db_name');
if (!$link) {
die('Błąd: ' . mysqli_connect_error());
}
echo 'Połączono bez problemu';
mysqli_close($link);
Umieść go w katalogu i wywołaj, by dowiedzieć się dokładnie, co nie działa – brak połączenia, niedostępność, brak uprawnień?
Obciążenie i problemy z hostingiem
Jeśli nagły wzrost ruchu lub boty przeciążają MySQL, to błąd może stać się prawdziwy.
✅ Kroki:
- Sprawdź logi serwera i procesy (mytop, htop, slow queries).
- Użyj narzędzi monitorujących (np. NewRelic, Grafana + Prometheus, hostujące CDI).
- Tymczasowo zwiększ limity procesów/dolny zakres CPU/RAM.
- Rozważ przełączenie na serwer dedykowany, VPS lub chmurę (np. DigitalOcean, AWS RDS, Cloud SQL).
Nowoczesne rozwiązania w chmurze i architektury wysokiej dostępności
Hostingi zarządzane:
- Kinsta, WP Engine, Flywheel – mają monitoring bazy, automatyczne reset bazy, wsparcie 24/7.
WordPress w Kubernetes lub docelowo w Dockerze:
- Używaj zreplikowanych baz (Master + Read replicas) np. na AWS RDS, Google Cloud SQL.
- Stosuj autentykację SSL między kontenerami a DB.
- Ustal politykę rewizji, limit połączeń, health check:
livenessProbe: exec: command: ['sh', '-c', 'mysqladmin ping -h $DB_HOST'] initialDelaySeconds: 30 periodSeconds: 10
7. Naprawa uszkodzonych tabel i siteurl
Jeśli WP się łączy, ale błędu jest brak tabel wp_options lub złe siteurl – możesz to zrobić bez CLI:
REPAIR TABLE wp_options;
UPDATE wp_options SET option_value='https://twojastrona.pl' WHERE option_name IN ('siteurl','home');
Kopie zapasowe, migracje i roll-back
- Używaj narzędzi jak UpdraftPlus, BackWPup, lub tworzenia snapshotów VPS / chmura.
- Przy migracji – sprawdź, czy w
wp-config.php
iwp_options
jest spójność siteurl/home z rzeczywistym adresem.
Automatyzacja i monitoring
- Wgrywaj skrypty monitorujące (cronjob co 5 min sprawdzający
wp db check
, WP-CLI, ping etc.). - Powiadomienia mailowe lub Slack w razie błędu.
- Raporty wydajnościowe i czas działania bazy.
Podsumowanie – co teraz zrobić?
- Sprawdź, czy błąd występuje w panelu admina.
- Skontroluj/napraw dane w
wp-config.php
. - Napraw bazę przez:
- wp-cli,
- phpMyAdmin + REPAIR,
- format SQL.
- Sprawdź uprawnienia i połączenia.
- Wykonaj testowy skrypt PHP, by ocenić stan DB.
- Przeanalizuj obciążenie hostingu i logi.
- Dodaj monitoring, backupy i plan B (chmura, replikacja).
- Automatyzuj testy i naprawy, by nie powtarzać dramatów.
Wartościowy bonus
Jeśli chcesz, mogę dostarczyć gotowe skrypty monitoringowe, fragmenty YAML do Kubernetesa, czy plugin WordPress, który monitoruje i naprawia bazę – pisz śmiało, chętnie przygotuję kolejne fragmenty tego poradnika 🚀
Przy próbie użycia komendy w MySQL na Ubuntu Server:
GRANT ALL ON wordpress.* TO 'wordpressuser’@’localhost’ IDENTIFIED BY 'haslo’;
ciągle otrzymuje komunikat:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY 'haslo”’ at line 1
powoduje to, że użytkownik 'wordpressuser’ nie może uzyskać dostępu do bazy danych 'wordpress’ i przez co podczas próby załadowania strony pojawia się komunikat:
Error establishing a database connection
Jak w takiej sytuacji zmusić MySQL do przyznania dostępu?
Bardzo dobrze opisane 😉