Hoe u een beschadigde MySQL-database tabel kunt repareren, stap voor stap

In het moderne wereld zijn bedrijven niet langer afhankelijk van een specifieke database server platform. Er zijn veel databaseplatforms beschikbaar die voldoende zijn om gematigde workloads en klantvereisten voor hoge beschikbaarheid en katastrofherstel te verwerken. MySQL is een van die databaseplatforms die veel functionaliteit biedt en hoge prestaties.

Net als andere RDBMS is MySQL ook gevoelig voor database- en tabelcorruptie. De recente uitgaande van Microsoft en CrowdStrike had ook impact op MySQL database servers. Door operating system fouten raakt de tabel van de database of zelfs de hele database corrupt.

In dit artikel zal ik u laten zien hoe we een tabel van de MySQL database kunnen corrompreinden en repareren. Dit artikel helpt DBAs om de fouten te simuleren en hen helpt de best mogelijke manier te bepalen om de corruptie van de MySQL tabel te herstellen of te repareren.

Inzicht in MySQL Database Corruptie

MySQL database corruptie kan zich manifesteren in verschillende manieren, inclusief:

Niet toegankelijke Tabelen

De gehele tabel of een specifieke subgroep van de tabel wordt ontoegankelijk. Als u probeert toegang tot de beschadigde tabel te krijgen, zult u fouten tegenkomen die verwijzen naar de corruptie van het indexbestand of het gegevensbestand van de tabel.

Fouten van Data Inconsistentie

Als de tabel beschadigd is, zal uw query in plaats van betekenisvolle data misschien wat ongepaste waarden of onconsistente of onvolledige resultaten teruggeven.

Onverwachte afsluitingen

In sommige gevallen kan MySQL crashen terwijl de tabel wordt aangetoond of terwijl back-ups worden uitgevoerd met behulp van mysqldump. Eenmaal had ik dit foutmelding bij het simuleren van het beschadigingsscenario. Ik had de gegevensbestand van een tabel beschadigd. Nadat ik de dienst had gestart, crashte de MySQL-dienst automatisch als ik probeerde de tabel te bereiken met een SELECT-opdracht.

Foutmeldingen tijdens databaseoperaties

Bij het toegangscontrole tot de beschadigde tabel kun je soms de volgende fouten tegenkomen:

Plain Text

 

Deze foutmeldingen geven aan dat het gegevensbestand of de geassocieerde indexbestanden beschadigd zijn.

Het is cruciaal om de oorsprong van de beschadiging te begrijpen om toekomstige optredens te voorkomen en de dataintegriteit te waarborgen.

Vereisten voor het herstellen van MySQL-tabellen

Voordat u probeert de tabellen te herstellen, zorg ervoor dat u de volgende beschikt:

  • Complete back-up van uw MySQL-database
  • Voldoende schijfruimte
  • Administratieve toegang tot de MySQL-server

Nu laten we de beschadiging van de tabel simuleren.

Beschadigde MySQL-tabel

Voordat we leren hoe de database wordt gerepareerd, zal eerst uitleg geven over hoe de database kan worden beschadigd. Voor de demonstratie heb ik een database genaamd “CorruptDB” op een MySQL database server gemaakt. Ik heb ook een tabel genaamd corrupt_table in de CorruptDB database gemaakt.

Hier is het code om een database en tabel aan te maken.

MySQL

 

Ik heb een miljoen records aan de tabel toegevoegd door de volgende query uit te voeren.

MySQL

 

Merk op dat de simulatie van tabelbeschadiging op mijn laptop is uitgevoerd. Probeer dit niet op productie, ontwikkelings- of enige andere omgeving. De tabel die ik in deze demonstratie gebruik maakte is aangemaakt met de MyISAM databaseengine. U kunt lezen over Alternatieve opslagmotoren om meer te leren over de database motoren van MySQL Server.

Ik heb de volgende stappen uitgevoerd om de tabel te beschadigen.

Stap 1: Stop MySQL Server Services

