Błąd połączenia z bazą danych w WordPressie - naprawa

Błąd połączenia z bazą danych w WordPressie ma zwykle źródło w wp-config.php. Poznaj przyczyny, test połączenia, naprawę tabel i moment na przywrócenie kopii.

Autor: McProdukt · Opublikowano: · Aktualizacja:

Komunikat „Błąd podczas nawiązywania połączenia z bazą danych" (ang. „Error establishing a database connection") oznacza, że WordPress nie może połączyć się z bazą MySQL lub MariaDB, w której trzyma treści strony. Najczęściej winne są błędne dane w pliku wp-config.php: nazwa bazy, użytkownik, hasło albo adres serwera bazy. Rzadziej przyczyną są uszkodzone tabele, przeciążony serwer bazy lub wyczerpane limity. Poniżej pokazujemy, jak w kilka minut ustalić przyczynę i naprawić stronę.

Co oznacza błąd połączenia z bazą danych?

WordPress przy każdym wyświetleniu strony pobiera treści z bazy danych. Jeśli nie może się z nią połączyć, zamiast strony pokazuje tylko ten komunikat. Dane do połączenia zapisuje w pliku wp-config.php w głównym katalogu strony, a dokumentacja WordPressa wskazuje, że błąd zwykle wynika właśnie z pomyłki w tym pliku.

Zanim zaczniesz szukać, sprawdź dwie rzeczy:

  • Co pokazuje panel /wp-admin - jeśli zamiast błędu połączenia informuje, że tabele bazy są niedostępne i baza może wymagać naprawy, to połączenie działa, a problemem są uszkodzone tabele.
  • Czy błąd jest stały - stały błąd wskazuje zwykle na dane dostępowe. Błąd, który pojawia się i znika, sugeruje przeciążenie: za dużo jednoczesnych połączeń albo wyczerpane zasoby.

Jeśli korzystasz z cache stron, np. LSCache, część podstron może się wyświetlać z pamięci podręcznej mimo niedziałającej bazy. Miarodajny jest wtedy panel administracyjny.

Jakie są najczęstsze przyczyny błędu?

PrzyczynaKiedy się zdarzaCo zrobić
Błędne dane w wp-config.phppo migracji, ręcznej instalacji, edycji plikuporównaj DB_NAME, DB_USER, DB_PASSWORD i DB_HOST z danymi w panelu
Zmienione hasło użytkownika bazypo zmianie hasła w panelu hostinguwpisz nowe hasło w wp-config.php
Zły adres serwera bazypo przeprowadzce od dostawcy, który trzymał bazy na osobnym serwerzeustaw DB_HOST według instrukcji nowego hostingu
Uszkodzone tabelepo awarii w trakcie zapisu albo przerwanym imporcietryb naprawy WordPressa, phpMyAdmin albo kopia zapasowa
Za dużo połączeńnagły ruch, boty, brak cache, długie zapytaniaodczekaj, włącz cache, sprawdź ruch w logach
Brak miejsca lub limit bazypełny dysk, przekroczony limit kontazwolnij miejsce albo wybierz większy pakiet
Włamaniepodmieniony wp-config.php, usunięte tabeleprzywróć czystą kopię i zabezpiecz stronę

Jak sprawdzić dane w pliku wp-config.php?

Otwórz wp-config.php w menedżerze plików panelu albo przez FTP i porównaj cztery wartości z danymi bazy w panelu hostingu. Fragment pliku wygląda tak:

define( 'DB_NAME', 'konto_wp' );
define( 'DB_USER', 'konto_wpuser' );
define( 'DB_PASSWORD', 'tu-jest-haslo' );
define( 'DB_HOST', 'localhost' );
  • DB_NAME - nazwa bazy. W DirectAdmin nazwy baz i ich użytkowników zawsze zaczynają się od nazwy konta i podkreślenia, np. konto_wp. Po migracji z innego panelu w pliku często zostaje stara nazwa bez tego prefiksu.
  • DB_USER - użytkownik bazy, a nie login do panelu hostingu czy do WordPressa.
  • DB_PASSWORD - hasło użytkownika bazy. Unikaj w nim apostrofu, który w tym pliku kończy napis.
  • DB_HOST - adres serwera bazy. Według dokumentacji WordPressa zwykle to localhost, a niestandardowy port dopisuje się po dwukropku, np. localhost:3307.

