You are on page 1of 22

MANTENIMIENTO DE TABLAS Y RECUPERACIN DE UN FALLO CATASTRFICO (CRASH)

ADMINISTRACIN DE BD

En esta presentacin vamos a ver como utilizar myisamchk para comprobar o reparar tablas (tablas con archivos .MYI and .MYD). Se puede utilizar la utilidad myisamchk para obtener informacin sobre las tablas de su base de datos, o para comprobar, reparar u optimizarlas.

SINTAXIS PARA INVOCAR MYISAMCHK


myisamchk [opciones] tbl_name Las opciones especifican lo que quiere que myisamchk haga. Tambin puede obtener una lista de las opciones invocando myisamchk --help. Sin opciones, myisamchk simplemente comprueba la tabla, como operacin por defecto. Para obtener ms informacin, o decirle a myisamchk que tome medidas correctivas.

tbl_name es el nombre de la tabla que quiere comprobar o reparar. Se debe ejecutar myisamchk desde el directorio de la base de datos, de no ser as se debe especificar la ruta hasta este directorio, porque myisamchk no tiene la ms mnima idea de en qu lugar se encuentra la base de datos.

Puede invocar varios nombres de tablas en la lnea de comandos de myisamchk, si lo desea. Tambin puede especificar una tabla nombrando a su archivo de ndices (el archivo con extensin .MYI). Esto permite que especifique todas las tablas de un directorio utilizando el patrn *.MYI. Por ejemplo, si se encuentra en un directorio de una base de datos, puede comprobar todas las tablas MyISAM de ese directorio de la siguiente manera:
myisamchk *.MYI myisamchk /path/to/database_dir/*.MYI

Incluso se podra comprobar todas las tablas en todas las bases de datos especificando un comodn en la ruta a el archivo de datos MySQL: myisamchk /path/to/datadir/*/*.MYI

La manera recomendada de comprobar rpidamente todas las tablas MyISAM e ISAM es: myisamchk --silent --fast /path/to/datadir/*/*.MYI isamchk --silent /path/to/datadir/*/*.ISM

Si usted quiere comprobar todas las tablas MyISAM e ISAM y repararlas si alguna est corrompida, puede utilizar los siguientes comandos: myisamchk --silent --force --fast --update-state \ -O key_buffer=64M -O sort_buffer=64M \

-O read_buffer=1M -O write_buffer=1M \
/path/to/datadir/*/*.MYI

isamchk --silent --force -O key_buffer=64M \


-O sort_buffer=64M -O read_buffer=1M -O write_buffer=1M \ /path/to/datadir/*/*.ISM

Debe asegurarse de que ningn otro programa est utilizando las tablas mientras ejecute myisamchk. Si no es as, cuando ejecute myisamchk, puede obtener el siguiente mensaje de error: warning: clients are using or haven't closed the table properly

Esto significa que est intentando comprobar una tabla que ha sido cambiada por otro programa (como podra ser el servidor mysqld) que no ha cerrado an el archivo, o que ha muerto sin cerrar el archivo adecuadamente.

Si mysqld se est ejecutando, debe forzarlo a volcar cualquier modificacin de tablas que todava est almacenada en memoria, utilizando FLUSH TABLES. Debera entonces asegurarse de que nadie est utilizando las tablas sobre las que se ejecuta myisamchk.

ORGANIZAR UN PROGRAMA DE MANTENIMIENTO DE TABLAS

Es una buena prctica realizar chequeos de las tablas regularmente en lugar de esperar a que ocurran los problemas. Una forma de chequear y reparar tablas MyISAM es con los comandos CHECK TABLE y REPAIR TABLE .

Otro modo de chequear tablas es usar myisamchk. Para mantenimiento, puede usar myisamchk -s. La opcin -s (forma corta de --silent) hace que myisamchk se ejecute en modo silencioso, mostrando mensajes slo cuando hay algn error.

Es una buena idea chequear las tablas al arrancar el servidor. Por ejemplo, cada vez que la mquina se reinicia durante una actualizacin, normalmente necesita chequear todas las tablas que hayan podido ser afectadas. Para chequear automticamente tablas MyISAM , arranque el servidor con la opcin --myisamrecover .

