Sample Image Può capitare, a seguito di un blocco del server o di uno shutdown irregolare, che accedendo ad un dB MySQL si ottenga l'errore

 mysql error: Can't open file: 'file.MYD'. (errno: 145)
 mysql error number: 1016


Questo è dovuto a delle inconsistenze all'interno del file. Fortunatamente per noi MySQL ha delle utility per il recupero delle tabelle che possono aiutarci a ripristinare il dB.




Tale ripristino non è sicuro al 100%, se il file è fisicamente danneggiato o se non ci sono sufficenti informazioni all'interno da poter recuperare, può capitare di avere un recupero parziale delle tabelle, o di non riuscire a recuperare nulla.

Però fare un tentativo non ci costa nulla, male che vada dovremmo eseguire il restore di un backup per riportare in funzione il db, anche se con la perdita dei dati inseriti dopo la creazione del backup.

Andiamo con ordine.

Per prima cosa dal propmt dei comandi dobbiamo entrare dentro al dB in questione.
Se avete nel path la directory bin di mysql vi basterà digitare il seguente comando, altrimenti dovrete andare a cercare il file mysql.exe all'interno di mysql/bin.

lanciamo il prompt di mysql con il comando

    mysql -u %DBUSERNAME% -h %DBSERVER% -p %DBNAME%

sostituendo alle variabili i vostri dati:

    DBSERVER è il nome del server che contiene il vostro dB

    DBUSERNAME è il nome dell'utente che ha diritti amministrativi su quel dB

    DBNAME è il nome del dB a cui non riuscite ad accedere


Per esempio:

    mysql -u john -h db.johndoe_db -p johndb

A questo punto il sistema vi chiederà la password per l'autenticazione

    Enter password:

Una volta inserita otterremo il prompt di MySQL:

    mysql>

Abaubiglass ti regala subito 5,00 euro Guarda !
Come accennavo prima, MySQL mette a disposizione due validi tool per eseguire la manutenzione del dB:

    check e repair table

Check table fa un controllo della tabella e ne visualizza eventuali incongruenze, la sintassi del comando è molto semplice:

    check table %NOMETABELLA%;

dove %NOMETABELLA% è il nome della tabella o l'insieme delle tabelle separate da un virgola.

L'output del comando sarà simile a quello riportato:

    +--------------------------------------+--------+------------+------------------------------------------+
    |    Table                                     |  Op     | Msg_type |                 Msg_text                        |
    +--------------------------------------+--------+------------+------------------------------------------+
    | %DBNAME%.%NOMETABELLA[0]% | check  |   warning  | Table is marked as crashed              |
    | %DBNAME%.%NOMETABELLA[1]% | check  |   status    | OK                                                 |
    +--------------------------------------+--------+-----------+-------------------------------------------+

A questo punto sappiamo che la tabella %NOMETABELLA[0]% è rovinata e dobbiamo ripristinarla.

Per il ripristino usiamo il comando repair table con la sintassi:

    repair table %NOMETABELLA[0]%

Otterremo in risposta una schermata simile a

    +--------------------------------------+-------+-----------+-----------+
    |        Table                                 |  Op   | Msg_type | Msg_text |
    +--------------------------------------+-------+-----------+-----------+
    | %DBNAME%.%NOMETABELLA[0]% | check |  status    |     OK      |
    +--------------------------------------+-------+-----------+-----------+

Ripetendo l'operazioen per tutte le tabelle che risultano danneggiate è possibile ripristinare il dB.

MySQL mette a disposizione altri comandi per la manutenzione dei dB come, ad esempio, MyISAMChk che lavora a dB arrestato, con le tabelle MyISAM, ovvero le tabelle stoccate nei file .MYD e .MYI

MyISAMChk è utile se non conosociamo il nome delle tabelle all'interno del dB e se non abbiamo modo di reperire tale informazione. Con due soli passagi possiamo controllare e correggere tutte le tabelle all'interno dei file MyISAM:

    myisamchk --silent --force --fast --update-state \
          --key_buffer_size=64M --sort_buffer_size=64M \
          --read_buffer_size=1M --write_buffer_size=1M \
          /%PATH_FILE_MYI%/*.MYI

    isamchk --silent --force --key_buffer_size=64M \
          --sort_buffer_size=64M --read_buffer_size=1M --write_buffer_size=1M \
          /%PATH_FILE_ISM%/*.ISM



Altro tool di MySQL simile a MyISAMChk è MySQLCheck, che può eseguire un controllo e la correzione sulle tabelle in un unica operazione anche a dB attivo.

Per l'utilizzo di questi due tool fate riferimento al manuale di MySQL  per i comandi mysqlcheck e myisamchk

We use cookies
Attenzione! Questo sito utilizza i cookie tecnici e di terze parti per poter fornire i servizi.