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ć:
- Najnowszej wersji zainstalowanego systemu Ubuntu w swoim systemie.
- Użytkownicy systemu muszą posiadać uprawnienia sudo.
- Jeśli masz trudności z dostępem do konta sudo, rozważ zmianę hasła roota MySQL.
- skonfigurowanego MySQL na swoim serwerze.
Krok 1: Zatrzymanie usługi MySQL i kopia zapasowa danych
Na początku zatrzymaj usługę MySQL za pomocą polecenia systemctl:
|
1 |
sudo systemctl stop mysql |
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:
|
1 |
cp -r /var/lib/mysql /var/lib/mysql_bkp |
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:
|
1 |
mysql> CHECK TABLE table_name; |
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:
|
1 |
mysql> REPAIR TABLE table_name; |
Jeśli naprawa zakończyła się pomyślnie, w wyniku powinien pojawić się następujący komunikat bez błędów:
|
1 2 3 4 5 6 7 8 9 10 11 |
Wynik: +--------------------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------------------+--------+----------+----------+ | database_name.table_name | repair | status | OK | +--------------------------+--------+----------+----------+ |
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:
|
1 |
sudo systemctl restart mysql |
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:
|
1 |
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf |
Wstaw następujący wiersz pod sekcją [mysqld]:

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:
|
1 |
mysqldump database_name table_name > 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:
|
1 |
mysql -u user -p --execute="DROP TABLE database_name.table_name" |
Następnie, korzystając z przygotowanego dokumentu zrzutu demo.sql, przywróć tabelę:
|
1 |
mysql -u user -p --database=database_name < demo.sql |
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:
- Jak zainstalować MySQL na CentOS 7
- Użytkownik MySQL — tworzenie i nadawanie uprawnień
- Konfiguracja replikacji w MySQL na Ubuntu
Miłego korzystania!
Komentarze
Brak komentarzy. Bądź pierwszy.