MySQL is een van de meest populaire open-source RDBMS (Relational Database Management Systems). Het is een integraal onderdeel van de snelgroeiende LAMP Stack en heeft een indrukwekkende schare fans opgebouwd onder ontwikkelaars en systeembeheerders. Vergeleken met niet-relationele databases, biedt SQL uitstekende functionaliteiten om gegevens effectief te ordenen, op te slaan en te beheren. De onderscheidende functionaliteiten voor tabelordening en de uitstekende mogelijkheden van de SQL-database maken het een voorkeurskeuze op alle niveaus van de organisatie, zowel groot als klein.
MySQL-tabellen kunnen in zeldzame gevallen beschadigd raken, wat aangeeft dat er een dergelijke fout is opgetreden en de daarin opgeslagen gegevens onleesbaar zijn. Wanneer u gegevens probeert te lezen uit een beschadigde tabel, crasht de server en geeft deze een fout of een lijst met fouten weer.
Mogelijke redenen voor beschadiging van MySQL-tabellen
Hieronder volgen enkele van de meest typische redenen voor beschadigde tabellen:
- MySQL-service crasht na herstart.
- De machine schakelt onverwacht uit als gevolg van een stroomstoring.
- Slecht geheugen of hardwarestoring.
- Softwarefouten in het OS of de SQL-code.
- MySQL sluit af tijdens het schrijven.
- Het systeem schakelt UIT tijdens het bijwerken van SQL.
Voordat u een tabel repareert waarvan u vermoedt dat deze beschadigd is, maakt u een back-up van uw gegevensmap. Dit helpt de kans op gegevensverlies te verkleinen. In deze beknopte handleiding leiden we u door de stappen voor het oplossen van problemen en het repareren van beschadigde tabellen in MySQL.
Vereisten
Om deze handleiding te volgen, heeft u het volgende nodig:
- De nieuwste versie van Ubuntu geïnstalleerd op uw systeem.
- Systeemgebruikers moeten beschikken over sudo-privileges.
- Als u problemen ondervindt bij de toegang tot uw sudo-account, overweeg dan het wijzigen van het MySQL root-wachtwoord.
- MySQL ingesteld op uw server.
Stap 1: MySQL-service stoppen en gegevensback-up maken
Stop eerst de MySQL-service met het systemctl-commando:
|
1 |
sudo systemctl stop mysql |
Na het stoppen van de SQL-service is de volgende stap het maken van back-ups van alle bestaande bestanden in een nieuwe map. Gebruik de standaard gegevensmap van Ubuntu /var/lib/mysql/ om alle systeemgegevens te kopiëren:
|
1 |
cp -r /var/lib/mysql /var/lib/mysql_bkp |
Step 2: Identify the Error
Vervolgens starten we ons onderzoek en identificeren we de beschadigde tabel. Als de tabel de MyISAM storage engine gebruikt, gebruik dan de CHECK TABLE-instructie en controleer de status van de tabel:
|
1 |
mysql> CHECK TABLE table_name; |
U ziet een bericht als uitvoer dat de beschadigde tabel of tabellen bevestigt.
Step 3: Repair the Corrupted Table
Als er een fout is op de MyISAM-tabel en u hebt deze geïdentificeerd, gebruik dan de REPAIR TABLE-instructie om de fout te herstellen:
|
1 |
mysql> REPAIR TABLE table_name; |
Als de reparatie succesvol was, zou u het volgende foutloze bericht als uitvoer moeten zien:
|
1 2 3 4 5 6 7 8 9 10 11 |
Output: +--------------------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------------------+--------+----------+----------+ | database_name.table_name | repair | status | OK | +--------------------------+--------+----------+----------+ |
Als u de fout echter opnieuw ziet optreden, volgt u het officiële document voor MySQL versie 8.0 om tabellen opnieuw op te bouwen of te repareren.
In tegenstelling tot de MyISAM storage engine, is het InnoDB-proces voor het repareren van tabellen anders in de InnoDB storage engine. InnoDB is de standaard storage engine in MySQL 8.0. Het beschikt over automatische controle op beschadigingen en reparatiebewerkingen. De MySQL InnoDB controleert op beschadigde pagina's door checksums uit te voeren op elke pagina die het leest. Als er een afwijking wordt gedetecteerd, stopt het automatisch de MySQL-server.
Kortom, er is zelden behoefte aan het repareren van InnoDB-tabellen. InnoDB beschikt over een crash-herstelmechanisme dat de meeste problemen kan oplossen via een herstart.
Probeer de MySQL-service opnieuw te starten om te zien of u toegang kunt krijgen tot de server:
|
1 |
sudo systemctl restart mysql |
Als het heropbouwen van een beschadigde InnoDB-tabel zelfs na de herstart mislukt, probeer dan de “Dump and Reload”-methode die wordt voorgesteld in de MySQL-documentatie. Deze methode houdt in dat u opnieuw toegang krijgt tot de beschadigde tabel met behulp van het mysqldump-hulpprogramma. Er moet een map worden gemaakt om de logische back-up van de tabel op te slaan en te bewaren. Zodra de fout is hersteld, wordt de tabel weer in de database geladen.
Stap 4: Gebruik de optie innodb_force_recovery
Als de server gecrasht of onbereikbaar blijft, probeer dan de force_recovery-optie in InnoDB te gebruiken. Het inschakelen (ON) van de force_recovery-optie is een uitstekende manier om MySQL-databases te herstellen. U kunt deze optie inschakelen door het bestand mysqld.cnf in de nano-teksteditor te bewerken:
|
1 |
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf |
Voeg de volgende regel toe onder de [mysqld]-sectie:

Sla het bestand op en sluit het na het herstarten van de MySQL-service.
Stap 5: Maak een mysqldump-bestand
Als u toegang kunt krijgen tot de beschadigde tabel, gebruik dan de mysqldump-optie om alle dumps in het nieuwe bestand te plaatsen. Geef het nieuwe bestand een naam naar keuze en zorg ervoor dat u de .sql-extensie aan het einde toevoegt. Hier noemen we het bestand demo.sql:
|
1 |
mysqldump database_name table_name > demo.sql |
Gebruik daarna de DROP TABLE-query om de tabel uit de database te verwijderen. U kunt de volgende syntaxis gebruiken om te voorkomen dat u de MySQL-prompt opnieuw moet openen:
|
1 |
mysql -u user -p --execute="DROP TABLE database_name.table_name" |
Herstel vervolgens de tabel met behulp van het zojuist gemaakte dumpdocument demo.sql:
|
1 |
mysql -u user -p --database=database_name < demo.sql |
U hebt uw beschadigde MySQL-tabel met succes hersteld en bent klaar om probleemloos met de database te werken.
Conclusie
Tabelbeschadigingen of onverwachte systeemcrashes kunnen optreden als u met een grote hoeveelheid gegevens werkt. Het is vermeldenswaard dat de MySQL InnoDB storage engine toleranter is voor fouten dan de vorige MyISAM engine. Tabellen die gebruikmaken van de InnoDB storage engine kunnen nog steeds beschadigd raken, hoewel het risico op tabelbeschadiging en storingen aanzienlijk is verminderd dankzij de automatische herstelfuncties.
Tot slot zijn er veel onderwerpen en handleidingen over databases die u kunt ontdekken op onze blog:
- MySQL installeren op CentOS 7
- MySQL-gebruiker — Aanmaken en machtigingen verlenen
- Replicatie instellen in MySQL op Ubuntu
Veel computerplezier!
Reacties
Nog geen reacties. Wees de eerste.