sql >> Database >  >> RDS >> Mysql

Hoe MySQL-databases en tabellen te repareren

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:

  1. Log in op uw server met SSH.
  2. 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
  3. 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.
  4. 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

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:

  1. Typ als rootgebruiker het volgende commando:
    cd /var/lib/mysql
  2. 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
  3. 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
  4. 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.
  1. 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
  2. Typ de volgende opdracht:

    cd /var/lib/mysql
  3. Verander naar de directory waar de database zich bevindt. Als de database bijvoorbeeld klanten . heet , typ cd-klanten.
  4. 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.

  5. 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
  6. 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
  7. 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:

  1. 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.
  2. In de mijn.cnf bestand, zoek de [mysqld] sectie.
  3. Voeg de volgende regel toe aan de [mysqld] sectie:

    innodb_force_recovery=4
  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
  5. 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
  6. 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.
  7. 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
  8. 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!
  9. 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.
  10. 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
  11. Typ de volgende opdracht om de databases te herstellen vanuit het back-upbestand dat u in stap 5 hebt gemaakt:

    mysql < databases.sql
  12. 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.

  1. MySQL dynamische-pivot

  2. Postgres gegevenstype cast

  3. Een MySQL-database repareren in cPanel

  4. Oracle SQL-volgorde in subquery-problemen!