W tym artykule opisano, jak naprawić tabele i bazy danych MySQL. W miarę wzrostu tabel bazy danych mogą od czasu do czasu pojawiać się błędy. Kiedy to robią, MySQL zawiera kilka narzędzi, których możesz użyć do sprawdzenia i naprawy tabel bazy danych. Aby to zrobić, postępuj zgodnie z poniższymi procedurami w kolejności, w jakiej się pojawiają.
Ten artykuł dotyczy tylko produktów wymienionych w Szczegółach artykułu Pasek boczny. Aby wykonać te procedury, musisz mieć uprawnienia administratora do serwera.Krok 1:Tworzenie kopii zapasowych baz danych
Zanim spróbujesz naprawić jakąkolwiek bazę danych, powinieneś najpierw wykonać jej kopię zapasową. Aby utworzyć kopię zapasową wszystkich plików ze wszystkich baz danych, wykonaj następujące czynności:
- Zaloguj się na swój serwer za pomocą SSH.
- Zatrzymaj serwer MySQL za pomocą odpowiedniego polecenia dla twojej dystrybucji Linuksa:
- W przypadku CentOS i Fedory wpisz:
service mysqld stop
-
W przypadku Debiana i Ubuntu wpisz:
service mysql stop
- W przypadku CentOS i Fedory wpisz:
-
Wpisz następujące polecenie:
cp -rfv /var/lib/mysql /var/lib/mysql$(date +%s)
To polecenie kopiuje wszystkie pliki ze wszystkich twoich baz danych do nazwy katalogu na podstawie bieżącego czasu (a dokładniej liczby sekund, które upłynęły od 1 stycznia 1970 r.). Dzięki temu każda kopia zapasowa bazy danych jest przechowywana w katalogu o unikalnej nazwie. Dla dodatkowej ochrony możesz (i powinieneś) tworzyć kopie zapasowe plików bazy danych w zdalnej lokalizacji, która nie jest na serwerze. -
Zrestartuj serwer MySQL za pomocą odpowiedniego polecenia dla twojej dystrybucji Linuksa:
- W przypadku CentOS i Fedory wpisz:
service mysqld start
-
W przypadku Debiana i Ubuntu wpisz:
service mysql start
- W przypadku CentOS i Fedory wpisz:
Krok 2:Uruchamianie mysqlcheck
Po utworzeniu kopii zapasowej baz danych możesz rozpocząć rozwiązywanie problemów. mysqlcheck Program umożliwia sprawdzanie i naprawę baz danych podczas działania MySQL. Ta funkcja jest przydatna, gdy chcesz pracować na bazie danych bez zatrzymywania całej usługi MySQL.
Dodatkowo mysqlcheck działa na tabelach korzystających z silników baz danych MyISAM lub InnoDB.
Aby uzyskać informacje o tym, jak określić, którego silnika magazynu używa tabela bazy danych, zobacz ten artykuł.Aby użyć mysqlcheck , wykonaj następujące czynności:
- Jako użytkownik root wpisz następujące polecenie:
cd /var/lib/mysql
-
Wpisz następujące polecenie, zastępując bazę danych nazwą bazy danych, którą chcesz sprawdzić:
mysqlcheck database
Poprzednia komenda sprawdza wszystkie tabele w określonej bazie danych. Alternatywnie, aby sprawdzić konkretną tabelę w bazie danych, wpisz następujące polecenie. Zamień bazę danych na nazwę bazy danych i zastąp tabelę nazwą tabeli, którą chcesz sprawdzić:
mysqlcheck database table
-
Mysqlcheck sprawdza określoną bazę danych i tabele. Jeśli tabela przejdzie kontrolę, mysqlcheck wyświetla OK do stołu. Jeśli jednak mysqlcheck zgłosi błąd dla tabeli, wpisz następujące polecenie, aby spróbować go naprawić. Zamień bazę danych na nazwę bazy danych, a tabelę na nazwę tabeli:
mysqlcheck -r database table
- Jeśli mysqlcheck nie może pomyślnie naprawić stołu lub stołów, przejdź do następującej procedury.
Krok 3:Uruchamianie diagnostyki specyficznej dla silnika
Jeśli uruchamiasz mysqlcheck nie rozwiązuje problemu, następnym krokiem jest uruchomienie diagnostyki specyficznej dla silnika używanego przez tabelę lub tabele bazy danych. Postępuj zgodnie z poniższą procedurą odpowiednią dla mechanizmu przechowywania bazy danych tabeli.
Aby uzyskać informacje o tym, jak określić, z którego silnika magazynu korzystają Twoje tabele bazy danych, zobacz ten artykuł.Naprawianie tabel MyISAM za pomocą myisamchk
Jeśli używasz mechanizmu pamięci masowej MyISAM dla tabeli, możesz uruchomić myisamchk program do naprawy. Aby to zrobić, wykonaj następujące kroki:
myisamchk Program działa tylko dla tabel, które używają silnika pamięci masowej MyISAM. Nie działa dla silnika InnoDB.- Zatrzymaj serwer MySQL za pomocą odpowiedniego polecenia dla twojej dystrybucji Linuksa:
- W przypadku CentOS i Fedory wpisz:
service mysqld stop
-
W przypadku Debiana i Ubuntu wpisz:
service mysql stop
- W przypadku CentOS i Fedory wpisz:
-
Wpisz następujące polecenie:
cd /var/lib/mysql
- Przejdź do katalogu, w którym znajduje się baza danych. Na przykład, jeśli baza danych nosi nazwę klienci , wpisz cd klienci.
-
Wpisz następujące polecenie, zastępując tabelę nazwą tabeli, którą chcesz sprawdzić:
myisamchk table
Aby sprawdzić wszystkie tabele w bazie danych, wpisz następujące polecenie:
myisamchk *.MYI
Jeśli poprzednie polecenie nie działa, możesz spróbować usunąć pliki tymczasowe, które mogą uniemożliwiać myisamchk od poprawnego działania. Aby to zrobić, wróć do /var/lib/mysql katalogu, a następnie wpisz następujące polecenie:
ls */*.TMD
Jeśli na liście są jakieś pliki .TMD, wpisz następujące polecenie, aby je usunąć:
rm */*.TMD
Następnie spróbuj uruchomić myisamchk ponownie.
-
Aby spróbować naprawić tabelę, wpisz następujące polecenie, zastępując tabela z nazwą tabeli, którą chcesz naprawić:
myisamchk --recover table
-
Zrestartuj serwer MySQL za pomocą odpowiedniego polecenia dla twojej dystrybucji Linuksa:
- W przypadku CentOS i Fedory wpisz:
service mysqld start
-
W przypadku Debiana i Ubuntu wpisz:
service mysql start
- W przypadku CentOS i Fedory wpisz:
- Przetestuj naprawiony stół lub stoły.
Uruchamianie procesu odzyskiwania InnoDB
Jeśli używasz silnika przechowywania InnoDB dla tabeli bazy danych, możesz uruchomić proces odzyskiwania InnoDB. Aby to zrobić, wykonaj następujące kroki:
- Użyj preferowanego edytora tekstu, aby otworzyć my.cnf plik na twoim serwerze. Lokalizacja my.cnf plik zależy od twojej dystrybucji Linuksa:
- W CentOS i Fedorze plik my.cnf plik znajduje się w /etc katalog.
- W Debianie i Ubuntu plik my.cnf plik znajduje się w /etc/mysql katalog.
- W my.cnf znajdź plik [mysqld] sekcja.
-
Dodaj następujący wiersz do [mysqld] Sekcja:
innodb_force_recovery=4
-
Zapisz zmiany w my.cnf plik, a następnie uruchom ponownie serwer MySQL za pomocą odpowiedniego polecenia dla Twojej dystrybucji systemu Linux:
- W przypadku CentOS i Fedory wpisz:
service mysqld restart
-
W przypadku Debiana i Ubuntu wpisz:
service mysql restart
- W przypadku CentOS i Fedory wpisz:
-
Wpisz następujące polecenie, aby wyeksportować wszystkie bazy danych do databases.sql plik:
mysqldump --all-databases --add-drop-database --add-drop-table --routines > databases.sql
-
Uruchom mysql programu, a następnie spróbuj usunąć zaatakowaną bazę danych lub bazy danych za pomocą DROP DATABASE Komenda.
Jeśli MySQL nie może usunąć bazy danych, możesz usunąć ją ręcznie w kroku 8 poniżej po zatrzymaniu serwera MySQL.
-
Zatrzymaj serwer MySQL za pomocą odpowiedniego polecenia dla twojej dystrybucji Linuksa:
- W przypadku CentOS i Fedory wpisz:
service mysqld stop
-
W przypadku Debiana i Ubuntu wpisz:
service mysql stop
- W przypadku CentOS i Fedory wpisz:
-
Jeśli nie udało się usunąć bazy danych w kroku 6, wpisz następujące polecenia, aby usunąć ją ręcznie. Zastąp bazę danych nazwą bazy danych, którą chcesz usunąć:
cd /var/lib/mysql rm -rf database
Upewnij się, że nie usuwasz mysql lub performance_schema katalogi! -
Użyj preferowanego edytora tekstu, aby otworzyć my.cnf na serwerze, a następnie skomentuj następujący wiersz w [mysqld] sekcja, jak pokazano:
#innodb_force_recovery=4
To wyłącza tryb odzyskiwania InnoDB. -
Zapisz zmiany w my.cnf plik, a następnie uruchom serwer MySQL za pomocą odpowiedniego polecenia dla Twojej dystrybucji Linuksa:
- W przypadku CentOS i Fedory wpisz:
service mysqld start
-
W przypadku Debiana i Ubuntu wpisz:
service mysql start
- W przypadku CentOS i Fedory wpisz:
-
Wpisz następujące polecenie, aby przywrócić bazy danych z pliku kopii zapasowej utworzonej w kroku 5:
mysql < databases.sql
- Przetestuj przywróconą bazę danych.
Więcej informacji
- Więcej informacji o mysqlcheck , odwiedź https://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html.
- Więcej informacji o myisamchk , odwiedź https://dev.mysql.com/doc/refman/5.5/en/myisamchk.html.