Powrót do bloga

Szybkie rozwiązania naprawy uszkodzonych tabel w MySQL: Poradnik

Szybkie rozwiązania naprawy uszkodzonych tabel w MySQL: Poradnik

MySQL jest jednym z najpopularniejszych otwartoźródłowych RDBMS (systemów zarządzania relacyjnymi bazami danych). Jest integralną częścią szybko rozwijającego się stosu LAMP i zyskał imponującą rzeszę fanów wśród programistów i administratorów systemów. W porównaniu do nierelacyjnych baz danych, SQL zapewnia doskonałe funkcjonalności do organizowania, przechowywania i efektywnego zarządzania danymi. Wyróżniające funkcje układu tabel i wyjątkowe możliwości bazy danych SQL sprawiają, że jest ona preferowanym wyborem na wszystkich szczeblach organizacji, zarówno dużych, jak i małych.

Tabele MySQL mogą w rzadkich przypadkach ulec uszkodzeniu, co wskazuje na wystąpienie błędu i nieczytelność przechowywanych w nich danych. Przy próbie odczytu danych z uszkodzonej tabeli serwer ulega awarii i zgłasza błąd lub listę błędów.

Potencjalne przyczyny uszkodzenia tabeli MySQL

Oto niektóre z najczęstszych przyczyn uszkodzenia tabel:

  • Awaria usługi MySQL po restarcie.
  • Niespodziewane wyłączenie maszyny z powodu awarii zasilania.
  • Uszkodzona pamięć lub awaria sprzętu.
  • Błędy oprogramowania w systemie operacyjnym lub kodzie SQL.
  • Zamknięcie MySQL podczas zapisu.
  • System przechodzi w stan OFF podczas aktualizacji SQL.

Przed naprawą tabeli, co do której podejrzewasz uszkodzenie, utwórz kopię zapasową katalogu danych. Pomoże to zmniejszyć prawdopodobieństwo utraty danych. W tym krótkim przewodniku przeprowadzimy Cię przez kroki rozwiązywania problemów związanych z naprawą uszkodzonych tabel w MySQL.

Wymagania wstępne

Aby móc postępować zgodnie z tym samouczkiem, będziesz potrzebować:

Krok 1: Zatrzymanie usługi MySQL i kopia zapasowa danych

Na początku zatrzymaj usługę MySQL za pomocą polecenia systemctl:

Po zatrzymaniu usługi SQL kolejnym krokiem jest utworzenie kopii zapasowych wszystkich istniejących plików w nowym katalogu. Użyj domyślnego katalogu danych Ubuntu /var/lib/mysql/ aby skopiować wszystkie dane systemowe:

Krok 2: Identyfikacja błędu

Następnie rozpoczniemy dochodzenie i zidentyfikujemy uszkodzoną tabelę. Jeśli tabela korzysta z silnika pamięci masowej MyISAM, użyj instrukcji CHECK TABLE i zweryfikuj stan tabeli:

W wyniku otrzymasz komunikat potwierdzający uszkodzenie tabeli lub tabel.

Krok 3: Naprawa uszkodzonej tabeli

Jeśli występuje błąd w tabeli MyISAM i została ona zidentyfikowana, użyj instrukcji REPAIR TABLE, aby naprawić błąd:

Jeśli naprawa zakończyła się pomyślnie, w wyniku powinien pojawić się następujący komunikat bez błędów:

Jeśli jednak błąd pojawi się ponownie, postępuj zgodnie z oficjalną dokumentacją MySQL w wersji 8.0, aby przebudować lub naprawić tabele.

W przeciwieństwie do silnika pamięci masowej MyISAM, proces naprawy tabel przebiega inaczej w silniku pamięci masowej InnoDB. InnoDB jest domyślnym silnikiem pamięci masowej w MySQL 8.0. Posiada funkcje automatycznego sprawdzania uszkodzeń i operacji naprawczych. MySQL InnoDB sprawdza pod kątem uszkodzonych stron, wykonując sumy kontrolne dla każdej odczytywanej strony. W przypadku wykrycia rozbieżności automatycznie zatrzyma serwer MySQL.

Podsumowując, rzadko zachodzi potrzeba naprawy tabel InnoDB. InnoDB posiada mechanizm odzyskiwania po awarii, który może rozwiązać większość problemów poprzez restart.

Spróbuj zrestartować usługę MySQL, aby sprawdzić, czy możesz uzyskać dostęp do serwera:

Jeśli nie uda Ci się odbudować uszkodzonej tabeli InnoDB nawet po ponownym uruchomieniu, wypróbuj metodę „Dump and Reload” sugerowaną w dokumentacji MySQL. Metoda ta polega na odzyskaniu dostępu do uszkodzonej tabeli przy użyciu narzędzia mysqldump. Należy utworzyć folder do przechowywania i zachowania logicznej kopii zapasowej tabeli. Po naprawieniu błędu tabela zostanie ponownie załadowana do bazy danych.

Krok 4: Skorzystaj z opcji innodb_force_recovery

Jeśli serwer nadal ulega awarii lub jest niedostępny, spróbuj użyć opcji force_recovery w InnoDB. Ustawienie na ON opcji force_recovery jest doskonałym sposobem na przywrócenie baz danych MySQL. Możesz włączyć tę opcję, modyfikując plik mysqld.cnf w edytorze tekstu nano:

Wstaw następujący wiersz pod sekcją [mysqld]:

innodb force recovery

Zapisz i zamknij plik po ponownym uruchomieniu usługi MySQL.

Krok 5: Utwórz plik mysqldump

Jeśli masz dostęp do uszkodzonej tabeli, użyj opcji mysqldump, aby umieścić wszystkie zrzuty w nowym pliku. Nazwij nowy plik według własnych preferencji i pamiętaj o dodaniu rozszerzenia .sql na końcu. Tutaj nazywamy plik demo.sql:

Następnie użyj zapytania DROP TABLE, aby usunąć tabelę z bazy danych. Możesz użyć następującej składni, aby uniknąć konieczności ponownego otwierania wiersza poleceń MySQL:

Następnie, korzystając z przygotowanego dokumentu zrzutu demo.sql, przywróć tabelę:

Pomyślnie naprawiono uszkodzoną tabelę MySQL i można teraz bezproblemowo pracować z bazą danych.

Podsumowanie

Uszkodzenia tabel lub nieoczekiwane awarie systemu mogą się zdarzyć, jeśli pracujesz z dużą ilością danych. Warto wspomnieć, że silnik pamięci masowej MySQL InnoDB jest bardziej odporny na błędy niż poprzedni silnik MyISAM. Tabele korzystające z silnika InnoDB nadal mogą ulec uszkodzeniu, chociaż niebezpieczeństwo uszkodzenia tabeli i awarii jest znacznie zmniejszone dzięki jego funkcjom automatycznego odzyskiwania.

Na koniec, istnieje wiele tematów i samouczków dotyczących baz danych, które możesz odkryć na naszym blogu:

Miłego korzystania!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev jest projektantem kreatywnym w CloudSigma, skupiającym się na spójnej tożsamości biznesowej przy wykorzystaniu tradycyjnych i innowacyjnych kanałów marketingowych. Biegle łączy wizję artystyczną ze strategicznym marketingiem, tworząc wywierające wpływ narracje marki.

Komentarze

Brak komentarzy. Bądź pierwszy.