sql >> Databasteknik >  >> RDS >> Mysql

Hur man reparerar MySQL-databaser och tabeller

Den här artikeln beskriver hur du reparerar MySQL-tabeller och databaser. När en databas tabeller växer kan fel uppstå då och då. När de gör det innehåller MySQL flera verktyg som du kan använda för att kontrollera och reparera databastabeller. För att göra detta, följ procedurerna nedan i den ordning som de visas.

Den här artikeln gäller endast produkter som anges i Artikelinformation sidofältet. Du måste ha root-åtkomst till servern för att följa dessa procedurer.

Steg 1:Säkerhetskopiera databaserna

Innan du försöker reparera någon databas bör du säkerhetskopiera den först. För att säkerhetskopiera alla filer från alla dina databaser, följ dessa steg:

  1. Logga in på din server med SSH.
  2. Stoppa MySQL-servern med lämpligt kommando för din Linux-distribution:
    • För CentOS och Fedora, skriv:
      service mysqld stop
    • För Debian och Ubuntu, skriv:

      service mysql stop
  3. Skriv följande kommando:

    cp -rfv /var/lib/mysql /var/lib/mysql$(date +%s)
    Detta kommando kopierar alla filer från alla dina databaser till ett katalognamn baserat på den aktuella tiden (mer exakt, antalet sekunder som förflutit sedan 1 januari 1970). Detta säkerställer att varje säkerhetskopia av databas lagras i en katalog som har ett unikt namn. För extra skydd kan (och bör) du säkerhetskopiera databasfilerna till en fjärrplats som inte finns på servern.
  4. Starta om MySQL-servern med lämpligt kommando för din Linux-distribution:

    • För CentOS och Fedora, skriv:
      service mysqld start
    • För Debian och Ubuntu, skriv:

      service mysql start

Steg 2:Kör mysqlcheck

När du har säkerhetskopierat dina databaser är du redo att börja felsöka. mysqlcheck programmet låter dig kontrollera och reparera databaser medan MySQL körs. Den här funktionen är användbar när du vill arbeta med en databas utan att stoppa hela MySQL-tjänsten.

Dessutom mysqlcheck fungerar på tabeller som använder MyISAM- eller InnoDB-databasmotorerna.

För information om hur man avgör vilken lagringsmotor en databastabell använder, se den här artikeln.

För att använda mysqlcheck , följ dessa steg:

  1. Som rotanvändare skriver du följande kommando:
    cd /var/lib/mysql
  2. Skriv följande kommando och ersätt databasen med namnet på databasen som du vill kontrollera:

    mysqlcheck database

    Det föregående kommandot kontrollerar alla tabeller i den angivna databasen. Alternativt, för att kontrollera en specifik tabell i en databas, skriv följande kommando. Ersätt databas med namnet på databasen och ersätt tabellen med namnet på tabellen som du vill kontrollera:

    mysqlcheck database table
  3. Mysqlcheck kontrollerar den angivna databasen och tabellerna. Om en tabell klarar kontrollen mysqlcheck visar OK för bordet. Men om mysqlcheck rapporterar ett fel för en tabell, skriv följande kommando för att försöka reparera den. Ersätt databasen med databasnamnet och tabellen med tabellnamnet:

    mysqlcheck -r database table
  4. Om mysqlcheck inte lyckas reparera tabellen eller tabellerna, gå till följande procedur.

Steg 3:Kör motorspecifik diagnostik

Om du kör mysqlcheck inte löser problemet, nästa steg är att köra diagnostik som är specifik för den motor som används av databastabellen eller -tabellerna. Följ lämplig procedur nedan för din tabells databaslagringsmotor.

Mer information om hur du avgör vilken lagringsmotor dina databastabeller använder finns i den här artikeln.
Reparera MyISAM-tabeller med myisamchk

Om du använder MyISAM-lagringsmotorn för en tabell kan du köra myisamchk program för att reparera det. För att göra detta, följ dessa steg:

