Czasem się może zdarzyć, że podczas operacji (zapisu) w bazie danych coś pójdzie nie tak – nie zdarza się to, może zbyt często (a przynajmniej nie powinno), ale zawsze może się zdarzyć – teoretycznie wystarczy awaria serwera, jakaś usterka dysku/systemu plików (lub np. brak miejsca na serwerze z bazą danych), błąd po stronie skryptu, czy po prostu pech… Taka sytuacja oczywiście może mieć też miejsce w przypadku WordPressa, ale tu możemy posłużyć się wbudowanym narzędziem do naprawy (i optymalizacji) bazy danych, które wprawdzie/zapewne nie naprawi jakiś bardziej poważnych awarii (i nie zastąpi regularnych kopii zapasowych), to czasem w zupełności wystarczy, o czym mógł wczoraj przekonać się mój znajomy, któremu w ten sposób w kilkanaście sekund (dosłownie!) podniosłem stronę po nieudanej aktualizacji.
Spis treści w artykule
WordPress i wbudowana naprawa bazy danych
Chyba gdzieś od wersji 3.9 w WordPressie pojawiło się narzędzie do naprawy i optymalizacji bazy danych – nawet jeśli do tej pory nie mieliście okazji z niego korzystać, to być może kojarzycie coś podobnego, gdy po aktualizacji WordPressa do nowej wersji pojawia Wam się ekran z prośbą o aktualizacje bazy danych.
Narzędzie (plik PHP) znajduje się w katalogu:
/wp-admin/maint/repair.php
Natomiast próba wywołania/uruchomienia tego pliku w standardowej konfiguracji WordPressa powinna zakończyć się takim ekranem:
Aby możliwe było użycie skryptu do naprawy problemów w bazie danych na tej stronie, proszę dodać poniższy wiersz do pliku wp-config.php. Kiedy to zrobisz, odśwież tę stronę.
Jest to działanie jak najbardziej poprawne, i jak można przeczytać na powyższym komunikacie – najpierw musimy do pliku konfiguracyjnego WordPressa (wp-config.php) dodać jedną linijkę:
define('WP_ALLOW_REPAIR', true);
Ja zazwyczaj dodatkowe wpisy do tego pliku dodaje tuż nad linijką:
/* That's all, stop editing! Happy blogging. */
Po tej modyfikacji wystarczy wejść na stronę:
[adres_naszej_strony]/wp-admin/maint/repair.php
Np. w przypadku strony Webinsider.pl będzie to:
https://Webinsider.pl/wp-admin/maint/repair.php
W tym momencie pojawią się 2 opcje do wyboru – naprawa, lub naprawa i optymalizacja:
Naprawa:
WordPress może automatycznie wyszukać typowe problemy z bazą danych i naprawić je. Naprawa może chwilę potrwać więc prosimy o cierpliwość.
Naprawa i optymalizacja:
WordPress może także zoptymalizować bazę danych. Skutkuje to poprawą wydajność w niektórych sytuacjach. Naprawa i optymalizacja bazy danych może zająć dużo czasu, a dostęp do bazy zostanie zablokowany na czas optymalizacji.
W większości przypadków nie ma znaczenia, która opcję wybierzecie, cała operacja powinna potrwać maksymalnie kilka-kilkanaście sekund:
Naprawa została ukończona. Proszę usunąć następujące linijki z pliku wp.config.php, aby zapobiec użyciu tej strony przez nieupoważnione osoby.
Po tej operacji jest spora szansa, że Wasza strona ponownie zacznie działać prawidłowo, choć jak napisałem na wstępie – jest to naprawa automatyczna, a więc naprawi tylko drobniejsze (bardziej oczywiste) usterki, głównie wynikające z uszkodzenia samej struktury bazy, czy też błędnego jej oznaczenia jako np. w użyciu, i w niektórych przypadkach niezbędne mogą być dalsze prace, w tym przywrócenie bazy z kopii zapasowej.
Na koniec pamiętajcie, by usunąć dodaną wcześniej do pliku wp-config.php linijkę, lub przynajmniej zakomentować ją, dodając na początku znak #:
#define('WP_ALLOW_REPAIR', true);
Inne systemy, inne CMSy
Oczywiście jest to procedura dostępna w sytuacji, gdy korzystamy z WordPressa. Inne skrypty czy CMSy mogą mieć własne wbudowane rozwiązania, bądź nie mieć ich w cale – ale tu odsyłam Was do dokumentacji, w której powinniście mieć tego typu informacje.
Uniwersalna naprawa bazy danych MySQL
Mogę chyba też zaryzykować, że jest duża szansa, że korzystacie z bazy danych MySQL – w takim przypadku możecie podobny efekt, jaki daje wbudowane w WordPressa narzędzie, uzyskać pracując bezpośrednio z bazą danych.
Jeśli korzystacie z VPSa (np. w HitMe, DigitalOcean czy e24cloud) to możecie spróbować naprawić bazę danych bezpośrednio z konsoli za pomocą polecenia:
mysqlcheck -u UŻYTKOWNIK --password=HASLO --auto-repair --check --databases nazwa_bazy_danych
Np.:
mysqlcheck -u root --password=WebinsiderPL --auto-repair --check --databases webinsider01
Możecie też naprawić wszystkie bazy na danym serwerze, nawet jeśli rzadko kiedy jest taka potrzeba, to warto wiedzieć, że i taka możliwość istnieje:
mysqlcheck -u UŻYTKOWNIK --password=HASLO --auto-repair --check --databases nazwa_bazy_danych --all-databases
phpMyAdmin
Jeśli macie dostęp do phpMyAdmin (standard w przypadku hostingów współdzielonych, np. Kylos.pl) to po zalogowaniu się do phpMyAdmin możecie spróbować naprawić wybrane/wszystkie tabele w bazie danych bezpośrednio z menu:
Lub skorzystać z polecenia SQL:
REPAIR TABLE nazwa_tabeli
Np.:
REPAIR TABLE `wp_commentmeta` , `wp_comments` , `wp_postmeta` , `wp_posts`
Kopia zapasowa to podstawa
Wiem, że już o tym pisałem, i to nawet w tym wpisie, ale jeśli chodzi o kopie zapasowe będę powtarzał to do znudzenia – pamiętajcie by je robić, i testować, bo nie raz zdarzyło mi się pomagać w sytuacji, gdy kopie zapasowe niby były wykonywane, ale nikt wcześniej nie sprawdził, czy wykonują się one poprawnie, i czy da się coś z nimi zrobić (przynajmniej bez kombinowania, bo w przypadku awarii zazwyczaj na to już nie ma czasu).
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01
Sposób z VPSa działa też jak mamy dostęp do SSH na współdzielonym.
Tak, masz rację, choć często jest tak, że SSH jest dostępne (oczywiście jeśli w ogóle jest dostępne, bo jest to standardem) tylko na potrzeby SCP (transfer plików), a już w przypadku klasycznego połączenia SSH (konsola) mamy albo spore ograniczenia, bądź nawet „brak powłoki” (null), stąd w przypadku hostingu współdzielenie zdecydowałem się napisać o phpMyAdmin, który zazwyczaj jest dostępny w takiej sytuacji.
Z mojego doświadczenia jeśli masz dostęp do SSH, to zawsze masz dostęp do MySQLa.
Zacznę od tego, że jakby zapytać przeciętnego użytkownika hostingu współdzielonego o SSH to zrobi wielkie oczy, z phpMyAdmin jest szansa, że będzie może trochę lepiej, bo nawet jeśli nie korzystał, to może w panelu zarządzania ta nazwa mu się „rzuciła w oczy”.
Jeśli rynek hostingu współdzielonego nie zmienił się radykalnie w ciągu ostatniego roku, to nadal hosting z dostępem SSH jest rzadkością. Sam bezpośrednio lub pośrednio mam konta hostingowe w 3 firmach, z tego w 1 mam pełny SSH (oczywiście pełny na tyle, na ile w hostingu współdzielonym to możliwe), w 1 tylko SFTP (kiedyś SCP, i konsola z powłoką „null”), a w ostatniej… zapomnij, ale trafiło do mnie to konto z dobrodziejstwem inwentarza, i na razie klient nie chce zmieniać, bo ma tam też pocztę.
Ale jak ktoś bardziej obeznany w temacie, i z jakiś przyczyn nie interesuje go VPS (albo oprócz VPSa wspomaga się tego typu usługami dla mniej wymagających projektów, jak np. ja), to faktycznie warto poszukać hostingu z obsługą SSH, bo nigdy nie wiadomo, kiedy to może się przydać…
Dokładnie, a dla niektórych (np dla mnie) to nie jest to czego potrzebuję, ale wiem iż z pełnym i samodzielnie prowadzonym VPSem nie koniecznie sobie poradzę. Tak więc, jak już mam kupować konto współdzielone, to jednak wolę takie gdzie mam jakieś sensowne narzędzia w postaci SSH.