MySQL-tabeller kan bli korrupte, noe som fører til uleselige data og potensielle serverkrasjer. Denne guiden fører deg gjennom diagnosering og reparasjon av korrupte tabeller i både MyISAM- og InnoDB-lagringsmotorer, ved hjelp av innebygde MySQL-verktøy og gjenopprettelsesmetoder.
Bakgrunn
Vanlige årsaker til tabellkorruptering inkluderer:
- Mysql-serveravbrudd under en skriveoperasjon
- Konkurrerende endring av en tabell både av et eksternt program og serveren
- Uventet avslutting av maskinen
- Hårdvarefeil i datamaskinen
- Programmeringsfeil inni MySQL-koden
Før du prøver å feilsøke eller fikse noe, er det essensielt å lage en sikkerhetskopi av datakatalogen din for å minimere risikoen for dataloss.
Hvordan du fikser korrupte tabeller
-
Trinn 1: Stopp MySQL og lag en sikkerhetskopi
Stopp MySQL-tjenesten:
sudo systemctl stop mysqlMerk: På visse plattformer som Rocky Linux kan MySQL-tjenesten hete
mysqldi stedet.Dupliser all din data til en ny sikkerhetskopikatalog. For Ubuntu-systemer er standarddatakatalogen vanligvis plassert på
/var/lib/mysql/:cp -r /var/lib/mysql /var/lib/mysql_bkp -
Trinn 2: Sjekk om tabellen er korrupt (MyISAM)
Hvis tabellen bruker MyISAM-lagringsmotoren, kan du bestemme dens status ved å utføre en
CHECK TABLE-setning fra MySQL-prompten:mysql> CHECK TABLE table_name;Output vil inneholde et melding som indikerer om tabellen er korrupt.
-
Trinn 3: Reparer MyISAM-tabeller
Hvis tabellen bekreftes som korrupt, prøv å reparere den:
mysql> REPAIR TABLE table_name;Efter en vellykket reparasjon skal outputen inneholde en melding som bekrefter at reparasjonsprosessen er fullført. For eksempel:
+--------------------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------------------+--------+----------+----------+ | database_name.table_name | repair | status | OK | +--------------------------+--------+----------+----------+ -
Trinn 4: Håndter InnoDB-tabeller med krasjgjenoppretting
Hvis den korrupte tabellen bruker InnoDB-lagringsmotoren (standard fra MySQL 8.0 og fremover), er reparasjonsprosessen annerledes. InnoDB har automatisk korruptionskontroll og -reparasjon, som identifiserer korrupte sider ved å utføre sjekksummer på hver side den leser.
Prøv å starte MySQL-tjenesten på nytt for å se om det gjenoppretter tilgang til serveren:
sudo systemctl restart mysqlInnoDBs innebygde krasjgjenopprettingsmekanisme løser vanlige problemer ved serveromstart.
-
Trinn 5: Aktiver InnoDB Force Recovery (hvis nødvendig)
Hvis serveren fortsatt krasjer eller er utilgjengelig, aktiver InnoDBs
force_recovery-alternativ. Redigermysqld.cnf-filen, som vanligvis ligger i/etc/mysqlpå Ubuntu- og Debian-systemer, eller/etc/my.cnf.dpå Red Hat- og Rocky-systemer:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfI seksjonen
[mysqld], legg til følgende linje:[mysqld] innodb_force_recovery=1Lagre og lukk filen, og prøv å starte MySQL-tjenesten på nytt.
-
Trinn 6: Dump og gjenopprett InnoDB-tabellen
Hvis tilgang til den korrupte tabellen er vellykket, bruk
mysqldump-verktøyet for å eksportere tabellens data til en ny fil:mysqldump database_name table_name > out.sqlSlett tabellen fra databasen:
mysql -u user -p --execute="DROP TABLE database_name.table_name"Gjenopprett tabellen ved hjelp av dump-filen som ble opprettet:
mysql -u user -p < out.sql
Vanlige problemer
- Hvis
REPAIR TABLE-kommandoen mislykkes på MyISAM-tabeller, kan korrupteringen være alvorlig. Overve kanskje å gjenopprette fra sikkerhetskopi. - For InnoDB-tabeller, hvis
innodb_force_recovery=1ikke virker, kan du prøve å øke verdien opp til 6, men høyere verdier kan forhindre skriveoperasjoner. - Fjern alltid linjen
innodb_force_recoveryfra konfigurasjonsfilen etter gjenoppretting for å gjenopprette normal drift.