Mysql
 sql >> Database >  >> RDS >> Mysql

Come riparare database e tabelle MySQL

Questo articolo descrive come riparare tabelle e database MySQL. Man mano che le tabelle di un database crescono, di tanto in tanto possono verificarsi errori. Quando lo fanno, MySQL include diversi strumenti che puoi utilizzare per controllare e riparare le tabelle del database. Per fare ciò, segui le procedure seguenti nell'ordine in cui appaiono.

Questo articolo si applica solo ai prodotti elencati nei Dettagli articolo barra laterale. È necessario disporre dell'accesso come root al server per seguire queste procedure.

Passaggio 1:backup dei database

Prima di tentare di riparare qualsiasi database, è necessario eseguirne prima il backup. Per eseguire il backup di tutti i file di tutti i database, segui questi passaggi:

  1. Accedi al tuo server utilizzando SSH.
  2. Arresta il server MySQL utilizzando il comando appropriato per la tua distribuzione Linux:
    • Per CentOS e Fedora, digita:
      service mysqld stop
    • Per Debian e Ubuntu, digita:

      service mysql stop
  3. Digita il seguente comando:

    cp -rfv /var/lib/mysql /var/lib/mysql$(date +%s)
    Questo comando copia tutti i file da tutti i tuoi database in un nome di directory basato sull'ora corrente (più precisamente, il numero di secondi trascorsi dal 1 gennaio 1970). Ciò garantisce che ogni backup del database sia archiviato in una directory con un nome univoco. Per una maggiore protezione, puoi (e dovresti) eseguire il backup dei file del database in una posizione remota non sul server.
  4. Riavvia il server MySQL utilizzando il comando appropriato per la tua distribuzione Linux:

    • Per CentOS e Fedora, digita:
      service mysqld start
    • Per Debian e Ubuntu, digita:

      service mysql start

Fase 2:esecuzione di mysqlcheck

Dopo aver eseguito il backup dei database, sei pronto per iniziare la risoluzione dei problemi. Il mysqlcheck il programma ti consente di controllare e riparare i database mentre MySQL è in esecuzione. Questa funzione è utile quando vuoi lavorare su un database senza interrompere l'intero servizio MySQL.

Inoltre, mysqlcheck funziona su tabelle che utilizzano i motori di database MyISAM o InnoDB.

Per informazioni su come determinare quale motore di archiviazione sta utilizzando una tabella di database, vedere questo articolo.

Per utilizzare mysqlcheck , segui questi passaggi:

  1. Come utente root, digita il seguente comando:
    cd /var/lib/mysql
  2. Digitare il seguente comando, sostituendo database con il nome del database che si desidera controllare:

    mysqlcheck database

    Il comando precedente controlla tutte le tabelle nel database specificato. In alternativa, per controllare una tabella specifica in un database, digitare il comando seguente. Sostituisci database con il nome del database e sostituisci tabella con il nome della tabella che desideri controllare:

    mysqlcheck database table
  3. Mysqlcheck controlla il database e le tabelle specificati. Se una tabella supera il controllo, mysqlcheck visualizza OK per la tavola. Tuttavia, se mysqlcheck segnala un errore per una tabella, digita il seguente comando per provare a ripararlo. Sostituisci database con il nome del database e la tabella con il nome della tabella:

    mysqlcheck -r database table
  4. Se mysqlcheck impossibile riparare correttamente la tabella o le tabelle, passare alla procedura seguente.

Fase 3:esecuzione della diagnostica specifica del motore

Se si esegue mysqlcheck non risolve il problema, il passaggio successivo consiste nell'eseguire la diagnostica specifica per il motore utilizzato dalla tabella o dalle tabelle del database. Segui la procedura appropriata di seguito per il motore di archiviazione del database della tua tabella.

Per informazioni su come determinare il motore di archiviazione utilizzato dalle tabelle del database, vedere questo articolo.
Riparazione di tabelle MyISAM con myisamchk

Se stai utilizzando il motore di archiviazione MyISAM per una tabella, puoi eseguire myisamchk programma per ripararlo. Per fare ciò, segui questi passaggi:

