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

  1. Trin 1: Stop MySQL og Opret en Sikkerhedskopi

    Stop MySQL-tjenesten:

    sudo systemctl stop mysql

    Bemærk: På visse platforme som Rocky Linux kan MySQL-tjenesten være navngivet mysqld i 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
  2. 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.

  3. 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       |
    +--------------------------+--------+----------+----------+
  4. 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 mysql

    InnoDBs indbyggede krasgenoprettelsesmekanisme løser typisk de fleste problemer ved genstart af serveren.

  5. 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ér mysqld.cnf-filen, der typisk er placeret i /etc/mysql på Ubuntu- og Debian-systemer, eller /etc/my.cnf.d på Red Hat- og Rocky-systemer:

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

    I sektionen [mysqld], tilføj følgende linje:

    [mysqld]
    innodb_force_recovery=1

    Gem og luk filen, og prøv at genstarte MySQL-tjenesten.

  6. 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.sql

    Slet 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 TABLE mislykkes på MyISAM-tabeller, kan korruptionen være alvorlig. Overvej at gendanne fra din sikkerhedskopi.
  • For InnoDB-tabeller, hvis innodb_force_recovery=1 ikke 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_recovery fra din konfigurationsfil efter gendannelse for at gendanne normal drift.