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:
- Gør det manuelt.
- 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.