Normalmente, cuando empiezas a trastear, a veces, ocurren los desastres. Y eso es lo que me he encontrado con la base de datos de mi tesis, que, de buenas a primeras, se ha corrompido, y me es imposible acceder a ella. O intento acceder y no veo nada, a pesar de que los ficheros tienen bastante tamaño (algunos).
NOTA: Este tutorial lo estoy escribiendo a la misma vez que lo voy ejecutando, sin ni siquiera saber si el resultado será el esperado. Haga siempre una copia de seguridad antes de cualquier acción, por lo que pueda pasar!
Al principio, me resultaba imposible incluso correr el servidor, pero después de varios cacharreos, me encuentro con que puedo arrancar el servidor, pero no veo ninguna tabla:

Como puedes comprobar, hay un problema en la secuencia de números del log, que no cuadran, y …. al ver la base de datos completa en el administrador, tengo toda la estructura, pero ninguna tabla:

Sin embargo, si accedemos a los ficheros, se puede comprobar de que están bastante llenos:

Después de varias averiguaciones, y buscar en Internet diferentes soluciones, el problema sucede porque el fichero ibdata1 no está, o está mal.
Recuperando un backup
Menos mal, que disponía de un backup de hace un tiempo, y parte de las bases de datos las tenía disponibles, si bien no con lo último.
Así que, una de las soluciones que me han planteado es la que voy a probar aquí:
- Migrar la estructura de la base de datos
- Parar el servidor
- Copiar el directorio de la base de datos a reparar
- Volver a arrancar el servidor
Así que, cargamos el fichero sql con la copia del directorio, y … obtenemos un “bonito” error 1010:

Básicamente, la base de datos no puede borrar ese directorio, tal y cómo aprendí aquí. Así que, vamos al explorador de archivos, y borramos el directorio directamente:

Volvemos al administrador heidiSQL (también puedes usar MySQL WorkBench) y volvemos a ejecutar el script de creación de la estructura de la base de datos a recuperar, y ahora se ejecuta correctamente:

En la siguiente imagen tenemos la estructura de la base de datos que vamos a intentar recuperar:

Ahora toca parar la base de datos. Cómo estamos con xampp, ejecutamos mysql_stop desde una línea de comandos:

Ahora es el momento de reemplazar el directorio que se ha creado, por el que en realidad contiene los datos, que hemos copiado previamente en otra ubicación.

Por precaución, he decidido renombrar el directorio, en lugar de borrarlo directamente (siempre hay tiempo de borrar!!!). Y volvemos a arrancar el servidor:

Lamentablemente, MySQL se da cuenta de nuestra “jugada”, y protesta enérgicamente: detecta que el id no se corresponde con lo que debiera y nos envia la solución: https://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting-datadict.html.
Así que, vuelta a ejecutar el script de recreación de la base de datos, tras nuevamente, borrar la base de datos. Ahora hay que escribir la siguiente instrucción: ALTER TABLE solar_comun._version DISCARD TABLESPACE;
Ahora, podemos copiar los ficheros de la tabla _version sin problema.
Y ejecutamos:
ALTER TABLE solar_comun._version IMPORT TABLESPACE;
SHOW WARNINGS;
Y el resultado es:

Y probamos a ver qué ha sucedido con la tabla _version:

Y tenemos nuestra tabla de vuelta. Ahora, podemos ejecutar lo mismo con el resto de tablas, y tendremos recuperada nuestra base de datos con la última versión.
Lecciones aprendidas de este episodio
Cómo de todo hay que sacar lo bueno, me quedo con que aun disponiendo de los ficheros .frm y .idb es posible recomponer la base de datos que se ha corrompido.
Es muy necesario conocer la versión concreta de la base de datos, en mi caso, era MySQL 5.6.24, ya que es vital para que la recomposición de la base de datos sea correcta.
Dado que el problema ya está ocasionado, es conveniente ir tabla a tabla, una a una, porque hay muchos pasos que dar, y no seguir el orden puede ocasionar que el resultado no sea el esperado.
Y por último, que las copias de seguridad están para algo, y si no, puedes leer esta entrada que ya escribí en 2013, o esperas a una nueva actualización de copias de seguridad que en breve publicaré también en el blog.
Al final, conseguí recuperar la base de datos al completo:

Espero que les haya resultado de utilidad, y os invito a que colaboréis con el blog con vuestra donación.