myisamchk programmet fungerar bara för tabeller som använder MyISAM-lagringsmotorn. Det fungerar inte för InnoDB-motorn.
  1. Stoppa MySQL-servern med lämpligt kommando för din Linux-distribution:
    • För CentOS och Fedora, skriv:
      service mysqld stop
    • För Debian och Ubuntu, skriv:

      service mysql stop
  2. Skriv följande kommando:

    cd /var/lib/mysql
  3. Byt till katalogen där databasen finns. Till exempel om databasen heter kunder , skriv cd-kunder.
  4. Skriv följande kommando och ersätt tabellen med namnet på tabellen som du vill kontrollera:

    myisamchk table

    För att kontrollera alla tabeller i en databas, skriv följande kommando:

    myisamchk *.MYI

    Om det föregående kommandot inte fungerar kan du försöka ta bort temporära filer som kan hindra myisamchk från att fungera korrekt. För att göra detta, byt tillbaka till /var/lib/mysql katalog och skriv sedan följande kommando:

    ls */*.TMD
    

    Om det finns några .TMD-filer i listan skriver du följande kommando för att radera dem:

    rm */*.TMD

    Försök sedan att köra myisamchk igen.

  5. För att försöka reparera en tabell, skriv följande kommando och ersätter tabell med namnet på bordet som du vill reparera:

    myisamchk --recover table
  6. Starta om MySQL-servern med lämpligt kommando för din Linux-distribution:

    • För CentOS och Fedora, skriv:
      service mysqld start
    • För Debian och Ubuntu, skriv:

      service mysql start
  7. Testa den eller de reparerade tabellerna.
Köra InnoDB-återställningsprocessen

Om du använder InnoDB-lagringsmotorn för en databastabell kan du köra InnoDB-återställningsprocessen. För att göra detta, följ dessa steg:

  1. Använd din föredragna textredigerare för att öppna my.cnf filen på din server. Platsen för my.cnf fil beror på din Linux-distribution:
    • På CentOS och Fedora, my.cnf filen finns i /etc katalog.
    • På Debian och Ubuntu, my.cnf filen finns i /etc/mysql katalog.
  2. I my.cnf fil, leta reda på [mysqld] avsnitt.
  3. Lägg till följande rad i [mysqld] sektion:

    innodb_force_recovery=4
  4. Spara ändringarna i my.cnf fil och starta sedan om MySQL-servern med lämpligt kommando för din Linux-distribution:

    • För CentOS och Fedora, skriv:
      service mysqld restart
    • För Debian och Ubuntu, skriv:

      service mysql restart
  5. Skriv följande kommando för att exportera alla databaser till databases.sql fil:

    mysqldump --all-databases --add-drop-database --add-drop-table --routines > databases.sql
  6. Starta mysql program och försök sedan släppa den eller de berörda databaserna med DROP DATABASE kommando.

    Om MySQL inte kan släppa en databas kan du radera den manuellt i steg 8 nedan efter att du har stoppat MySQL-servern.
  7. Stoppa MySQL-servern med lämpligt kommando för din Linux-distribution:

    • För CentOS och Fedora, skriv:
      service mysqld stop
    • För Debian och Ubuntu, skriv:

      service mysql stop
  8. Om du inte kunde släppa en databas i steg 6, skriv följande kommandon för att radera den manuellt. Ersätt databasen med namnet på databasen som du vill ta bort:

    cd /var/lib/mysql
    rm -rf database
    Se till att du inte tar bort mysql eller performance_schema kataloger!
  9. Använd din föredragna textredigerare för att öppna my.cnf fil på din server och kommentera sedan följande rad i [mysqld] avsnitt som visas:

    #innodb_force_recovery=4
    Detta inaktiverar InnoDB återställningsläge.
  10. Spara ändringarna i my.cnf fil och starta sedan MySQL-servern med lämpligt kommando för din Linux-distribution:

    • För CentOS och Fedora, skriv:
      service mysqld start
    • För Debian och Ubuntu, skriv:

      service mysql start
  11. Skriv följande kommando för att återställa databaserna från säkerhetskopian du skapade i steg 5:

    mysql < databases.sql
  12. Testa den återställda databasen.

Mer information

  • För mer information om mysqlcheck , besök https://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html.
  • För mer information om myisamchk , besök https://dev.mysql.com/doc/refman/5.5/en/myisamchk.html.

  1. När ska jag använda CROSS APPLY över INNER JOIN?

  2. Hur man ändrar kolumndatatyp från tecken till numerisk i PostgreSQL 8.4

  3. Hur ställer du in autocommit i en SQL Server-session?

  4. Varför ingen utdata när PLSQL Anonymous-blockeringen är klar?