U moet de MySQL server stoppen. Om dat te doen, voer PowerShell als beheerder uit en voer de volgende commando uit.

Plain Text

 

Als alternatief, kunt u het ook vanuit Services stoppen.

Stap 2: Beschadig de indexbestand van de tabel

Nu moeten we het indexbestand van de tabel beschadigen. Wanneer u elke tabel maakt in de MyISAM databaseengine, worden er drie bestanden aangemaakt als u een tabel maakt met de MyISAM databaseengine.

  • MYD bestanden: Dit bestand bevat de echte data.
  • MYI bestanden: Dit is een indexbestand.
  • Frm bestanden: Het bestand bevat een tabelstructuur.

We zullen de indexbestanden corrompelen. De gegevensbestanden zijn gelegen op de standaardlocatie, namelijk “C:\ProgramData\MySQL\MySQL Server 8.0\Data\corruptdb.” Om de corrosie te bewerkstelligen, gebruiken we een hex-editor.

Download en installeer de hex-editor. Open de MYI-bestanden ermee. Het bestand lijkt op de volgende afbeelding:

Vervang de eerste 5 bytes door enkele willekeurige waarden. Sla het bestand op en sluit de editor.

Nu starten we de dienst en proberen we toegang tot de tabel te krijgen.

Stap 3: Start de MySQL-diensten en krijg toegang tot de tabel

Start eerst de MySQL-diensten door de volgende opdracht uit te voeren in PowerShell.

Plain Text

 

Zodra de diensten zijn gestart, voer u de volgende query uit op de MySQL commandolijn.

MySQL

 

De query gaf de volgende foutmelding weer:

De foutmelding duidt erop dat de index van de corrupt_table is corrompeld en moet worden hersteld.

Handmatige methodes om MySQL-tabellen te repareren

Er zijn bepaalde methodes die u kunt gebruiken om de corrompelde MySQL-tabel te repareren. De eerste methode is het gebruik van de check table en repair table commando’s.

Check Table and Repair Table Commands

U kunt de tabel herstellen met behulp van de ingebouwde MySQL-commando’s CHECK TABLE en REPAIR TABLE. Deze commando’s worden gebruikt om diagnose en herstel van elke MyISAM-tabel uit te voeren.

De ‘CHECK TABLE’-opdracht controleert de integriteit van de tabel. Hij controleert de tabelstructuur, indexen en gegevens op mogelijke corruptie en toont de details. De syntaxis is als volgt:

Plain Text

 

U kunt verschillende opties specificeren.

  1. QUICK: Deze optie controleert snel en identificeert problemen zoals beschadigde indexen.
  2. FAST: Hij controleert tabellen die niet correct zijn afgesloten.
  3. CHANGED: Deze optie controleert alleen die tabellen die zijn aangepast na de laatste CHECK TABLE-uitvoering.
  4. MEDIUM: Deze optie controleert de records en controleert of de koppelingen tussen de tabel en de gegevens correct zijn.
  5. EXTENDED: Deze optie doet een uitgebreid scan en controleert de tabelstructuur en inhoud.

In deze demo zal we een snel scan uitvoeren. Hier is de opdracht.

Plain Text

 

Screenshot:

Als u ziet in de bovenstaande screenshot, duidt de foutmelding op dat de index van de corrupt_table beschadigd is en moet worden gerepareerd.

We zullen de REPAIR TABLE-opdracht gebruiken om de corruptie in de tabel te repareren. De REPAIR TABLE-opdracht wordt gebruikt om de tabelstructuur en gegevens te herstellen van corruptie, vooral de tabellen met de MyISAM databaseengine. Indien de index van de tabel beschadigd is, herbouwt de REPAIR TABLE-opdracht de indexen.

De syntaxis van REPAIR TABLE is als volgt:

Plain Text

 

U kunt de volgende opties specificeren:

  • QUICK: Het herstelt alleen de indexbestanden van een tabel. Het accesses niet het gegevensbestand van een tabel.
  • UITGEREED: Wanneer we deze optie gebruiken, zal de opdracht een grondige reparatie uitvoeren. Hij repareert of herbouwt ook de indexbestanden door alle records van de tabel te scannen.

