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:
- Accedi al tuo server utilizzando SSH.
- 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
- Per CentOS e Fedora, digita:
-
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. -
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
- Per CentOS e Fedora, digita:
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:
- Come utente root, digita il seguente comando:
cd /var/lib/mysql
-
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
-
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
- 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.- 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
- Per CentOS e Fedora, digita:
-
Digita il seguente comando:
cd /var/lib/mysql
- Passa alla directory in cui si trova il database. Ad esempio, se il database è denominato clienti , digita cd clienti.
-
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.
-
Per provare a riparare una tabella, digita il seguente comando, sostituendo tabella con il nome della tabella che si vuole riparare:
myisamchk --recover table
-
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
- Per CentOS e Fedora, digita:
- 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:
- 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.
- Nel my.cnf individua il file [mysqld] sezione.
-
Aggiungi la seguente riga a [mysqld] sezione:
innodb_force_recovery=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
- Per CentOS e Fedora, digita:
-
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
-
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.
-
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
- Per CentOS e Fedora, digita:
-
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! -
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. -
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
- Per CentOS e Fedora, digita:
-
Digitare il comando seguente per ripristinare i database dal file di backup creato nel passaggio 5:
mysql < databases.sql
- 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.