Idéer för att fixa korrupta tabeller i MySQL

MySQL-tabeller kan drabbas av korruption, vilket resulterar i oläslig data och potentiella serverkrascher. Denna guide visar hur du säkerhetskopierar, diagnostiserar och reparerar korrupta tabeller i både MyISAM- och InnoDB-lagringsmotorer.

Bakgrund

Vanliga orsaker till tabellkorruption inkluderar:

  • Avbrott i MySQL-servern under en skrivoperation
  • Samtidig ändring av en tabell av både ett externt program och servern
  • Oväntad avstängning av maskinen
  • Hårdvarufel i datorn
  • Programvarufel i MySQL-koden

Så här gör du

  1. Steg 1: Skapa säkerhetskopia

    Innan du försöker felsöka eller åtgärda något är det viktigt att skapa en säkerhetskopia av din datakatalog. Detta minimerar risken för dataförlust.

    Stoppa först MySQL-tjänsten:

    sudo systemctl stop mysql

    Obs: På vissa plattformar som Rocky Linux kan MySQL-tjänsten heta mysqld istället.

    Duplicera sedan all din data till en ny säkerhetskopieringskatalog. För Ubuntu-system är standarddatakatalogen vanligtvis /var/lib/mysql/:

    cp -r /var/lib/mysql /var/lib/mysql_bkp
  2. Steg 2: Kontrollera och reparera MyISAM-tabeller

    Om tabellen använder MyISAM-lagringsmotoren kan du fastställa dess status genom att köra en CHECK TABLE-sats från MySQL-prompten:

    mysql> CHECK TABLE table_name;

    Utdata kommer att innehålla ett meddelande som anger om tabellen är korrupt. Om det bekräftas är nästa steg att försöka reparera:

    mysql> REPAIR TABLE table_name;

    Efter en lyckad reparation bör utdata innehålla ett meddelande som bekräftar slutförandet av reparationsprocessen. Till exempel:

    +--------------------------+--------+----------+----------+
    | Table                    | Op     | Msg_type | Msg_text |
    +--------------------------+--------+----------+----------+
    | database_name.table_name | repair | status   | OK       |
    +--------------------------+--------+----------+----------+
  3. Steg 3: Hantera InnoDB-tabeller genom omstart

    Om den korrupta tabellen använder InnoDB-lagringsmotorn skiljer sig reparationsprocessen. InnoDB är standardlagringsmotorn i MySQL från version 8.0 och framåt, med automatiserade korruptionskontroller och reparationer. InnoDB identifierar korrupta sidor genom att utföra checksummor på varje sida den läser. Om en checksumdiskrepans upptäcks stoppas MySQL-servern automatiskt.

    Att reparera InnoDB-tabeller är sällan nödvändigt på grund av InnoDB:s inbyggda mekanism för kraschåterställning, som vanligtvis löser de flesta problem vid serveromstart. Försök att starta om MySQL-tjänsten för att kontrollera om den återställer åtkomsten till servern:

    sudo systemctl restart mysql
  4. Steg 4: Aktivera InnoDB force_recovery (om omstart misslyckas)

    Om servern förblir kraschad eller otillgänglig kan aktivering av InnoDB:s force_recovery-alternativ ge en lösning. Redigera filen mysqld.cnf, som vanligtvis finns i /etc/mysql på Ubuntu- och Debian-system, eller /etc/my.cnf.d på Red Hat- och Rocky-system.

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

    I avsnittet [mysqld], lägg till följande rad:

    [mysqld]
    innodb_force_recovery=1

    Spara och stäng filen, försök sedan att starta om MySQL-tjänsten.

  5. Steg 5: Dumpa, släpp och återställ tabellen

    Om åtkomsten till den korrupta tabellen lyckas efter att ha aktiverat force_recovery, använd verktyget mysqldump för att exportera dina tabelldata till en ny fil:

    mysqldump database_name table_name > out.sql

    Släpp därefter tabellen från databasen:

    mysql -u user -p --execute="DROP TABLE database_name.table_name"

    Efter detta steg, återställ tabellen med hjälp av dumpfilen som skapats:

    mysql -u user -p < out.sql

    Denna process syftar till att återställa från en kraschad eller otillgänglig MySQL-server genom att bygga om tabellen från en logisk säkerhetskopia.


Was this article helpful?

mood_bad Dislike 0
mood Like 0
visibility Views: 1121