Nel mondo moderno, le aziende non dipendono solamente da una specifica piattaforma server per database. Ci sono molte piattaforme di database disponibili che sono adeguate a gestire carichi di lavoro moderati e richieste client di alta disponibilità e recupero dalla catastrofe. MySQL è una di queste piattaforme di database che fornisce molte funzionalità e alta performance.
Come altri RDBMS, MySQL è anche soggetto a corruzione del database e delle tabelle. L’interruzione recente causata da Microsoft e CrowdStrike ha anche colpito i server di database MySQL. A causa di fallimenti del sistema operativo, le tabelle del database o l’intero database possono diventare corrotte.
In questo articolo, vi mostrerò come possiamo corrompere e riparare una tabella del database MySQL. questo articolo è utile ai DBAs per simulare i fallimenti e aiutarli a determinare il modo migliore per ripristinare o riparare la tabella MySQL corrotta.
Comprendere la Corruzione del Database MySQL
La corruzione del database MySQL può manifestarsi in vari modi, inclusi:
Tabelle Inaccessibili
L’intera tabella o un sottoinsieme specifico della tabella diventa inaccessibile. Quando provate ad accedere alla tabella corrotta, incontrerete errori che indicano la corruzione del file di indice o del file di dati di una tabella.
Errori di Incongruenza Dati
Se la tabella è danneggiata, invece di dati significativi, la query potrebbe restituire qualche valore errato o risultati incoerenti o incomplete.
Arresti imprevisti
In alcuni casi, MySQL potrebbe bloccarsi mentre accede alla tabella o esegue le copie di backup utilizzando mysqldump
. Una volta ho incontrato questo errore mentre simulavo lo scenario di corruzione. Ho danneggiato il file dati di una tabella. Dopo aver avviato il servizio, quando ho tentato di accedere alla tabella usando una istruzione SELECT
, il servizio di MySQL è andato in crash automaticamente.
Messaggi di errore durante le operazioni sul database
Accessando la tabella danneggiata, potresti incontrare certi errori come:
ERROR 1016: Can't open file: 'table_name.MYI' (errno: 145)
Table ‘table_name’ is marked as crashed and should be repaired
Got error 28 from storage engine
ERROR 1030: Got error 127 from storage engine
questi errori indicano che il file dati o gli indici associati sono danneggiati.
È cruciale comprendere la causa principale della corruzione per prevenire futuri avvenimenti e garantire l’integrità dei dati.
Prerequisiti per la riparazione delle tabelle di MySQL
Prima di tentare qualunque riparazione, assicurati di avere i seguenti elementi:
- Backup completo del database MySQL
- Spazio disco sufficiente
- Accesso amministrativo al server MySQL
Adesso, simuleremo la corruzione della tabella.
Corruzione della tabella MySQL.
Si imparerà il processo di riparazione del database, ma prima capiremo come corrompere il database. Per dimostrazione, ho creato un database chiamato “CorruptDB” su un server di database MySQL. Ho anche creato una tabella chiamata corrupt_table
nel database CorruptDB.
Qui c’è il codice per creare un database e una tabella.
Create database corruptDB;
Use corruptdb;
CREATE TABLE corrupt_table (
id INT AUTO_INCREMENT PRIMARY KEY,
data VARCHAR(100)
) ENGINE=MyISAM;
Ho aggiunto un milione di record alla tabella eseguendo la seguente query.
INSERT INTO corrupt_table (data)
SELECT CONCAT('RandomData-', FLOOR(1000 + (RAND() * 9000)))
FROM corrupt_table;
Notare che la simulazione della corruzione della tabella è stata fatta sul mio laptop. Non provare questo in produzione, sviluppo o altri ambienti. La tabella che sto usando in questa dimostrazione è stata creata con il motore di database MyISAM. Puoi leggere riguardo Motori di Archiviazione Alternativi per saperne di più sui motori di database del Server MySQL.
Ho seguito i seguenti passaggi per corrompere la tabella.
Passo 1: Fermare i Servizi del Server MySQL
È necessario fermare il server MySQL. Per farlo, avvia PowerShell come amministratore ed esegui il seguente comando.
net stop MySQL
In alternativa, puoi anche fermarli dai Servizi.
Passo 2: Corrompere il File dell’Indice della Tabella
Ora, dobbiamo corrompere il file dell’indice della tabella. Quando crei una tabella nel motore di database MyISAM, vengono creati tre file quando crei una tabella utilizzando il motore di database MyISAM.
- File MYD: questo file contiene i dati reali.
- File MYI: questo è un file di indice.
- File Frm: Il file contiene una struttura di tabella.
Ci corromperemo il file di indice. I file dati si trovano nella posizione predefinita, che è “C:\ProgramData\MySQL\MySQL Server 8.0\Data\corruptdb.” Per la corruzione, usiamo un editor esadecimale.
Scarica e installa l’editor esadecimale. Apri i file MYI con esso. Il file assomiglia all’immagine seguente:
Sostituisci i primi 5 byte con alcuni valori casuali. Salva il file e chiudi l’editor.
Ora, avviamo il servizio e proviamo ad accedere alla tabella.
Step 3: Avviare i Servizi MySQL e Accedere alla Tabella
Prima di tutto, avvia i servizi MySQL eseguendo il seguente comando in PowerShell.
net start MySQL
Una volta avviati i servizi, esegui il seguente comando sul prompt dei comandi MySQL.
mysql> use corruptdb;
Database changed
mysql> select count(1) from corrupt_table;
Il comando ha restituito l’errore seguente:
L’errore indica che l’indice della tabella corrupt_table
è stato corrotto e deve essere riparato.
Metodi manuali per riparare le tabelle MySQL
Ci sono certi metodi che puoi usare per riparare la tabella MySQL corrotta. Il primo metodo è usare i comandi CHECK TABLE
e REPAIR TABLE
.
Comandi CHECK TABLE e REPAIR TABLE
Puoi ripristinare la tabella usando i comandi integrati CHECK TABLE
e REPAIR TABLE
di MySQL. Questi comandi vengono usati per diagnosticare e riparare qualsiasi tabella MyISAM.
Il comando di controllo tabella controlla l’integrità della tabella. Controlla la struttura della tabella, gli indici e i dati per eventuali corruzioni e mostra i dettagli. La sintassi è sotto:
CHECK TABLE [option]
Puoi specificare le opzioni differenti.
QUICK
: Questa opzione controlla rapidamente e identifica problemi come gli indici corrotti.FAST
: Controlla le tabelle che non sono chiuse correttamente.CHANGED
: questa opzione controlla solo quelle tabelle che sono state modificate dopo l’ultima esecuzione diCHECK TABLE
.MEDIUM
: Questa opzione controlla i record e verifica che i link tra la tabella e i dati siano corretti.EXTENDED
: Questa opzione scannerizza e verifichi la struttura della tabella e i contenuti.
In questa dimostrazione, faremo una scansione rapida. Ecco il comando.
CHECK TABLE corrupt_table
Screenshot:
Come vedete dalla screenshot soprastante, l’errore indica che l’indice della tabella corrupt_table
è corrotto e ha bisogno di essere corretto.
Usaremo il comando REPAIR TABLE
per correggere la corruzione nella tabella. Il comando REPAIR TABLE
è usato per recuperare la struttura della tabella e i dati dalla corruzione, specialmente la tabella che ha il motore di database MyISAM. In caso di corruzione dell’indice della tabella, il comando REPAIR TABLE
ricostruisce gli indici.
La sintassi di REPAIR TABLE
è come segue:
REPAIR TABLE [option]
Puoi specificare le seguenti opzioni:
QUICK
: Ripara solo l’indice della tabella. Non accede al file dati della tabella.ESTENDETE
: Quando utilizziamo questa opzione, il comando eseguirà una riparazione approfondita. Inoltre, ripara o ricrea il file indice scansando tutti i record della tabella.
In questa demo, abbiamo corrotto l’indice della tabella; quindi, userò l’opzione QUICK
. Esegui il seguente comando.
REPAIR TABLE corrupt_table
Screenshot:
Come vedete nella screenshot soprastante, la tabella corrupt_table
è stata riparata con successo. Per verificare, esegui il seguente comando su MySQL Workbench:
use corruptdb;
select count(1) from corrupt_table;
Output della query:
Come puoi vedere, la tabella ora è accessibile.
Ripristina la Tabella Utilizzando il Comando mysqldump
La seconda metodologia è ripristinare l’intera tabella dal backup. Questa metodologia può essere utilizzata quando la tabella è gravemente corrotta e non può essere riparata utilizzando il comando REPAIR TABLE
.
Per ripristinare una tabella MySQL dal backup, puoi utilizzare il comando mysqldump
. Puoi leggere l’articolo “mysqldump — Un Programma di Backup del Database” per imparare come utilizzare il comando mysqldump. La sintassi per ripristinare la tabella è sotto.
mysql -u [username] -p [database_name] < [table_dump.sql]
Nella sintassi:
Nomeutente
: Inserisci il nome utente che utilizzi per connetterti al database MySQL.-p
: Specifica la password. Se lo lascii vuoto, MySQL richiederà una password.[database_name]
: Specifica il nome del database in cui stai tentando di ripristinare la tabella.Table_dump.sql
: Specificare il nome completo del file di backup.
Per dimostrazione, ho creato un backup della database CorruptDB situato nella directory C:\MySQLData\Backup.
Per ripristinare la corrupt_table
, possiamo usare il seguente comando.
mysql -u root -p corruptdb < C:\MySQLData\Backup\corrupt_table.sql
Una volta eseguito correttamente il comando, sarà possibile accedere alla tabella. Eseguire il seguente query per verificare.
use corruptdb;
select count(1) from corrupt_table;
Output query:
Come vedete nella schermata sopra, la tabella è stata ripristinata con successo.
Usando phpMyAdmin
Puoi anche usare lo strumento phpMyAdmin per riparare qualsiasi database MySQL danneggiato. phpMyAdmin è una interfaccia grafica per gestire e mantenere MySQL e MariaDB. Per dimostrazione, l’ho installato sul mio laptop.
- Per riparare la tabella, avviare phpMyAdmin e navigare verso la base dati in cui si trova la tabella danneggiata.
- Nel pannello destro, puoi visualizzare la lista delle tabelle create nella base dati CorruptDB.
- Selezionare
Corrupt_table
dalla lista e selezionare l’opzione Ripara tabella dalla lista a discesa.
Ecco una schermata per riferimento:
Una volta riparata la tabella, puoi vedere lo stato della corrupt_table
diventa OK. Ecco una schermata:
Conclusione
In questo articolo abbiamo appreso le possibili cause della corruzione del database MySQL e come risolverle. Ho spiegato un processo passo dopo passo per corrompere le tabelle MySQL utilizzando un editor esadecimale. Ho anche illustrato come risolverle utilizzando i comandi CHECK TABLE
e REPAIR TABLE
. Abbiamo inoltre appreso come ripristinare la tabella utilizzando l’utilità mysqldump
.
Riparare una tabella del database MySQL danneggiata può essere impegnativo, ma con gli strumenti e i metodi corretti è gestibile. I metodi manuali forniscono una soluzione di base, mentre phpMyAdmin offre un’opzione di ripristino completa e affidabile. Assicurati sempre di effettuare regolari backup e di mantenere la salute del tuo database per ridurre al minimo il rischio di corruzione.
Source:
https://dzone.com/articles/repair-corrupt-mysql-database-tables-step-by-step