Clicky

Bonito error HY000 en Joomla

error HY000 en Joomla

HY000 SQLSTATE[HY000]: General error: 144 Table

Perdonad el título, alguno puede que me diga que no existen errores bonitos ¿cómo pude ser bonito un error si tengo el sitio web fuera de línea? Pero si os fijáis en la imagen del error estaréis de acuerdo conmigo en que resulta cuando menos espectacular.

Me he dado cuenta de que el sitio estaba caído (dos horas, casi nada!!, culpa mía por no tener abierto el cliente de correo en ese momento, pues recibo un email cuando ocurren estas cosas de servidores fuera de línea) al entrar a publicar un artículo y ver en la administración de Joomla este error:

error HY000 en la administración de Joomla

Se ha producido un error.
HY000 SQLSTATE[HY000]: General error: 144 Table './aprueba/qjkn2_k2_items' is marked as crashed and last (automatic?) repair failed

Buscando en Google hay alguna cosilla sobre el tema, pero no bien explicado. Así que voy a detallar la causa del error y cómo solucionarlo.

Esta tarde tuve que reiniciar los servidores web Apache y de base de datos MySQL-MariaDB por una subida repentina del load average que no sé a que se ha debido, si a un ataque o a que cambié anteriormente la forma de gestionar los procesos de Apache. El fallo se ha producido sólo en un sitio web (Vídeos virales - https://pirman.es) que ya me estaba dando problemas con los ajustes en PHP-FPM y el módulo Fcgid de Apache.

base datos con PDO en JoomlaEn este sitio también cambié ayer la forma de gestionar la base de datos de MySQLi a PDO (Objetos de Datos de PHP - PDO por sus siglas en inglés *imagen de la derecha*) que es una manera más eficiente de manejar el código sin modificarlo. Pero de este tema ya hablaré en otro momento cuando consiga migrar Háblame del Mar que utiliza la muy antigua biblioteca ezSQL y que me esta dando muchos dolores de cabeza.

A lo que vamos. Para solucionar este error puedes hacerlo de dos formas:

1. Desde PhpMyAdmin

Acceder a la base de datos del sitio mediante PhpMyAdmin y buscar un tabla que diga "en uso" y no tenga ningún contenido (podrás ver que el campo nº de filas y Tipo están en blanco y en su lugar aparece "en uso" - lo siento pero con las prisas se me ha olvidado hacer una captura de pantalla).

Si tienes posibilidad de acceder al servidor ve al registro de errores (log) del motor de base de datos que estés utilizando y verás algunos errores como estos (en mi caso MariaDB que en CentOS se encuentra en la ruta /var/log/mariadb/mariadb.log):

160912 0:57:52 [ERROR] mysqld: Table './aprueba/qjkn2_k2_items' is marked as crashed and last (automatic?) repair failed:

Para solucionarlo desde PhpMyAdmin deberás marcar la casilla de la tabla dañada y elegir la opción "Reparar la tabla":

reparar en phpMyAdmin tabla dañada

La salida será algo como esto:

tabla k2_items reparada

2. Desde la consola de Linux

Abrimos una terminal y tecleamos:

# mysqlcheck -u [usuario] -p[password] --auto-repair --check --all-databases;

Donde [usuario] es el propietario de la base de datos o el servidor y [password] su contraseña, en ambos casos sin los corchetes. Por ejemplo para el usuario root con una contraseña 1a2b3c4d, la instrucción quedaría sí:

# mysqlcheck -u root -p1a2b3c4d --auto-repair --check --all-databases;

En el registro de MariaDB aparecerá en ambos casos la tabla dañada como reparada:

160912 2:43:50 [Note] Found 1627 of 0 rows when repairing './aprueba/qjkn2_k2_items'

Y en PhpMyAdmin aparecerá (en mi caso) en nº de filas 1627 y en Tipo MyISAM en lugar del blanco que veíamos antes con "en uso"

Como siempre, espero haber ayudado!!!

Jesus_Caceres