5.4. Reparación de tablas
5.4. Reparación de tablas Dataprix 13 Octubre, 2009 - 23:34En 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.
5.4.1. myisamchk
5.4.1. myisamchk Dataprix 14 Octubre, 2009 - 15:35El programa myisamchk es una utilidad en línea de comandos que se incluye con la distribución de MySQL y sirve para reparar tablas tipo MyISAM. Para utilizarlo con seguridad el servidor no debe estar ejecutándose y se recomienda realizar un respaldo del directorio de datos antes de su utilización.
Recibe como parámetro principal los archivos .MYI correspondientes a las tablas que hay que revisar; es decir, myisamchk no conoce la ubicación del directorio de datos. Por ejemplo, si el directorio de datos está ubicado en /val/ lib/mysql, las siguientes serían dos maneras de realizar una comprobación de los archivos de la base de datos demo:
# myisamchk /var/lib/mysql/demo/*.MYI
# cd /var/lib/lib/mysql/demo
# myisamchk *.MYI
Se pueden revisar todas las bases de datos utilizando ’*’ para denominar el directorio de la base de datos:
# myisamchk /var/lib/mysql/*/*.MYI
Para realizar una comprobación rápida, el manual sugiere utilizar el siguiente comando:
# myisamchk --silent --fast *.MYI
Y para realizar la corrección de las tablas corruptas, el manual sugiere la sintaxis siguiente:
Nota |
En la práctica con estas opciones se logran corregir los errores más comunes. Para conocer otras opciones de recuperación con myisamchk, podéis consultar el manual que acompaña a la distribu- ción de MySQL. |
# myisamchk --silent --force --update-state -O key_buffer=64M \ -O sort_buffer=64M -O read_buffer=1M -O write_buffer=1M *.MYI
Las opciones dadas por -O se refieren al uso de memoria, que permiten acelerar de forma notoria el proceso de reparación.
--force reinicia myisamchk con el parámetro --recover cuando encuentra algún error.
--updatestate almacena información sobre el resultado del análisis en la tabla MYI.