sql >> Database teknologi >  >> RDS >> Mysql

Gratis metoder til at reparere korrupt MySQL-database

Når en MySQL-database bliver korrupt, kan du undre dig over, hvorfor databasen blev ødelagt i første omgang. Dette indlæg vil skitsere mulige årsager bag databasekorruption, før du besvarer spørgsmålet:hvordan reparerer man en korrupt MySQL-database?

Årsager bag MySQL-databasekorruption

En MySQL-database kan blive korrupt på grund af en af ​​disse årsager:

  • Pludselig serverlukning
  • Defekt i den hardware, der bruges til at gemme og hente data som diskundersystem, diskcontrollere, drivere osv.
  • 'mysqld'-processen afbrydes, mens en løbende opdatering er i gang
  • Softwarefejl

Det kan være udfordrende at finde årsagen til en beskadiget database. Uanset hvad årsagen kan være, er den bekymring, du bør have, hvordan du reparerer den korrupte MySQL-database.

Hvordan reparerer man korrupt MySQL-database?

Det første du skal se på er den fejlmeddelelse du får. Følgende er nogle fejlmeddelelser, du kan støde på, når MySQL-databasen bliver ødelagt:

Fejl 144: Tabellen er gået ned, og den sidste reparation mislykkedes

Fejl 141: Dupliker unik nøgle eller begrænsning ved skrivning eller opdatering

Fejl 136: Ikke mere plads i indeksfilen

Fejl 134: Posten var allerede slettet

Fejl 126: Indeksfilen er gået ned/forkert filformat

Fejl: Kunne ikke finde filen 'wtlicensemanager.dll'

Hvis du vil udføre reparationen gratis, har du to muligheder:

  1. Gør det manuelt.
  2. Gør det ved hjælp af software ved hjælp af prøveperioden.

En databasegendannelsessoftware kan gøre et bedre og hurtigere stykke arbejde med at reparere den beskadigede database.

Her er et softwareprogram, som du kan bruge til at reparere den beskadigede MySQL-database:

Dette MySQL-databasereparationsværktøj reparerer database oprettet ved hjælp af både InnoDB- og MyISAM-databasemotorer af MySQL. Du kan downloade demoversionen af ​​SQL-reparationsværktøjet for at få vist en genskabelig database, før du gemmer dem.

Nøglefunktioner:

  • Kan gendanne MySQL-database på Windows- og Linux-systemer.
  • Genopretter InnoDB-filer (.ibdata, .ibd og .frm) og MyISAM-filer (myd, .myi og .frm)
  • Gendannelser databaseobjekter som tabeller, tabelegenskaber, datatyper, visninger, triggere osv.
  • Tillader selektiv gendannelse af databasekomponenter

Hvordan reparerer man korrupt MySQL-database manuelt?

Der er to typer lagringsmotorer i MySQL:InnoDB og MyISAM. InnoDB-tabellen indeholder FRM-, IBDATA- og IDB-filer, mens MyISAM-tabellen indeholder FRM-, MYD- og MYI-filer.

Før vi fortsætter

Her er et par ting, du bør overveje, før du forsøger manuel gendannelse:

  • Genstart ikke serveren

Når du genstarter serveren, kan serveren sætte den beskadigede database i mistænkelig tilstand. Dette vil slukke for databasen. Det kan også skabe fejl under forbindelse til databasen. Du bør forsøge at gendanne uden at genstarte serveren.

  • Brug enkeltbrugertilstand

Sørg for, at du er den eneste bruger, der er tilsluttet databasen. Enkeltbrugertilstanden giver dig hele kontrollen og eliminerer andre brugeres interferens.

  • Opgrader ikke MySQL

Du kan tænke på at opdatere MySQL-databasen for at reparere de beskadigede filer. Men dette er ikke tilfældet. Opgradering kan forårsage permanent datatab.

  • Tag en sikkerhedskopi af den beskadigede MySQL-database

Det er vigtigt at have en sikkerhedskopi af den beskadigede fil, da der kan være fejl, der kan få dig til at miste data. Der er ingen garanti for, at dine manuelle trin ikke vil påvirke de sunde filer. Så det er sikkert at have en sikkerhedskopi, før du forsøger manuel gendannelse.

For at tage backup skal du bruge følgende kommando:

mysqldump db_name> database_name.sql

Indtast blot dit databasenavn i stedet for databasenavn.

Hvis ovenstående ikke virker, så prøv følgende:

mysqldump –u[brugernavn] –p[adgangskode] [databasenavn]> [dump_fil].sql 

Der er en anden måde at sikkerhedskopiere databasen på:

service mysqld stop

cp -r /var/lib/mysql /var/lib/mysql_bkp

Nu hvor vi har sikkerhedskopien, kan vi forsøge at reparere den korrupte MySQL-database.

Hvordan gendannes MySQL-database manuelt?

Reparation af MyISAM-database

Hvis du bruger MyISAM database storage engine til din database tabel, kan du bruge følgende kommandoer til at reparere tabellen:

Mysqlcheck

Hvis din MySQL-server kører, skal du køre følgende mysqlcheck-kommando for at reparere din tabel:

mysqlcheck -r [databasenavn]

Sørg for at erstatte 'databasenavn' med navnet på din database.

Myisamchk

Hvis serveren ikke kører, kan du prøve at reparere databasetabellen ved at bruge kommandoen myisamchk:

Bemærk: Før du kører denne kommando, skal du sørge for, at serveren ikke har nogen tabeller åbne.

myisamchk tabelnavn

Reparer tabelnavnet med tabelnavnet i dit tilfælde. Denne kommando retter automatisk din tabel.

For at genstarte serveren skal du skrive følgende:

service mysqld start

Force InnoDB Recovery

Du bliver nødt til at udføre InnoDB force recovery for at udtrække data fra en beskadiget InnoDB-databasetabel.

Trin 1: Først skal du åbne filen my.cnf.

Find [mysqld]-sektionen i denne fil.

Tilføj følgende linje til dette afsnit:

innodb_force_recovery=1

Gem nu konfigurationsfilen og genstart MySQL-serveren. Du kan indstille værdien af ​​innodb_force_recovery fra 1 til 6. En værdi ud over 4 anbefales dog ikke, da det kan ødelægge dataene.

Trin 2: Dump tabeldataene i en ny fil.

For at gøre det skal du bruge følgende kommando:

mysqldump –u bruger –p db_navn tabelnavn> single_dbtable_dump.sql

Trin 3: Slip den korrupte tabel fra databasen.

mysql –u bruger –p –execute=”DROP TABLE db_name.table_name”

Trin 4: Gendan tabellen fra dumpfilen.

mysql –u bruger –p

Trin 5: Når filerne er repareret, skal du deaktivere kraftgendannelsestilstanden med følgende kommando:

#innodb_force_recovery=…

Nu kan du genstarte MySQL-tjenesten i normal tilstand.

Vi håber, at ovenstående metoder vil hjælpe dig med at reparere den korrupte MySQL-database.


  1. Måder at vide, hvordan man håndterer databasekorruption i SQL Server

  2. Er SQL Server Unique Key også et indeks?

  3. Hvordan formindsker jeg min SQL Server-database?

  4. Hvorfor bruge en JOIN-klausul versus en WHERE-betingelse?