MySQL-tabeller kan blive korrupte, hvilket fører til usærlige data og potentielle serverkrasjer. Denne guide gennemgår diagnosering og reparation af korrupte tabeller i både MyISAM- og InnoDB-lagringssystemer ved hjælp af indbyggede MySQL-værktøjer og genoprettelsesmetoder.
Baggrund
Fælles årsager til tabellkorruption inkluderer:
- MySQL-serverafbrudt under en skriveoperation
- Konkurrent ændring af en tabel af både et eksternt program og serveren
- Uventet nedslukning af maskinen
- Hardwarefejl i computeren
- Software-fejl indeni MySQL-koden
Før du prøver nogen fejlfinding eller rettelser, er det afgørende at oprette en sikkerhedskopi af din datamappe for at minimere risikoen for datatab.
Sådan Fixer Du Korrupte Tabeller
-
Trin 1: Stop MySQL og Opret en Sikkerhedskopi
Stop MySQL-tjenesten:
sudo systemctl stop mysqlBemærk: På visse platforme som Rocky Linux kan MySQL-tjenesten være navngivet
mysqldi stedet.Duplikér al din data til en ny sikkerhedskopimappe. For Ubuntu-systemer er standarddatamappen typisk placeret ved
/var/lib/mysql/:cp -r /var/lib/mysql /var/lib/mysql_bkp -
Trin 2: Tjek om Tabellen er Korrupt (MyISAM)
Hvis tabellen bruger MyISAM-lagringssystemet, kan du bestemme dens status ved at udføre en
CHECK TABLE-udtalelse fra MySQL-prompten:mysql> CHECK TABLE table_name;Outputtet vil indeholde et meddelelse, der angiver, om tabellen er korrupt.
-
Trin 3: Reparere MyISAM-Tabeller
Hvis tabellen bekræftes som korrupt, prøv at reparere den:
mysql> REPAIR TABLE table_name;Efter en vellykket reparation vil outputtet indeholde et meddelelse, der bekræfter afslutningen af reparationsprocessen. For eksempel:
+--------------------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------------------+--------+----------+----------+ | database_name.table_name | repair | status | OK | +--------------------------+--------+----------+----------+ -
Trin 4: Håndter InnoDB-Tabeller med Krasgenoprettelse
Hvis den korrupte tabel bruger InnoDB-lagringssystemet (standard i MySQL 8.0 og fremad), er reparationsprocessen anderledes. InnoDB har automatiske korruptionskontroller og -reparationer, der identificerer korrupte sider ved at udføre checksummer på hver side den læser.
Prøv at genstarte MySQL-tjenesten for at se, om det gendanner adgang til serveren:
sudo systemctl restart mysqlInnoDBs indbyggede krasgenoprettelsesmekanisme løser typisk de fleste problemer ved genstart af serveren.
-
Trin 5: Aktivér InnoDB Force Recovery (hvis nødvendigt)
Hvis serveren fortsætter med at krasse eller være utilgængelig, aktiver InnoDBs
force_recovery-indstilling. Redigérmysqld.cnf-filen, der typisk er placeret 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 sektionen
[mysqld], tilføj følgende linje:[mysqld] innodb_force_recovery=1Gem og luk filen, og prøv at genstarte MySQL-tjenesten.
-
Trin 6: Dump og Genindlæs InnoDB-Tabellen
Hvis adgang til den korrupte tabel er vellykket, brug
mysqldump-værktøjet til at eksportere dine tabelldata til en ny fil:mysqldump database_name table_name > out.sqlSlet tabellen fra databasen:
mysql -u user -p --execute="DROP TABLE database_name.table_name"Gendan tabellen ved hjælp af dump-filen, der er oprettet:
mysql -u user -p < out.sql
Fælles Problemer
- Hvis
REPAIR TABLEmislykkes på MyISAM-tabeller, kan korruptionen være alvorlig. Overvej at gendanne fra din sikkerhedskopi. - For InnoDB-tabeller, hvis
innodb_force_recovery=1ikke virker, kan du prøve at øge værdien op til 6, men højere værdier kan forhindre skriveoperationer. - Fjern altid linjen
innodb_force_recoveryfra din konfigurationsfil efter gendannelse for at gendanne normal drift.