Jak przetestować połączenie z bazą małym skryptem PHP?

Najszybszy test to plik PHP, który łączy się z bazą tymi samymi danymi co WordPress i wyświetla dokładny komunikat błędu. Utwórz w katalogu strony plik o trudnej do zgadnięcia nazwie, np. test-db-8h3k.php:

<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
    $db = new mysqli('localhost', 'konto_wpuser', 'tu-jest-haslo', 'konto_wp');
    echo 'Połączenie działa';
} catch (mysqli_sql_exception $e) {
    echo 'Błąd ' . $e->getCode() . ': ' . $e->getMessage();
}

Otwórz go w przeglądarce, a zaraz po teście usuń, bo zawiera hasło do bazy. Jak czytać wynik:

  • „Połączenie działa" - dane są poprawne. Porównaj je znak po znaku z wp-config.php; jeśli są identyczne, sprawdź tabele.
  • Błąd 1045, „Access denied for user" - złe hasło albo użytkownik, ewentualnie użytkownik nie ma uprawnień do tej bazy.
  • Błąd 1049, „Unknown database" - baza o tej nazwie nie istnieje: literówka albo baza nie została utworzona lub zaimportowana.
  • Błąd 1040, „Too many connections", albo 1203 z informacją o max_user_connections - wykorzystany jest limit jednoczesnych połączeń serwera albo Twojego użytkownika bazy.
  • Brak połączenia z serwerem bazy - skrypt w ogóle nie dosięgnął serwera. Sprawdź DB_HOST, a jeśli jest poprawny, zgłoś problem dostawcy hostingu.

Zamiast skryptu możesz też zalogować się do phpMyAdmin danymi z wp-config.php - jeśli logowanie się uda, dane są poprawne.

Jak naprawić uszkodzone tabele bazy WordPressa?

WordPress ma wbudowany tryb naprawy bazy. Włączasz go jedną linią w wp-config.php i uruchamiasz pod adresem /wp-admin/maint/repair.php.

  1. Zrób kopię bazy, np. eksportem w phpMyAdmin. Dokumentacja MySQL ostrzega, że naprawa tabeli w pewnych sytuacjach może skończyć się utratą danych.
  2. Dopisz w wp-config.php linię define( 'WP_ALLOW_REPAIR', true );.
  3. Otwórz twojadomena.pl/wp-admin/maint/repair.php i wybierz naprawę bazy albo naprawę z optymalizacją.
  4. Po zakończeniu usuń tę linię. Strona naprawy działa bez logowania, więc zostawiona włączona jest dostępna dla każdego.

Ważne ograniczenie: narzędzie sprawdza tabele poleceniem CHECK TABLE i naprawia je poleceniem REPAIR TABLE, które według dokumentacji MySQL działa tylko dla tabel MyISAM, ARCHIVE i CSV. Silnik tabel sprawdzisz w phpMyAdmin, w kolumnie „Typ". Tabel InnoDB ten tryb nie naprawi - gdy są uszkodzone, najpewniejszym rozwiązaniem jest przywrócenie bazy z kopii zapasowej.

Co zrobić, gdy błąd pojawia się tylko czasami?

Błąd, który znika po kilku minutach, to zwykle przeciążenie: wszystkie dostępne połączenia z bazą są zajęte albo konto wyczerpało zasoby. Serwer MySQL ma limit jednoczesnych połączeń (max_connections), a administrator może też ograniczyć liczbę połączeń jednego użytkownika bazy (max_user_connections). Gdy zapytania wykonują się zbyt długo, a ruch rośnie, kolejne połączenia są odrzucane.

  • Cache stron - gotowa strona z pamięci podręcznej nie łączy się z bazą przy każdej odsłonie. Na serwerach LiteSpeed najprościej włączyć go wtyczką LiteSpeed Cache.
  • Niechciane boty - sprawdź w logach dostępu, czy tysiące żądań nie przychodzą z kilku adresów albo do wp-login.php i xmlrpc.php.
  • Ciężkie wtyczki - wtyczki statystyk czy powiązanych wpisów potrafią wykonywać ciężkie zapytania przy każdej odsłonie.
  • Limity konta - jeśli oprócz błędu bazy widzisz też błąd 508, konto wyczerpuje zasoby. Więcej w poradniku o błędzie 508 Resource Limit Is Reached.

