Mysql: Recuperar una tabla ‘Crashed’ (MyISAM)

TOP meneame.net

En las últimas horas me he percatado que en las páginas de este mismo blog en donde se muestran comentarios ponía, en lugar de estos, un mensaje de error que citaba:

WordPress database error: [Table './AAA/wp_comments' is marked as crashed and last (automatic?) repair failed]
SELECT * FROM wp_comments WHERE comment_post_ID = ‘XXX’ AND comment_approved = ‘1′ ORDER BY comment_date

En donde AAA es el nombre de la tabla que contiene la tabla corrupta y XXX es el id del post que en ese momento se está viendo.

Tras buscar en google “how to repair crashed table” encontré este enlace del faq de mysql en donde de forma extensa explican como se puede tratar de recuperar una tabla según su error.

Para comprobar el tipo de error que hay en la tabla, hay que ejecutar myisamchk de la siguiente forma (haste este punto no es necesario parar el demonio mysqld):

root@host:~# cd [path]
root@host:/[path]# myisamchk wp_comments.MYI

En donde [path] es la ruta de nuestras tablas (normalmente /var/lib/mysql/databasename). Esta ha sido la salida del programa myisamchk:

Checking MyISAM file: /[path]/wp_comments.MYI
Data records: 150 Deleted blocks: 0
myisamchk: warning: Table is marked as crashed and last repair failed
myisamchk: warning: 1 client is using or hasn’t closed the table properly
- check file-size
- check record delete-chain
- check key delete-chain
- check index reference
- check data record references index: 1
- check data record references index: 2
- check data record references index: 3
myisamchk: error: Found 151 keys of 150
- check record links
myisamchk: error: Record-count is not ok; is 151 Should be: 150
myisamchk: warning: Found 151 parts Should be: 150 parts
MyISAM-table ‘/chroot/mysql/var/lib/mysql/myblog/wp_comments.MYI’ is corrupted
Fix it using switch “-r” or “-o”

Al parecer (no acabo de comprender de que manera) habia una entrada mas en la tabla de las que el contator tiene marcadas (hay 151, el contador marca 150). Para arreglarlo ha sido tan sencillo como parar el demonio mysqld (importante !!) y:

root@host:/[path]# myisamchk -r -q wp_comments.MYI

La opcion -r significa repair y la opción -q quick, por lo que myisamchk tratará de hacer un recovery rápido de la tabla. En mi caso ha sido suficiente con esto y ya ha vuelto a funcionar la tabla adecuadamente:

root@host:/[path]# myisamchk wp_comments.MYI
Checking MyISAM file: wp_comments.MYI
Data records: 151 Deleted blocks: 0
- check file-size
- check record delete-chain
- check key delete-chain
- check index reference
- check data record references index: 1
- check data record references index: 2
- check data record references index: 3
- check record links

En cambio, si las opciones -r -q no hubiesen sido suficientes, habría que ejecutar myisamchk solo con la opción -r.

Para los despistados, una vez recuperada(s) la(s) tablas(s) corrupta(s) se vuelve a poner en marcha el demonio mysqld y a correr.

Ahora mismo ya funcionan los comentarios y podeis dejar uno mas abajo :D

<< Volver

2 comments to “Mysql: Recuperar una tabla ‘Crashed’ (MyISAM)”

  1. Comment by Sol:

    Excelente información, si me funciono,gracias

  2. Comment by fede:

    Hola,
    estoy intentando recuperar una tabala MyISAM como indicas en el post pero tras fijarlo con’-r -q’ no me muestra la base de datos ¿Que ppuedo hacer?

    Gracias

Contador