Subscribe Us

Header Ads

Recuperar tablas corruptas en MYSQL usando myisamchk

Hace poco me he encontrado con un par de tablas corruptas en una BBDD de MySQL y a continuación  explico como es la forma más fácil de recuperar esas tablas marcadas como corruptas.


Yo me tope con este fallo al tratar de hacer un dump de la BBDD:

$ mysqldump -u root -p mibasededatos > ./mibasededatos.sql
got error 144 Table 'mibasededatos.mytable' is marked as crashed and last 
(automatic?) repair failed" when using LOCK TABLES
Así que tenemos dos opciones: la ‘lenta‘ y la ‘rápida‘.

La lenta es iniciar sesión en MySQL e intentar reparar la tabla en cuestión de la siguiente manera:
$ mysql -u root -p mibasededatos > repair table mytable;
En mi caso esta opción fue un poco frustrante ya que no devuelve ninguna salida, una forma de ver 
el progreso de la recuperación, es iniciar otra sesión visualizar los procesos activos:
$ mysql -u root- p mibasededatos
> show processlist;

La rápida y mas verbose es usar el comando: myisamchk. Con esta opción debemos buscar el directorio donde se encuentran los archivos de la BBDD, en mi caso: /var/lib/mysql/mibasededatos  




Primero debemos comprobar que ficheros están corruptos ejecutando:

 $ myisamchk -v /var/lib/mysql/mibasededatos/*MYI

Verán que de esta forma el comando nos va informando de cada uno de los ficheros que esta chequeando y de cual exactamente esta corrupto. Una vez tengamos el fichero corrupto, podemos ejecutar:

$ myisamchk -r /var/lib/mysql/mibasededatos/mytable#P#pmax.MYI  

Si de esta forma la tabla no se puede recuperar podemos forzarlo, pero tener en cuenta que esta opción podría provocar perdida de datos:

  $ myisamchk -fr /var/lib/mysql/mibasededatos/mytable#P#pmax.MYI

Publicar un comentario

0 Comentarios