sql >> Databasteknik >  >> RDS >> Mysql

Gratis metoder för att reparera korrupt MySQL-databas

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:

  1. Gör det manuellt.
  2. 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.


  1. få JOIN-tabellen som en rad resultat med PostgreSQL/NodeJS

  2. Hur man får en lista över aktiverade/inaktiverade kontrollbegränsningar i SQL Server Database - SQL Server/TSQL självstudie del 86

  3. De vanligaste frågorna för att hitta Patch tillämpad i Oracle-appar

  4. Hur uppdaterar jag automatiskt en tidsstämpel i PostgreSQL