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

Introduktion: MySQL-tabeller kan stöta på korruption, vilket resulterar i oläslig data och potentiella serverkrascher. Fall där en korrupt tabell nås leder ofta till serverinstabilitet. 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. Om du misstänker tabellkorruption är det viktigt att skapa en säkerhetskopia av din datakatalog innan du försöker felsöka eller åtgärda något. Denna försiktighetsåtgärd minimerar risken för dataförlust. För att initiera säkerhetskopieringsprocessen, börja med att stoppa MySQL-tjänsten: sudo systemctl stop mysql Obs: På vissa plattformar som Rocky Linux kan MySQL-tjänsten heta mysqld istället. Fortsätt genom att duplicera all din data till en ny säkerhetskopieringskatalog. För Ubuntu-system är standarddatakatalogen vanligtvis placerad på /var/lib/mysql/: cp -r /var/lib/mysql /var/lib/mysql_bkp Efter att ha skapat säkerhetskopian, initiera en undersökning för att bekräfta om tabellen är korrupt. Om tabellen använder MyISAM-lagringsmotorn 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: Utdata +--------------------------+--------+----------+----------+ | Table                     | Op     | Msg_type | Msg_text | +--------------------------+--------+----------+----------+ | database_name.table_name | repair | status   | OK       | +--------------------------+--------+----------+----------+ Tvärtom, 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 checksumdiskrepanse 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. Men i situationer där det blir nödvändigt att bygga om en korrupt InnoDB-tabell rekommenderar MySQL-dokumentationen metoden "Dump and Reload". Detta innebär att återfå åtkomst till den korrupta tabellen, använda verktyget mysqldump för att skapa en logisk säkerhetskopia, bevara både tabellstruktur och data. Återställ därefter tabellen tillbaka till databasen. Med tanke på detta, försök att starta om MySQL-tjänsten för att kontrollera om den återställer åtkomsten till servern: sudo systemctl restart mysql 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], införliva följande rad: /etc/mysql/mysql.conf.d/mysqld.cnf . . . [mysqld] . . . innodb_force_recovery=1 Spara och stäng filen, försök sedan att starta om MySQL-tjänsten. Om åtkomsten till den korrupta tabellen lyckas, använd verktyget mysqldump för att exportera dina tabelldata till en ny fil, namnge den som önskat (t.ex. out.sql): mysqldump database_name table_name > out.sql Därefter, släpp tabellen från databasen. För att undvika att öppna MySQL-prompten igen, använd följande syntax: 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, med hjälp av InnoDB:s force_recovery-alternativ och relevanta MySQL-kommandon för att dumpa, släppa och återställa tabeller.

 


Was this article helpful?

mood_bad Dislike 0
mood Like 0
visibility Views: 553