När en MySQL-databas blir korrupt kan du undra varför databasen förstördes. Det här inlägget kommer att beskriva möjliga orsaker bakom databaskorruption innan du svarar på frågan:hur reparerar man en korrupt MySQL-databas?
Orsaker bakom MySQL-databaskorruption
En MySQL-databas kan bli korrupt på grund av någon av dessa anledningar:
- Plötslig serveravstängning
- Defekt i hårdvaran som används för att lagra och hämta data som diskundersystem, diskkontroller, drivrutiner, etc.
- 'mysqld'-processen avbryts medan en pågående uppdatering pågår
- Programvarufel
Det kan vara svårt att hitta orsaken till en skadad databas. Oavsett vad orsaken kan vara, är det du bör tänka på hur du reparerar den korrupta MySQL-databasen.
Hur reparerar man en korrupt MySQL-databas?
Det första du behöver titta på är felmeddelandet du får. Följande är några felmeddelanden som du kan stöta på när MySQL-databasen blir skadad:
Fel 144: Tabellen har kraschat och den senaste reparationen misslyckades
Fel 141: Duplicera unik nyckel eller begränsning vid skrivning eller uppdatering
Fel 136: Inget mer utrymme i indexfilen
Fel 134: Posten har redan tagits bort
Fel 126: Indexfilen har kraschat/fel filformat
Fel: Kunde inte hitta filen 'wtlicensemanager.dll'
Om du vill göra reparationen kostnadsfritt har du två alternativ:
- Gör det manuellt.
- Gör det med hjälp av programvara som använder provperioden.
En databasåterställningsprogramvara kan göra ett bättre och snabbare jobb med att reparera den skadade databasen.
Här är ett program som du kan använda för att reparera den skadade MySQL-databasen:
Detta MySQL-databasreparationsverktyg reparerar databas skapad med både InnoDB- och MyISAM-databasmotorer av MySQL. Du kan ladda ner demoversionen av SQL-reparationsverktyget för att förhandsgranska återställningsbar databas innan du sparar dem.
Nyckelfunktioner:
- Kan återställa MySQL-databas på Windows- och Linux-system.
- Återställer InnoDB-filer (.ibdata, .ibd och .frm) och MyISAM-filer (myd, .myi och .frm)
- Återställer databasobjekt som tabeller, tabellegenskaper, datatyper, vyer, utlösare, etc.
- Tillåter selektiv återställning av databaskomponenter
Hur reparerar man korrupt MySQL-databas manuellt?
Det finns två typer av lagringsmotorer i MySQL:InnoDB och MyISAM. InnoDB-tabellen innehåller FRM-, IBDATA- och IDB-filer, medan MyISAM-tabellen innehåller FRM-, MYD- och MYI-filer.
Innan vi fortsätter
Här är några saker du bör tänka på innan du försöker manuellt återställa:
- Starta inte om servern
När du startar om servern kan servern sätta den skadade databasen i misstänkt läge. Detta kommer att stänga av databasen. Det kan också skapa fel när du ansluter till databasen. Du bör försöka återställa utan att starta om servern.
- Använd enanvändarläget
Se till att du är den enda användaren som är ansluten till databasen. Enanvändarläget ger dig hela kontrollen och eliminerar andra användares störningar.
- Uppgradera inte MySQL
Du kanske tänker på att uppdatera MySQL-databasen för att reparera de skadade filerna. Men så är inte fallet. Uppgradering kan orsaka permanent dataförlust.
- Ta en säkerhetskopia av den skadade MySQL-databasen
Det är viktigt att ha en säkerhetskopia av den skadade filen eftersom det kan finnas fel som kan göra att du förlorar data. Det finns ingen garanti för att dina manuella steg inte påverkar de friska filerna. Så det är säkert att ha en säkerhetskopia innan du försöker återställa manuellt.
För att säkerhetskopiera, använd följande kommando:
mysqldump db_name> database_name.sql
Ange bara ditt databasnamn istället för databasnamn.
Om ovanstående inte fungerar, prova följande:
mysqldump –u[användarnamn] –p[lösenord] [databasnamn]> [dump_fil].sql
Det finns ett annat sätt att säkerhetskopiera databasen:
service mysqld stop
cp -r /var/lib/mysql /var/lib/mysql_bkp
Nu när vi har säkerhetskopian kan vi försöka reparera den korrupta MySQL-databasen.
Hur återställer jag MySQL-databas manuellt?
Reparerar MyISAM-databas
Om du använder MyISAM-databaslagringsmotorn för din databastabell kan du använda följande kommandon för att reparera tabellen:
Mysqlcheck
Om din MySQL-server körs, kör följande mysqlcheck-kommando för att reparera din tabell:
mysqlcheck -r [databasnamn]
Se till att ersätta "database_name" med namnet på din databas.
Myisamchk
Om servern inte körs, försök att reparera databastabellen genom att använda kommandot myisamchk:
Obs! Innan du kör det här kommandot, se till att servern inte har några tabeller öppna.
myisamchk table_name
Reparera tabellnamnet med tabellnamnet i ditt fall. Detta kommando fixar automatiskt din tabell.
För att starta om servern, skriv följande:
tjänst mysqld start
Tvinga fram InnoDB-återställning
Du måste utföra InnoDB force recovery för att extrahera data från en skadad InnoDB-databastabell.
Steg 1: Först måste du öppna filen my.cnf.
I den här filen, leta upp [mysqld]-sektionen.
Lägg till följande rad i det här avsnittet:
innodb_force_recovery=1
Spara nu konfigurationsfilen och starta om MySQL-servern. Du kan ställa in värdet på innodb_force_recovery från 1 till 6. Ett värde över 4 rekommenderas dock inte, eftersom det kan skada data.
Steg 2: Dumpa tabelldata till en ny fil.
För att göra det, använd följande kommando:
mysqldump –u användare –p db_name table_name> single_dbtable_dump.sql
Steg 3: Släpp den korrupta tabellen från databasen.
mysql –u användare –p –execute=”SLÄPP TABELL db_name.table_name”
Steg 4: Återställ tabellen från dumpfilen.
mysql –u användare –p
Steg 5: När filerna har reparerats inaktiverar du force recovery-läget med följande kommando:
#innodb_force_recovery=…
Nu kan du starta om MySQL-tjänsten i normalt läge.
Vi hoppas att ovanstående metoder hjälper dig att reparera den korrupta MySQL-databasen.