viernes, 4 de mayo de 2012

MySQL [ERROR] Cannot find or open table

En este caso en particular voy a hablar de un error que aparece cuando haces un respaldo de manera errada de MySQL, específicamente con las tablas INODB.

Muchos usuarios de MySQL acostumbran a mover tablas de una base de datos a otra simplemente copiando los archivos de un lado a otro, lo cual si bien no es el mejor método funciona sin problemas para las tablas MyISAM, sin embargo si hacemos esto para las tablas INODB la cosa no resulta bien y seguramente tendras un error del tipo [ERROR] Cannot find or open table "XXX/xxxx" aunque la misma exista y tenga los permisos y usuarios correctos.

Que hacer en este caso, bueno en mi experiencia en particular se resolvió el problema de manera sencilla (bueno después de googlear un rato) puesto que también había copiado el archivo ibdata1 que se encuentra en la raíz de mysql (usualmente /var/lib/mysql). Los pasos que realice fueron:
  1. Detener el mysql
  2. Remover el ibdata1 (de la nueva instalación)
  3. Copiar el ibdata1 de la instalación anterior (solo este archivo)
  4. Revisar los permisos (664) y usuarios (mysql:mysql) sean correctos
  5. Reiniciar el mysql
Con esto quedo resuelto el problema, otra cosa importante es  que en mi caso también estaba usando el parámetro innodb_file_per_table en la instalación anterior por lo que es necesario tener esto habilitado en el my.cnf antes de reiniciar el servicio.

En el caso que no tengas el ibdata1 viejo, la cosa se pone más complicada por lo que pude leer y probar hasta cierto punto (cuando me di cuenta que lo podía hacer de la forma anterior pues lo deje así), en todo caso lo que se debe hacer se explica en http://www.chriscalender.com/?p=28

Espero que esta información sea de ayuda.