innodb corrotti

Cosa fare con indici innodb corrotti

Se siamo in presenza di innodb corrotti, la soluzione è il restore da un backup. Drastico. Oppure una alternativa c’è ma è laboriosa.

Si deve in sintesi procedere a avviare il db in modo tale da poter fare manutenzione alle tabelle innodb e fare un dump meno buono, ossia meno pieno di dati relativi alle transazioni del sistema innodb. Così poi da poter ricreare i vari log che hanno causato la presenza di indici innodb corrotti.

Se il db non parte sarà necessario configurare il parametro innodb_force_recovery nel file my.cnf. (https://dev.mysql.com/doc/refman/5.0/en/forcing-innodb-recovery.html)

[mysqld]
#innodb_force_recovery = 5

https://dev.mysql.com/doc/refman/5.0/en/rebuilding-tables.html
Per prima cosa si deve verificare la dimensione del log file innodb.

-rw-rw—- 1 mysql mysql 15242880 Oct 18 11:50 ib_logfile0
-rw-rw—- 1 mysql mysql 15242880 Oct  2 02:10 ib_logfile1

Quindi la dimensione è 15242880. Quindi editare il file /etc/my.cnf .

innodb_log_file_size=15242880

Restart Mysql service

Tutte le operazioni Insert Update non verranno contate.

/etc/init.d/mysql start

Ora va eseguito il dump del db rovinato. Potrebbe essere necessario prima eseguire il chek delle tabelle.

Single Database
mysqldump database_name > database_name.sql
All Databases
mysqldump –all-databases > all_the_bases.sql

Per sicurezza eseguire il dump dei file innodb. Quindi stoppare MySQL completamente e spostare i file ib* da /var/lib/mysql/ .

mkdir /var/lib/old_innodb
mv /var/lib/mysql/ib* /var/lib/old_innodb

Rimuovere le due direttive aggiunte prima e riavviare il DB.

mysql  database_name < database_name.sql

 

Eseguire quindi un nuovo tentativo di  repair del database.

mysqlcheck –-all-databases –repair

That’s all folks.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *