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.