sql >> Databasteknik >  >> RDS >> Mysql

Hur fixar man vanliga problem med MySQL-databasen?

Sammanfattning: Den här artikeln listar några av de vanligaste felen du kan stöta på när en MySQL-tabell blir korrupt. Den beskriver också de möjliga orsakerna bakom MySQL-databastabellens korruption. Artikeln förklarar också vad du kan göra för att fixa korrupta tabeller och hur en MySQL-databasreparationsprogramvara kan vara praktisk för att återställa data i tabellen och alla andra databasobjekt.

Som användare av MySQL-databas kan du stöta på något av dessa fel:

  • "Tabell är markerad som kraschad och bör repareras"
  • "Tabell har kraschat och senaste reparation misslyckades"
  • "Tabell tbl_name existerar inte"
  • "Felaktig nyckelfil för tabellen:'...'. Försök att reparera det”, etc.

Dessa är varningstecken på att din MySQL-tabell är skadad.

Vad orsakar korruption i MySQL-databastabellen?

Följande är möjliga orsaker som leder till korruption av MySQL-databastabellen:

  • Problem i den underliggande plattformen som används av MySQL, inklusive diskundersystem, drivrutiner, kontroller, etc.
  • Plötlig systemavstängning eller serverkrasch
  • MySQL-processen dödas mitt under skrivningen till databasen
  • Programvarufel eller maskinvarufel

Att stöta på något av dessa MySQL-korruptionsfel kan göra data i tabellerna otillgängliga. Låt oss diskutera lösningarna för att fixa de skadade borden.

Hur åtgärdar man fel i MySQL-databasen?

Om du har en uppdaterad säkerhetskopia av din databas, återställ databasen från säkerhetskopian för att återställa otillgängliga tabelldata. Om säkerhetskopian inte är tillgänglig, utför stegen i sekvensen nedan för att fixa korrupta MySQL-tabeller och återställa data:

Obs! Ta en säkerhetskopia av din MySQL-databas och tabeller för att förhindra ytterligare skada under reparations- och återställningsprocessen.

Steg 1:Kontrollera tabellen för fel

Först måste du kontrollera databastabellen för korruptionsfel. Du kan använda KONTROLLTABELL kommando för att diagnostisera korrupta InnoDB- och MyISAM-tabeller:

KOCKERA TABLE tbl_name-alternativet;

Ersätt här "tbl_name" med namnet på den korrupta databastabellen. Och ersätt "alternativ" med något av dessa alternativ:SNABB, FAST, MEDIUM, FÖRLÄNGD och ÄNDRAD.

Alternativ Beskrivning
SNABB Utför snabbare reparation av InnoDB- och MyISAM-tabeller. Hoppa över att skanna raderna för att leta efter felaktiga länkar
SNABB Kontrollera endast MyISAM-tabeller som inte har stängts ordentligt. Använd inte på InnoDB-tabeller.
ÄNDRAD Kontrollera endast MyISAM-tabeller som inte har stängts sedan den senaste kontrollen utfördes. Använd inte på InnoDB-tabeller.
MEDEL Verifiera om de borttagna länkarna är giltiga genom att skanna rader. Gäller endast för MyISAM-tabeller.
UTÖKAD Utför en fullständig nyckelsökning för alla nycklar för varje rad i MyISAM-tabellen. Det tar lång tid att köra.

För att kontrollera mer än en tabell för korruption, använd följande kommando:

KOCKERA TABELL tbl_name1, tbl_name2, tbl_name 3 alternativ;

Obs! Kommandot CHECK TABLE kan endast användas när MySQL-processen körs. Men om processen/servern inte körs, kan du använda följande 'myisamchk'-kommando för att kontrollera MyISAM-tabeller för korruption:

myisamchk [alternativ] tbl_name …

Detta kommando kontrollerar en enskild tabell.

Kör följande kommando för att kontrollera alla tabeller i MySQL-databasen för korruption:

myisamchk /path/to/datadir/*/*.MYI

Verktyget myisamchk fungerar inte för InnoDB-tabeller.

Steg 2:Reparera korrupt tabell

Obs! Kommandot myisamchk gäller bara för MyISAM-tabeller och fungerar inte för InnoDB-tabeller. För att reparera och återställa en Innodb-tabell, hoppa till steg 3.

Verktyget myisamchk kan också hjälpa till att reparera en korrupt (skadad) MyISAM-tabell. För att använda verktyget för att reparera den skadade tabellen, gör följande:

  1. Stoppa MySQL-tjänsten genom att skriva:
service mysqld stop

cd /var/lib/mysql

  1. Byt till katalogen där databasen finns.
cd /var/lib/mysql/table_name

myisamchk

  1. För att reparera en skadad tabell, kör följande kommando genom att ersätta TABLE med namnet på tabellen du vill reparera:
myisamchk –recover
  1. Starta om din MySQL-tjänst.
service mysqld start

Steg 3:Forcera InnoDB-återställning

För att åtgärda korruption i InnoDB-tabeller, använd 'innodb_force_recovery' alternativ. Det här alternativet tvingar InnoDB-databasmotorn att starta utan några bakgrundsoperationer, vilket gör att du kan dumpa dina tabeller.

  1. Öppna din MySQL-konfigurationsfil (my.cnf) och lägg till följande i avsnittet [mysqld]:
[mysqld]

innodb_force_recovery=1

tjänst mysql omstart

Du kan starta innodb_force_recovery med värdet 1 och öka värdet vid behov. När du har initierat innodb-återställning, starta om din MySQL-server och dumpa sedan dina tabeller. Men i vissa situationer kan du behöva ställa in värdet till 4 till 6, vilket kan skada data.

Varning! Om du kan dumpa tabellerna med ett innodb_force_recovery=3 eller lägre värde, kan du säkert utföra återställningsprocessen. Att sätta innodb_force_recovery till ett värde större än 4 innebär dock risk för dataförlust.

  1. Om du kan starta din databas, kör följande mysqldump-kommando för att exportera alla databaser till en SQL-fil (d.v.s. en säkerhetskopia som innehåller alla satser för att återställa databasen):
mysqldump –alla-databaser –add-drop-databas –add-drop-table> mydump.sql
  1. Starta MySQL-tjänsten och försök sedan släppa databasen som innehåller de berörda tabellerna genom att använda kommandot DROP DATABASE. Om du inte kan släppa en databas, försök att ta bort den manuellt genom att utföra stegen nedan efter att ha stoppat MySQL-servern.
cd /var/lib/mysql

rm -rf

  1. När du har kört kommandot ovan, kommentera raden nedan i [mysqld] för att inaktivera InnoDB-återställning:
#innodb_force_recovery=…
  1. Spara alla ändringar du har gjort i my.cnf-filen och starta sedan din server.
service mysqld start
  1. Återställ databasen och tabellen från MySQL-dumpen (säkerhetskopieringsfil) som du skapade i steg 2:
mysql -u användare -p

Genom att utföra dessa steg återställs MySQL-databasen och dess tabeller. Om data fortfarande saknas måste du använda professionell programvara för reparation av MySQL-databas, såsom Stellar Repair for MySQL för att återställa din databas och återställa dess data. Programvaran kan reparera både InnoDB- och MyISAM-tabeller och hålla data intakt. Den stöder reparation av MySQL-tabeller på såväl Windows som Linux-system.

Slutsats

MySQL-databastabeller kan bli korrupta på grund av plötslig systemavstängning, serverkrasch, maskinvarufel, buggar i MySQL-kod, etc. Korruption i MySQL-tabellen resulterar i de fel som anges i den här artikeln. Du kan försöka reparera skadade MyISAM-tabeller genom att använda verktyget "myisamchk" eller tvinga InnoDB-återställning. Det kan dock ta lång tid att reparera MyISAM-tabeller och utföra InnoDB-återställning manuellt. Den manuella återställningsprocessen kan också leda till dataförlust. Ett bättre alternativ är att använda Stellar Repair för MySQL-programvara. Programvaran gör det möjligt att reparera både MyISAM- och InnoDB-databastabeller utan att göra några ändringar i originaldata.


  1. ASCII()-exempel – MySQL

  2. Hur man kör Opatch i icke interaktiv form

  3. I SQL Server, hur kan jag låsa en enskild rad på ett sätt som liknar Oracles SELECT FOR UPDATE WAIT?

  4. Hur man åtgärdar "Begäran COMMIT TRANSACTION har ingen motsvarande BEGIN TRANSACTION" i SQL Server