INTEGRIDAD Y REPARACIÓN DE TABLAS en MYSQL

* Inserción y borrado masivo de datos + bloqueo del sistema o fallo del disco =
tabla o índice corrupto

USE world;
SELECT * FROM City;

ERROR 1016: No puedo abrir archivo: ‘City.MYD’. (Error: 145)

system perror 145
MySQL error code 145: Table was marked as crashed and should be repaired

Si tenemos copia de seguridad podemos restaurarla y recuperar la tabla. Si no
tenemos copia tendremos que reparar la tabla, proceso en el cual se suelen
perder los registros defectuosos.

* Consulta y reparación de la integridad mediante sentencias SQL:

CHECK TABLE City EXTENDED;
REPAIR TABLE City;

* Consulta y reparación con la utilidad ‘myisamchk’: esta utilidad es para
tablas ‘MyISAM’, accede a los ficheros de tablas directamente, y por lo tanto
necesita parar el servidor. Ejemplos:

sudo /etc/init.d/mysql stop
myisamchk –check /var/lib/mysql/*/*.MYI
myisamchk –recover /var/lib/mysql/world/*.MYI
myisamchk –safe-recover /var/lib/mysql/world/City.MYI
myisamchk –key_buffer_size=64M –sort_buffer_size=64M
–read_buffer_size=1M –write_buffer_size=1M
–silent –force –fast –update-state /var/lib/mysql/world/*.MYI
sudo /etc/init.d/mysql start

* Consulta y reparación con la utilidad ‘mysqlcheck’: esta utilidad es para
tablas ‘MyISAM’, ‘InnoDB’ y ‘BDB’, se conecta como cliente al servidor y le
envía sentencias SQL, y por lo tanto no se debe parar el servidor. Ejemplos:

mysqlcheck -u root -p –check world City
mysqlcheck -u root -p –repair world City
mysqlcheck -u root -p –force world City

* Reparar tablas InnoDB: si se ha producido una caída del servidor, con
reiniciarlo hay suficiente. InnoDB reconocerá que no se apagó correctamente e
iniciará una recuperación automática.

Aún así, podemos detectar errores mediante la sentencia ‘CHECK TABLE’ o
mediante la utilidad ‘mysqlcheck’. Pero para reparar una tabla InnoDB no se
puede utilizar la sentencia ‘REPAIR TABLE’ o la utilidad ‘mysqlcheck’. El
único método es exportar la tabla con ‘mysqldump’, después borrar la tabla
defectuosa, y por último importarla de nuevo.

* Lecturas para profundizar:
– http://dev.mysql.com/doc/refman/5.0/es/check-table.html
– http://dev.mysql.com/doc/refman/5.0/es/repair-table.html
– http://dev.mysql.com/doc/refman/5.0/en/myisamchk.html
– http://dev.mysql.com/doc/refman/5.0/es/using-mysqlcheck.html