9 de agosto de 2012

Reparar tablas rotas MyISAM en MySQL

MySQLUno de los problemas que aparecen de forma recurrente aunque no con de forma habitual son en las bases de datos MySQL son las tablas rotas. Se suelen producir cuando las tablas no se han cerrado correctamente y lo típico es cuando se apaga el ordenador en caliente, con MySQL metiendo o consultando datos.

Las tablas marcadas como crashed deben repararse lo cual, si las tablas son extensas, lleva su tiempo.

Para tablas MyISAM tenemos dos comandos:

msqlcheck: comprueba tablas con en servidor MySQL en funcionamiento.
myisamchk: comprueba tablas con en servidor MySQL parado.

Si el problema es serio usar myisamchk que es mas potente. Parar el servidor MySQL y reparar el problema.


Las bases de datos MySQL se encuentran en el directorio /var/lib/mysql/

Dentro de este directorio hay subdirectorios con el nombre de cada base de datos que contienen los ficheros correspondientes a cada tabla.

Comandos:

  • myisamchk --check               /var/lib/mysql/mybasededatos/*.MYI
  • myisamchk --silent --fast      /var/lib/mysql/mybasededatos/*.MYI
  • myisamchk –recover -q        /var/lib/mysql/mybasededatos/*.MYI
  • myisamchk –recover            /var/lib/mysql/mybasededatos/*.MYI
  • myisamchk –safe-recover    /var/lib/mysql/mybasededatos/*.MYI
  • myisamchk –o                      /var/lib/mysql/mybasededatos/*.MYI


Protocolo:

0) Parar el servidor MySQL:
         # service mysql stop

1) Chequear integridad de todas las tablas de todas las bases de datos MySQL:
     Rápida: solo chequea las que están marcadas como rotas:

         myisamchk --silent --fast /var/lib/mysql/*/*.MYI

     Este comando esta bien para detectar de forma rápida si hay tablas marcadas como crased.
2) Reparando las tablas rotas:
     Como son procesos que duran mucho tiempo es recomendable probar primero la reparación rápida.

     Reparación rápida: solo intenta reparar el arbol del índice:

         # myisamchk -r -q tabla.MYI

     Reparacion estandard:
         # myisamchk -r tabla.MYI

     Reparación safe-recover, no esta en el manual? 
         # myisamchk -r --safe-recover tabla.MYI


3) Optimizar las tablas de una base de datos

         # myisamchk -o tabla.MYI                            una tabla
         # myisamchk -o -B basededatos                  todas las tablas de las bases indicadas
         # myisamchk -o /var/lib/mysql/*/*.MYI          optimizar todo


También he visto este comando que no he usado:
# myisamchk --silent --force --update-state -O key_buffer=64M -O sort_buffer=64M -O read_buffer=1M -O write_buffer=1M *.MYI

Ref.:

8.6. El programa mysqlcheck para mantener y reparar tablas


1 comentario:

  1. Hola,
    actualice a MySQL5.5 y perdi todas mis tablas de MySQL5.0, ¿puedo recuperarlas a partir de la carpeta data(son tanlas tipo MyISAM) de MySQL?

    he intentado reparar los indices de las tablas con la herramienta myisamchk pero al arrancar MySQL no me muestra las BBDDs(pero la carpeta de la BBDD existe en la carpeta data de MySQL) ¿alguna sugerencia?

    Gracias

    ResponderEliminar