En determinadas circunstancias de uso muy frecuente, como la inserción y borrado masivos de datos, coincidiendo con bloqueos del sistema o llenado del espacio en disco u otras circunstancias, es posible que una tabla o algunos de sus índices se corrompan.
Podemos consultar el estado de integridad de una tabla con el comando check table, que realiza algunas verificaciones sobre la tabla en busca de errores y nos entrega un informe con las siguientes columnas de información:
La columna Op describe la operación que se realiza sobre la tabla. Para el comando check table esta columna siempre tiene el valor check porque ésa es la operación que se realiza. La columna Msg_type pude contener uno de los valores status, error, info, o warning. Y la columna Msg_text es el texto que reporta de alguna situación encontrada en la tabla.
Es posible que la información entregada incluya varias filas con diversos mensajes, pero el último mensaje siempre debe ser el mensaje OK de tipo status.
En otras ocasiones check table no realizará la verificación de tabla, en su lugar entregará como resultado el mensaje Table is already up to date, que significa que el gestor de la tabla indica que no hay necesidad de revisarla.
MySQL no permite realizar consultas sobre una tabla dañada y enviará un mensaje de error sin desplegar resultados parciales:
mysql> select * from precios;
ERROR 1016: No puedo abrir archivo: ’precios.MYD’. (Error: 145)
Para obtener información del significado del error 145, usaremos la utilidad en línea de comandos perror:
$ perror 145
145 = Table was marked as crashed and should be repaired
Después de un mensaje como el anterior, es el momento de realizar una verificación de la integridad de la tabla para obtener el reporte.
En este caso localizamos dos errores en la tabla. La opción extended es uno de los cinco niveles de comprobación que se pueden solicitar para verificar una tabla.
Tipo | Significado |
quick | No revisa las filas en busca de referencias incorrectas. |
fast | Solamente verifica las tablas que no fueron cerradas adecuadamente. |
changed | Verifica sólo las tablas modificadas desde la última verificación o que no se han cerrado apropiadamente. |
medium | Revisa las filas para verificar que los ligados borrados son correctos, verifica las sumas de comprobación de las filas. |
extended | Realiza una búsqueda completa en todas las claves de cada columna. Garantiza el 100% de la integridad de la tabla. |
La sentencia repair table realiza la reparación de tablas tipo MyISAM corruptas:
El segundo mensaje informa de la pérdida de 13 filas durante el proceso de reparación. Esto significa, como es natural, que el comando repair table es útil sólo en casos de extrema necesidad, ya que no garantiza la recuperación total de la información. En la práctica, siempre es mejor realizar la restauración de la información utilizando las copias de seguridad. En caso de desastre, se debe conocer el motivo que origina la corrupción de las tablas y tomar las medidas adecuadas para evitarlo. En lo que respecta a la estabilidad de MySQL, se puede confiar en que muy probablemente nunca será necesario utilizar el comando repair table.
El comando optimize table puede también realizar algunas correcciones sobre una tabla.