Kiedy przywrócić kopię zapasową?

Kopię przywróć, gdy naprawa tabel nie pomaga, gdy baza została skasowana lub nadpisana albo gdy błąd jest skutkiem włamania. Wybierz kopię sprzed wystąpienia problemu i przywróć najpierw samą bazę - pliki strony zwykle są w porządku. Po włamaniu przywróć też pliki i zmień wszystkie hasła, w tym hasło użytkownika bazy.

W hostingu McProdukt kopie plików i baz danych tworzą się automatycznie - w standardowych pakietach co 24 godziny i są przechowywane przez 30 dni. Przed większymi zmianami i tak warto zrobić własną kopię; jak to zaplanować, piszemy w tekście kopie zapasowe strony WWW.

Jak działa baza danych WordPressa w McProdukt?

  • DB_HOST to localhost - baza działa lokalnie, na tym samym serwerze co strona.
  • Bazę i użytkownika tworzysz w DirectAdmin, w zarządzaniu bazami MySQL, i tam też zmienisz hasło użytkownika bazy.
  • Baza nie jest dostępna z zewnątrz - łączą się z nią tylko skrypty na serwerze, a Ty zarządzasz nią przez phpMyAdmin w panelu. Po migracji nie wpisuj więc w wp-config.php adresu domeny ani IP jako hosta bazy.

Porty i adresy wszystkich usług zebraliśmy w tabeli porty poczty, FTP, SSH i MySQL. Jeśli zamiast błędu bazy widzisz komunikat o krytycznym błędzie, zajrzyj do poradnika krytyczny błąd WordPressa, przy pustym ekranie - do tekstu biała strona WordPressa, a inne kody serwera opisujemy w przewodniku błędy HTTP 403, 404, 500, 502, 503.

Serwer LiteSpeed z LSCache, Redis i automatyczne kopie baz znajdziesz w ofercie hostingu WordPress. Jeśli przenosisz stronę od innego dostawcy, migrację strony i poczty zrobimy za Ciebie bezpłatnie.

Najczęściej zadawane pytania

Dlaczego strona główna działa, a panel pokazuje błąd bazy?

Strona główna najpewniej wyświetla się z pamięci podręcznej, która nie potrzebuje bazy. Panel administracyjny zawsze łączy się z bazą, więc pokazuje prawdziwy stan - diagnozuj problem na jego podstawie.

Po przeniesieniu strony pojawił się błąd bazy. Co sprawdzić najpierw?

Dane w wp-config.php: na nowym hostingu baza ma zwykle inną nazwę, innego użytkownika i inne hasło. Jeśli bazy nie utworzono, zobaczysz błąd „Unknown database", a jeśli jest pusta - instalator WordPressa zamiast strony.

Czy mogę zostawić WP_ALLOW_REPAIR włączone na stałe?

Nie. Strona naprawy działa bez logowania, więc każdy mógłby ją uruchamiać i obciążać bazę. Dokumentacja WordPressa zaleca wyłączenie tej opcji po rozwiązaniu problemu.

Skąd mam wiedzieć, że problem leży po stronie hostingu?

Jeśli dane w wp-config.php są poprawne, a ani skrypt testowy, ani phpMyAdmin nie mogą połączyć się z bazą, problem leży najpewniej po stronie serwera. Zgłoś go dostawcy, podając godzinę wystąpienia i treść komunikatu.

Czy zmiana hasła do bazy w panelu zepsuje stronę?

Tak, jeśli nie wpiszesz nowego hasła w wp-config.php. WordPress łączy się z bazą hasłem zapisanym w tym pliku, więc po każdej zmianie w panelu zaktualizuj też DB_PASSWORD.

Powiązane poradniki

Wszystkie poradniki z kategorii: WordPress

Powiązane usługi McProdukt

Zobacz również