Il myisamchk il programma funziona solo per le tabelle che utilizzano il motore di archiviazione MyISAM. Non funziona per il motore InnoDB.
  1. Arresta il server MySQL utilizzando il comando appropriato per la tua distribuzione Linux:
    • Per CentOS e Fedora, digita:
      service mysqld stop
    • Per Debian e Ubuntu, digita:

      service mysql stop
  2. Digita il seguente comando:

    cd /var/lib/mysql
  3. Passa alla directory in cui si trova il database. Ad esempio, se il database è denominato clienti , digita cd clienti.
  4. Digita il seguente comando, sostituendo table con il nome della tabella che vuoi controllare:

    myisamchk table

    Per controllare tutte le tabelle in un database, digitare il comando seguente:

    myisamchk *.MYI

    Se il comando precedente non funziona, puoi provare a eliminare i file temporanei che potrebbero impedire myisamchk dal funzionare correttamente. Per fare ciò, torna a /var/lib/mysql directory, quindi digita il seguente comando:

    ls */*.TMD
    

    Se sono elencati file .TMD, digita il seguente comando per eliminarli:

    rm */*.TMD

    Quindi prova a eseguire myisamchk di nuovo.

  5. Per provare a riparare una tabella, digita il seguente comando, sostituendo tabella con il nome della tabella che si vuole riparare:

    myisamchk --recover table
  6. Riavvia il server MySQL utilizzando il comando appropriato per la tua distribuzione Linux:

    • Per CentOS e Fedora, digita:
      service mysqld start
    • Per Debian e Ubuntu, digita:

      service mysql start
  7. Testare la tabella o le tabelle riparate.
Esecuzione del processo di ripristino di InnoDB

Se stai utilizzando il motore di archiviazione InnoDB per una tabella di database, puoi eseguire il processo di ripristino di InnoDB. Per fare ciò, segui questi passaggi:

  1. Utilizza il tuo editor di testo preferito per aprire my.cnf file sul tuo server. La posizione di my.cnf file dipende dalla tua distribuzione Linux:
    • Su CentOS e Fedora, my.cnf si trova in /etc directory.
    • Su Debian e Ubuntu, my.cnf si trova in /etc/mysql directory.
  2. Nel my.cnf individua il file [mysqld] sezione.
  3. Aggiungi la seguente riga a [mysqld] sezione:

    innodb_force_recovery=4
  4. Salva le modifiche in my.cnf file, quindi riavvia il server MySQL utilizzando il comando appropriato per la tua distribuzione Linux:

    • Per CentOS e Fedora, digita:
      service mysqld restart
    • Per Debian e Ubuntu, digita:

      service mysql restart
  5. Digitare il comando seguente per esportare tutti i database in databases.sql file:

    mysqldump --all-databases --add-drop-database --add-drop-table --routines > databases.sql
  6. Avvia mysql programma, quindi provare a eliminare il database o i database interessati utilizzando il DROP DATABASE comando.

    Se MySQL non è in grado di eliminare un database, puoi eliminarlo manualmente al passaggio 8 di seguito dopo aver arrestato il server MySQL.
  7. Arresta il server MySQL usando il comando appropriato per la tua distribuzione Linux:

    • Per CentOS e Fedora, digita:
      service mysqld stop
    • Per Debian e Ubuntu, digita:

      service mysql stop
  8. Se non è stato possibile eliminare un database nel passaggio 6, digitare i seguenti comandi per eliminarlo manualmente. Sostituisci database con il nome del database che desideri eliminare:

    cd /var/lib/mysql
    rm -rf database
    Assicurati di non eliminare mysql o schema_performance directory!
  9. Usa il tuo editor di testo preferito per aprire my.cnf sul tuo server, quindi commenta la riga seguente in [mysqld] sezione come mostrato:

    #innodb_force_recovery=4
    Questo disabilita la modalità di ripristino di InnoDB.
  10. Salva le modifiche in my.cnf file, quindi avvia il server MySQL utilizzando il comando appropriato per la tua distribuzione Linux:

    • Per CentOS e Fedora, digita:
      service mysqld start
    • Per Debian e Ubuntu, digita:

      service mysql start
  11. Digitare il comando seguente per ripristinare i database dal file di backup creato nel passaggio 5:

    mysql < databases.sql
  12. Verifica il database ripristinato.

Maggiori informazioni

  • Per ulteriori informazioni su mysqlcheck , visita https://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html.
  • Per ulteriori informazioni su myisamchk , visita https://dev.mysql.com/doc/refman/5.5/en/myisamchk.html.