IMPORTANTE! La riparazione manuale della tabella danneggiata può funzionare, ma comporta il rischio di perdita di dati. Se non si può rischiare di perdere i dati, provare a ripristinare il database da un backup recente. Tuttavia, se il backup non è il più recente, si potrebbero perdere ancora più dati. È possibile evitare il rischio di perdita di dati quando si riparano tabelle InnoDB (o tabelle MyISAM) corrotte utilizzando il software Stellar Repair for MySQL. Aiuta a recuperare i dati da tabelle corrotte o danneggiate nel formato originale in pochi clic.
InnoDB è il MySQL storage engine utilizzato di default in MySQL 5.5 e versioni successive. È noto anche come motore di archiviazione a prova di crash (al contrario di MyISAM), grazie alla sua capacità di recuperare i dati dopo un crash. Tuttavia, in alcune circostanze, sembra che la tabella InnoDB possa danneggiarsi. Quando ciò accade, i dati contenuti nella tabella diventano illeggibili. Inoltre, una tabella danneggiata può causare il danneggiamento dei file InnoDB.
Cosa causa la corruzione della tabella InnoDB in MySQL?
Di seguito sono riportati alcuni motivi che possono causare il danneggiamento della tabella:
- Il servizio MySQL si blocca dopo il riavvio
- Il server MySQL si riavvia automaticamente
- Un’interruzione di corrente o una memoria insufficiente bloccano MySQL Server durante la scrittura nella tabella del database
- C’è un bug nel sistema operativo o nel codice di MySQL
- Guasto hardware
- La macchina su cui è in esecuzione MySQL viene spenta inaspettatamente.
È possibile che il problema di corruzione della tabella InnoDB si verifichi più frequentemente sul sistema operativo Windows mentre il database viene eseguito in un ambiente virtualizzato. Vediamo ora come diagnosticare e riparare la tabella InnoDB in MySQL.
Prima di procedere
Cercate di identificare con precisione il problema che avete di fronte. In questo modo, vi aiuterà a risolvere il problema di InnoDB in modo più efficiente, senza perdere tempo a cercare metodi alternativi.
Per diagnosticare i problemi di InnoDB, procedere come segue:
1. Analizzare il registro del server MySQL
Se si sospetta o si riscontra un danneggiamento nelle tabelle InnoDB, esaminare il log degli errori di MySQL Server per trovare informazioni pertinenti su errori InnoDB specifici. Il registro degli errori vi aiuterà a capire:
- Se la tabella viene danneggiata a causa della corruzione di una pagina del database. Una pagina corrotta nel database MySQL può portare alla corruzione di una tabella del database.
- Se il fallimento è dovuto a un deadlock, eseguire l’operazione con l’istruzione innodb_print_all_deadlocks abilitata. I dettagli su tutti i deadlock di InnoDB verranno stampati nel registro degli errori di MySQL Server.
- Se si verificano problemi con il dizionario dei dati InnoDB, è necessario risolvere gli errori “impossibile aprire i file .InnoDB”, “istruzione CREATE TABLE non riuscita” e “il sistema non trova il percorso specificato”. La risoluzione di questi errori consentirà di accedere al dizionario dei dati InnoDB.
2. Controllare la presenza di errori nella tabella
Sebbene il controllo del registro degli errori di MySQL possa aiutare a identificare la corruzione, potrebbe essere problematico identificare la tabella interessata. È possibile verificare la presenza di errori nella tabella InnoDB utilizzando due metodi. Tuttavia, il metodo da utilizzare dipende dal fatto che il server MySQL sia in esecuzione o sia offline o in crash.
- Se il server è in esecuzione, usare il comando CHECK TABLE per trovare gli errori nella tabella InnoDB.
mysql> CHECK TABLE nome_tabella;
- Se il server è offline o si è bloccato, utilizzare Innochecksum per verificare la presenza di errori di corruzione della pagina su una tabella InnoDB.
shell> innochecksum [opzioni] nome_file
Come riparare una tabella InnoDB corrotta in MySQL?
InnoDB è dotato di un meccanismo di recupero degli arresti anomali che consente di riparare e recuperare automaticamente le tabelle del database. Inoltre, è possibile utilizzare il metodo “Dump and Reload” per ricostruire una o più tabelle danneggiate. Tuttavia, in caso di corruzione grave, potrebbe essere difficile riavviare il server MySQL. Pertanto, è necessario correggere manualmente il file InnoDB in MySQL che contiene la tabella danneggiata.
Nota: prima di tentare di riparare il danneggiamento dei file InnoDB causato da una tabella corrotta, eseguire il ripristino da un backup recente. Se la copia di backup è corrotta o non è la copia più recente, seguire i passaggi descritti di seguito.
Seguire la procedura passo-passo per correggere una tabella InnoDB danneggiata
Nota: Assicurarsi di eseguire il backup del file InnoDB prima di eseguire la procedura di riparazione per evitare ulteriori danni ai dati della tabella.
Passo 1: tentare di riavviare il servizio MySQL e verificare se è possibile accedere al server. Per farlo, seguite i seguenti passaggi:
- Premete insieme i tasti “Windows” e “R”.
- Nella finestra di dialogo visualizzata, digitare services.msc e premere Invio.
- Nella finestra di dialogo Servizi, cercate MySQL Service e fate clic con il tasto destro del mouse su di esso, quindi fate clic su arresta, avvia o riavvia il servizio.
Se non si riesce ad accedere al server, può essere utile forcing InnoDB recovery. A tale scopo, attivate l’opzione ‘innodb_force_recovery‘ nel file di configurazione MySQL my.cnf eseguendo le seguenti operazioni:
- Aprite il file di configurazione e nella sezione [mysqld] aggiungete la seguente riga:
[mysqld]
innodb_force_recovery=1
- Ora salvate e chiudete il file my.cnf.
- Provate a riavviare il servizio MySQL.
- Se si riesce ad accedere alla tabella danneggiata, si può eseguire il dump dei dati della tabella usando il comando mysqldump:
mysqldump -u user -p nome_database nome_tabella > single_dbtable_dump.sql
È possibile eseguire il dump di più tabelle separate da spazi bianchi nel comando precedente.
- Quindi, eliminare la tabella dal db:
mysql -u user -p -execute=”DROP TABLE nome_database.nome_tabella”
- Ora provate a ripristinare la tabella usando il file di dump appena creato:
mysql -u user -p < single_dbtable_dump.sql
Fase 2: Arrestare il servizio MySQL e quindi disabilitare la modalità di recupero InnoDB. A tale scopo, inserite la seguente riga nella sezione [mysqld]:
#innodb_force_recovery=…
Fase 3: salvare le modifiche al file my.cnf e riavviare il servizio MySQL con il seguente comando:
servizio mysqld start
Ripristinare la tabella del database dal dump (cioè dal file di backup) appena creato.
Cosa fare quando i suggerimenti manuali per la risoluzione dei problemi di InnoDB non riescono a recuperare i dati?
Se si riscontrano difficoltà durante la riparazione manuale delle tabelle InnoDB del database MySQL o se uno dei componenti del database risulta mancante, è possibile provare il MySQL repair software per riparare e ripristinare le tabelle InnoDB corrotte.
Caratteristiche principali di Stellar Repair for MySQL
- Recupera tutti gli oggetti del database, comprese tabelle, chiavi, tipi di dati, proprietà delle tabelle, trigger, viste, ecc.
- Ripara le tabelle InnoDB e MyISAM.
- Può gestire tutti i tipi di errori di corruzione di MySQL, come il danneggiamento del tablespace InnoDB, il file di database mancante, il danneggiamento del file indice di MySQL, ecc.
- Ripara i database MySQL creati su sistemi Windows (10, 8.1, 8, 7, Vista e XP) e Linux.
- Supporta l’elaborazione in batch di file di database MySQL corrotti contemporaneamente in un unico tentativo.
Conclusione
La riparazione manuale della tabella InnoDB danneggiata può causare la perdita di dati. Quindi, se non potete rischiare di perdere i dati, utilizzate il software Stellar Repair for MySQL per riparare la tabella InnoDB danneggiata in MySQL. Il software aiuta a riparare la tabella corrotta del database e recupera le proprietà della tabella, i vincoli di relazione e le chiavi.
Una volta risolto il problema del danneggiamento dei file InnoDB, seguite queste best practice per prevenire il danneggiamento di InnoDB.
- È buona norma raggruppare i set associati alle operazioni DML in transazioni. Ciò può essere fatto separando le operazioni DML con le istruzioni START TRANSACTION e COMMIT.
- Quando si utilizzano le colonne interrogate più frequentemente, specificare la chiave primaria per ogni tabella. È anche possibile utilizzare un valore di autoincremento nel caso in cui non esista una chiave primaria.
- Abilitare l’opzione innodb_file_per_table per mettere gli indici e i dati delle singole tabelle in file distinti.
- Se il problema persiste con il motore indicato nella clausola ENGINE= di CREATE TABLE, eseguire il server con l’opzione -sql_mode=NO_ENGINE_SUBSTITUTION per evitare che le tabelle siano formulate con motori di archiviazione diversi.
- È consigliabile non utilizzare l’istruzione LOCK TABLES e utilizzare la sintassi SELECT … FOR UPDATE per sbloccare le righe da aggiornare, al fine di acquisire l’accesso esclusivo in scrittura a un insieme di righe. InnoDB è in grado di gestire più sessioni di lettura e scrittura simultanee sulla stessa tabella.
- Eseguite MySQL Server dal prompt dei comandi durante la risoluzione dei problemi di Innodb piuttosto che dal servizio di Windows o da mysqld_safe.
- Assicurarsi che i monitor InnoDB siano abilitati per acquisire informazioni sul problema esistente. Se il problema persiste ed è legato alle prestazioni e il server si blocca, assicurarsi di attivare il Monitor standard per stampare le informazioni sullo stato interno di InnoDB. In caso contrario, abilitare i monitor dei blocchi se il problema sembra riguardare i blocchi.
Was this article helpful?