In dit artikel wordt beschreven hoe u MySQL-tabellen en -databases herstelt. Naarmate de tabellen van een database groeien, kunnen er van tijd tot tijd fouten optreden. Als ze dat doen, bevat MySQL verschillende tools die u kunt gebruiken om databasetabellen te controleren en te repareren. Volg hiervoor de onderstaande procedures in de volgorde waarin ze verschijnen.
Dit artikel is alleen van toepassing op producten die worden vermeld in de Artikeldetails zijbalk. U moet root-toegang tot de server hebben om deze procedures te volgen.Stap 1:Back-up maken van de databases
Voordat u een database probeert te herstellen, moet u er eerst een back-up van maken. Volg deze stappen om een back-up te maken van alle bestanden uit al uw databases:
- Log in op uw server met SSH.
- Stop de MySQL-server met de juiste opdracht voor uw Linux-distributie:
- Voor CentOS en Fedora typt u:
service mysqld stop
-
Typ voor Debian en Ubuntu:
service mysql stop
- Voor CentOS en Fedora typt u:
-
Typ de volgende opdracht:
cp -rfv /var/lib/mysql /var/lib/mysql$(date +%s)
Deze opdracht kopieert alle bestanden van al uw databases naar een mapnaam op basis van de huidige tijd (meer precies, het aantal seconden dat is verstreken sinds 1 januari 1970). Dit zorgt ervoor dat elke databaseback-up wordt opgeslagen in een map met een unieke naam. Voor extra bescherming kunt (en moet) u een back-up maken van de databasebestanden naar een externe locatie die niet op de server staat. -
Start de MySQL-server opnieuw met de juiste opdracht voor uw Linux-distributie:
- Voor CentOS en Fedora typt u:
service mysqld start
-
Typ voor Debian en Ubuntu:
service mysql start
- Voor CentOS en Fedora typt u:
Stap 2:mysqlcheck uitvoeren
Nadat u een back-up van uw databases hebt gemaakt, bent u klaar om te beginnen met het oplossen van problemen. De mysqlcheck programma stelt u in staat om databases te controleren en te repareren terwijl MySQL actief is. Deze functie is handig als u aan een database wilt werken zonder de hele MySQL-service te stoppen.
Bovendien, mysqlcheck werkt op tabellen die de MyISAM- of InnoDB-database-engines gebruiken.
Raadpleeg dit artikel voor informatie over hoe u kunt bepalen welke opslagengine een databasetabel gebruikt.mysqlcheck gebruiken , volg deze stappen:
- Typ als rootgebruiker het volgende commando:
cd /var/lib/mysql
-
Typ de volgende opdracht en vervang database door de naam van de database die u wilt controleren:
mysqlcheck database
De vorige opdracht controleert alle tabellen in de opgegeven database. U kunt ook de volgende opdracht typen om een specifieke tabel in een database te controleren. Vervang database door de naam van de database en vervang tabel door de naam van de tabel die u wilt controleren:
mysqlcheck database table
-
Mysqlcheck controleert de opgegeven database en tabellen. Als een tafel de controle doorstaat, mysqlcheck geeft OK . weer voor de tafel. Als echter mysqlcheck een fout voor een tabel meldt, typt u de volgende opdracht om te proberen deze te herstellen. Vervang database door de databasenaam en tabel door de tabelnaam:
mysqlcheck -r database table
- Als mysqlcheck kan de tafel of tabellen niet succesvol herstellen, ga naar de volgende procedure.
Stap 3:Motorspecifieke diagnostiek uitvoeren
Als mysqlcheck wordt uitgevoerd het probleem niet oplost, is de volgende stap het uitvoeren van diagnoses die specifiek zijn voor de engine die door de databasetabel of tabellen wordt gebruikt. Volg de juiste procedure hieronder voor de database-opslagengine van uw tabel.
Raadpleeg dit artikel voor informatie over hoe u kunt bepalen welke opslagengine uw databasetabellen gebruiken.MyISAM-tabellen repareren met myisamchk
Als u de MyISAM-opslagengine voor een tabel gebruikt, kunt u de myisamchk uitvoeren programma om het te repareren. Volg hiervoor deze stappen:
De myisamchk programma werkt alleen voor tabellen die de MyISAM-opslagengine gebruiken. Het werkt niet voor de InnoDB-engine.- Stop de MySQL-server met de juiste opdracht voor uw Linux-distributie:
- Voor CentOS en Fedora typt u:
service mysqld stop
-
Typ voor Debian en Ubuntu:
service mysql stop
- Voor CentOS en Fedora typt u:
-
Typ de volgende opdracht:
cd /var/lib/mysql
- Verander naar de directory waar de database zich bevindt. Als de database bijvoorbeeld klanten . heet , typ cd-klanten.
-
Typ de volgende opdracht en vervang tabel door de naam van de tabel die u wilt controleren:
myisamchk table
Typ de volgende opdracht om alle tabellen in een database te controleren:
myisamchk *.MYI
Als de vorige opdracht niet werkt, kunt u proberen tijdelijke bestanden te verwijderen die myisamchk mogelijk belemmeren van correct lopen. Ga hiervoor terug naar de /var/lib/mysql directory en typ het volgende commando:
ls */*.TMD
Als er .TMD-bestanden in de lijst staan, typt u de volgende opdracht om ze te verwijderen:
rm */*.TMD
Probeer vervolgens myisamchk . uit te voeren nogmaals.
-
Om te proberen een tabel te repareren, typt u de volgende opdracht en vervangt u table met de naam van de tabel die u wilt repareren:
myisamchk --recover table
-
Start de MySQL-server opnieuw met de juiste opdracht voor uw Linux-distributie:
- Voor CentOS en Fedora typt u:
service mysqld start
-
Typ voor Debian en Ubuntu:
service mysql start
- Voor CentOS en Fedora typt u:
- Test de gerepareerde tafel of tafels.
Het InnoDB-herstelproces uitvoeren
Als u de InnoDB-opslagengine voor een databasetabel gebruikt, kunt u het InnoDB-herstelproces uitvoeren. Volg hiervoor deze stappen:
- Gebruik de teksteditor van uw voorkeur om de my.cnf . te openen bestand op uw server. De locatie van de my.cnf bestand hangt af van je Linux-distributie:
- Op CentOS en Fedora, de my.cnf bestand bevindt zich in de /etc directory.
- Op Debian en Ubuntu, de my.cnf bestand bevindt zich in de /etc/mysql directory.
- In de mijn.cnf bestand, zoek de [mysqld] sectie.
-
Voeg de volgende regel toe aan de [mysqld] sectie:
innodb_force_recovery=4
-
Sla de wijzigingen op in de my.cnf bestand en start vervolgens de MySQL-server opnieuw met de juiste opdracht voor uw Linux-distributie:
- Voor CentOS en Fedora typt u:
service mysqld restart
-
Typ voor Debian en Ubuntu:
service mysql restart
- Voor CentOS en Fedora typt u:
-
Typ de volgende opdracht om alle databases te exporteren naar de databases.sql het dossier:
mysqldump --all-databases --add-drop-database --add-drop-table --routines > databases.sql
-
Start de mysql programma, en probeer dan de betrokken database of databases te verwijderen met behulp van de DROP DATABASE opdracht.
Als MySQL een database niet kan verwijderen, kunt u deze handmatig verwijderen in stap 8 hieronder nadat u de MySQL-server hebt gestopt.
-
Stop de MySQL-server met de juiste opdracht voor uw Linux-distributie:
- Voor CentOS en Fedora typt u:
service mysqld stop
-
Typ voor Debian en Ubuntu:
service mysql stop
- Voor CentOS en Fedora typt u:
-
Als u in stap 6 een database niet kon verwijderen, typt u de volgende opdrachten om deze handmatig te verwijderen. Vervang database door de naam van de database die u wilt verwijderen:
cd /var/lib/mysql rm -rf database
Zorg ervoor dat u de mysql . niet verwijdert of performance_schema mappen! -
Gebruik de teksteditor van uw voorkeur om de my.cnf . te openen bestand op uw server, en becommentarieer vervolgens de volgende regel in de [mysqld] sectie zoals weergegeven:
#innodb_force_recovery=4
Hiermee wordt de InnoDB-herstelmodus uitgeschakeld. -
Sla de wijzigingen op in de my.cnf bestand en start vervolgens de MySQL-server met de juiste opdracht voor uw Linux-distributie:
- Voor CentOS en Fedora typt u:
service mysqld start
-
Typ voor Debian en Ubuntu:
service mysql start
- Voor CentOS en Fedora typt u:
-
Typ de volgende opdracht om de databases te herstellen vanuit het back-upbestand dat u in stap 5 hebt gemaakt:
mysql < databases.sql
- Test de herstelde database.
Meer informatie
- Voor meer informatie over mysqlcheck , ga naar https://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html.
- Voor meer informatie over myisamchk , ga naar https://dev.mysql.com/doc/refman/5.5/en/myisamchk.html.