In deze demo hebben we de index van de tabel beschadigd; daarom zullen we de QUICK optie gebruiken. Voer het volgende commando uit.

Plain Text

 

Screenshot:

Zoals u in het bovenstaande scherm ziet, is de corrupt_table succesvol gerepareerd. Om te verifiëren, voer u het volgende query uit op MySQL Workbench:

MySQL

 

Query uitvoer:

Als u ziet, is de tabel nu toegankelijk.

Tabel herstellen met de mysqldump-opdracht

Het tweede methoden is om de gehele tabel vanuit een back-up te herstellen. Deze methode kan worden gebruikt als de tabel erg beschadigd is en niet kan worden gerepareerd met behulp van de REPAIR TABLE-opdracht.

Om een MySQL-tabel vanuit een back-up te herstellen, kunnen we de mysqldump-opdracht gebruiken. U kunt het artikel “mysqldump — Een database back-up programma” lezen om meer te leren over hoe u de mysqldump-opdracht kunt gebruiken. Het syntaxis voor het herstellen van de tabel is hieronder.

MySQL

 

In de syntaxis:

  • Gebruikersnaam: Voer de gebruikersnaam in die u gebruikt om verbinding te maken met de MySQL-database.
  • -p: Specificeer het wachtwoord. Als u het leeg laat, zal MySQL u om een wachtwoord vragen.
  • [database_name]: Specificeer de naam van de database waarin u probeert de tabel terug te halen.
  • Table_dump.sql: Geef de volledige gekwalificeerde naam van het back-upbestand op.

Voor de demonstratie heb ik een back-up gemaakt van de CorruptDB-database, die zich in de map C:\MySQLData\Backup bevindt.

Om de corrupt_table te herstellen, kunnen we het volgende commando gebruiken.

MySQL

 

Nadat het commando succesvol is uitgevoerd, kun je de tabel benaderen. Voer het volgende query uit om dit te verifiëren.

MySQL

 

Query-uitvoer:

Zoals je in het bovenstaande schermafbeelding ziet, is de tabel succesvol hersteld.

Met phpMyAdmin

U kunt ook de phpMyAdmin-tool gebruiken om elke beschadigde MySQL-database te repareren. phpMyAdmin is een grafische gebruikersinterface om MySQL en MariaDB te beheren en te onderhouden. Voor de demonstratie heb ik het op mijn laptop geinstalleerd.

  • Om de tabel te repareren, start phpMyAdmin en navigeer naar de database waarin de beschadigde tabel zit.
  • In het rechterpaneel kun je de lijst zien van de tabellen die zijn aangemaakt in de CorruptDB-database.
  • Selecteer Corrupt_table van de lijst en kies de optie Tabel repareren uit het dropdownmenu.

Hier is een schermafbeelding voor referentie:

Zodra de tabel is gerepareerd, zie je dat de status van de corrupt_table OK wordt. Hier is het schermafbeelding:

Conclusie

In dit artikel hebben we geleerd over de mogelijke redenen voor MySQL databasecorruptie en hoe deze te verhelpen. Ik heb een stapsgewijs proces uitgelegd om MySQL-tabellen te beschadigen met behulp van een hex-editor. Ik heb ook behandeld hoe ze te repareren met de CHECK TABLE en REPAIR TABLE commando’s. We hebben ook geleerd hoe de tabel te herstellen met behulp van het mysqldump hulpprogramma.

Het repareren van een beschadigde MySQL-databasetabel kan uitdagend zijn, maar met de juiste tools en methoden is het beheersbaar. Handmatige methoden bieden een basisoplossing, terwijl phpMyAdmin een uitgebreide en betrouwbare hersteloptie biedt. Zorg altijd voor regelmatige back-ups en onderhoud de gezondheid van uw database om het risico op corruptie te minimaliseren.

Source:
https://dzone.com/articles/repair-corrupt-mysql-database-tables-step-by-step