Debe chequear las tablas regularmente durante operaciones normales del sistema. En MySQL AB, utilizamos un trabajo cron para chequear todas nuestras tablas importantes una vez a la semana, usando una lnea como esta en un fichero crontab : 35 0 * * 0 /path/to/myisamchk --fast --silent /path/to/datadir/*/*.MYI

CHECK TABLE
CHECK TABLE puede comprobar las vistas en busca de problemas tales como tablas que se referencian en la definicin de la vista que ya no existe.

El comando CHECK TABLE retorna una tabla con las siguientes columnas:
Columna Tabla Valor

Nombre de tabla Es status, error, info, o warning Mensaje

Op Siempre check Msg_type Msg_text

Tenga en cuenta que el comando puede producir varios registros para informacin de cada tabla chequeada. El ltimo registro tiene un valor Msg_type de status y Msg_text normalmente debe ser OK. Si no obtiene OK, o Table is already up to date debe realizar una reparacin de la tabla

Las distintas opciones de chequeo que pueden darse se muestran en la siguiente tabla. Estas opciones se aplican slo para tablas MyISAM y se ignoran en tablas InnoDB y vistas. Tipo FAST Significado Slo chequea tablas que no se han cerrado correctamente.

QUICK No escanea los registros para chequear enlaces incorrectos. CHANGED Slo las tablas chequeadas que se han cambiado desde el litmo chequeo o no se han cerrado correctamente. MEDIUM Escanea registros para verificar que los enlaces borrados estn bien. Tambin calcula el checksum de la clave para los registros y lo verifica con el checksum calculado para las claves. EXTENDED Realiza una bsqueda completa para todas las claves para cada registro. Se asegura que la tabla es consistente 100%, pero tarda mucho tiempo!

Si ninguna de las opciones QUICK, MEDIUM, o EXTENDED se especifica, el tipo de chequeo por defecto para tablas de formato dinmico MyISAM es MEDIUM. Puede combinar opciones de chequeo, como en el siguiente ejemplo, que realiza un chequeo rpido de la tabla para ver si se cerr correctamente: CHECK TABLE test_table FAST QUICK;

EL PROGRAMA MYSQLCHECK PARA MANTENER Y REPARAR TABLAS


El cliente mysqlcheck comprueba y repara tablas MyISAM. Tambin puede optimizar y analizar tablas. mysqlcheck es similar a myisamchk, pero funciona de forma distinta. La principal diferencia operacional es que mysqlcheck debe usarse cuando el servidor mysqld est en ejecucin, mientras que myisamchk debe usarse cuando no lo est. El beneficio de usar mysqlcheck es que no tiene que parar el servidor para comprobar o reparar las tablas.

mysqlcheck usa los comandos SQL CHECK TABLE, REPAIR TABLE, ANALYZE TABLE, y OPTIMIZE TABLE de forma conveniente para los usuarios. Determina los comandos a usar en funcin de la operacin que quiera realizar, luego enva los comandos al servidor para ejecutarlos. Hay tres modos generales de invocar mysqlcheck: shell> mysqlcheck [opciones] nombre_de_base_de_datos [tablas] shell> mysqlcheck [opciones] --databases DB1 [DB2 DB3...] shell> mysqlcheck [opciones] --all-databases

mysqlcheck tiene una caracterstica especial comparado con otros clientes. El comportamiento por defecto de comprobar tablas (--check) puede cambiarse renombrando el binario. Si quiere tener una herramienta que repare las tablas por defecto, debe hacer una copia de mysqlcheck llamada mysqlrepair, o hacer un enlace simblico a mysqlcheck llamado mysqlrepair. Si invoca mysqlrepair, repara tablas.

Los siguientes nombres pueden usarse para cambiar el comportamiento por defecto de mysqlcheck : mysqlrepair La opcin por defecto es --repair

mysqlanalyze La opcin por defecto es --analyze mysqloptimize La opcin por defecto es --optimize