miércoles, 19 de mayo de 2010

Recuperacion de Bases de Datos MySql


Hoy por la tarde me informaron de un problema, uno de los usuarios con privilegios de acceso al servidor Windows permitió que un 3ro que desarrollo una aplicación que se ejecuta en esta empresa instalara sin avisar a nadie un pack de aplicaciones conocido como appserver, es muy útil para que los novatos que se inician en la programación de PHP y MySql le configure el apache el PHP y el MySql; el único inconveniente es que esta persona no previo ni pregunto si se tenia ya una instalación de MySql en el servidor (yo ya tenia aplicaciones que desarrolle las cuales ya contaban con una correcta instalación de MySql) esta persona inicio la instalación de el pack appserver por lógica comenzó a arrojar errores en la ejecución por la otra instancia de MySql.


Debido a los errores esta persona decidió desinstalar su Pack de aplicaciones el único inconveniente es que daño de manera definitiva la instalación estable que ya se tenia en el servidor; fue en ese momento que se informo todo lo sucedido por lo que me di a la tarea de buscar una solución.


Que se debe revisar:

1.- Archivos de MySQL tanto físicos como binarios de la base de datos


Que la instalación se encuentre aun, esto se hace revisando el directorio donde se encuentra los binarios de MySql, por defecto se encuentran en:

C:\Program Files\MySQL\MySQL Server 5.1

Aunque si uno lo definió diferente durante la instalación uno tiene que recordarlo



ahora bien si los binarios existen hay que revisar si los archivos físicos de la base de datos se encuentran aun en  el servidor puede puede darse el caso de que al des-instalar el paquete los hubiera borrado también; esto presento un verdadero reto, por ningún lado podía encontrar los archivos,  todo por que al instalar la base de datos no personalice la ubicación de estos archivos lo deje en la opción por defecto "instalation dir" o algo similar.


Después de mucho navegar y de leer y releer el manual en línea del sitio de MySql.com encontré que supuestamente la ruta debía ser en el directorio de instalación el un subdirectorio llamado data; cual fue mi sorpresa al descubrir que dicho subdirectorio no existe.






Podran imaginar mi sorpresa si en todos lados decia que debia estar hay; busque y rebusque por todos los directorios y no conseguía encontrar los archivos físicos de el servicio de MySql, intente buscar archivos con la terminación *.Frm o .opt ( que son terminaciones de los archivos fisicos de Mysql), dichos archivos no aparecían en los resultados de las búsquedas de sistema por ningún lado ni una ni otra terminación; esto incluso me llevo a pensar que la instalación  y des inflacionista del involucrado había terminado con mi información; también recordé que el archivo que almacena la mayor parte de la información se llama "ibdata" sin ninguna extencion pero aun así nada. 


Estaba por desistir y aceptar que mi información había pasado al cielo cuando se me predio el foco acerca de revisar un instalación de MySql en un equipo de desarrollo y testing que tenia a la mano; cual fue mi sorpresa al ver que aun en un equipo con el MySQL funcionado la carpeta Data no se encontraba en la carpeta de instalación de MySql y que la configuración había sido la misma que la del servidor. Al tampoco poder encontrar  los archivos en la búsqueda sobre este equipo deduje que los archivos deberían permanecer ocultos y por eso no podía localizarlos el dilema era entonces donde estaban????.


Como ya les mencione por mas que busque y busque ne la red no hallaba la ubicación de los ficheros o de la carpeta data que no fuese en el directorio de instalación en donde por cierto no los tenia mi servidor ni mi maquina de prueba; finalmente no supe de donde la respuesta llego hasta mi tome la maquina cliente y ejecute el administrador de MySQL que se inclye en le gui Tools  y procedí a revisar en sus configuraciones en la pestaña de general donde viene la ubicación de los archivos y la carpeta Data






Y si final mente  la ruta donde se encontraban mis archivos físicos de la Base de Datos:




C:\ProgramData\MySQL\MySQL Server 5.1\Data\






Esto de alguna forma aseguraba que ya tuviera salvo parte o alguna información ahora ya que tenia eso lo primordial era iniciar el servicio de Mysql en el servidor, y así probar estos archivos; mas adelante explicare como hice esto; el paso a seguir es ver que paso con MySql en el server




   2. El servicio de MySql


Una vez que se comprueba que los archivos se encuentran se procede a revisar si los servicios de MySql se están ejecutando de forma correcta; esto se revisa mediante la utilidad de servicios de Windows Server:








Esta opción despliega una pantalla similar a esta:



En esta buscaremos el servicio de MySql que es como se nombra por default, aunque también puede que se llame de otra manera si es que se le cambio el nombre durante la configuración de la instancia de MySql; el servicio como se ve se mostraba inactivo al iniciarlo me devolvía el siguiente mensaje:

Este mensaje es bastante desconcertante y en verdad no dice mucho; adicional a esto intente usar la herramienta de configuración de instancias de MySQL; al terminar me aprecia que no podía ejecutar por un error:0 lo cual tampoco nos dice y según busque por Internet eta pantalla es muy odiada
Ya antes me habían ocurrido errores al terminar de crear instancias de MySql pero nunca un error así general mente los problemas se originaban en la parte de apply security esos son fáciles de arreglar; ahora bien este error es un poco mas complejo busque por la red y encontré un par de respuestas raras, buscano entre el sitio de MySql y  otros encontré este video de youtube Puedes verlo aquí (puede que alguno le funcione), eso no funciono así que de pues de intentar mil y una cosas decidí terminar con todo rastro de MySql de mi servidor tome la carpeta de los datos (\data\) e hice uso de una de las vulnerabilidades que conozco de MySql para comprobar que mi información estaba completa y a salvo; de hecho este truco puede usarse para malos fines y les pido que no hagan mal uso de esto simple mente que les sea útil para en caso de que alguna ves se vean en la misma necesidad que yo de abrir los datos de MySql en otro manejador y ver la información de todas sus bases con el root de otro equipo, como se hace esto es muy sencillo.


   3. El Recuperando información de MySql explotando una vulnerabilidad del motor de base de datos.



  1. Realizar la Instalación de un servidor de MySql en otro equipo completamente distinto (Puede ser virtual).
  2. crear un instancia valida de MySql en la instalación nueva
  3. Identificar  o personalizar la carpeta destino de los archivos físicos de la nueva instalación
  4. Detener el servicio en la maquina alternativa y copiar los archivos del servidor dañado de la carpeta Data (C:\ProgramData\MySQL\MySQL Server 5.1\Data\ si es que es l miso que el mio)  a una unidad extraible y reemplazar los archivos del dañado con el de la nueva instalación.
  5. Iniciar el servicio de MySql 
  6. Si tenemos suerte y los archivos son compatibles que generalmente lo son y estos no se dañaron podremos acceder a la información del servidor dañado con las credenciales del nuevo servidor y realizar un respaldo de forma correcta de nuestra información de la forma en que mas nos acomode yo prefiero usar el MySql Administrator para estos menesteres pero es elección de cada persona.
  3. Instalación forzada de MySql como si fuera nuevo.

Ahora bien con la información a salvo en mi respaldo podemos modificar cualquier cosa con respecto a MySql sin preocupación.

Ahora bien ¿como eliminar la información que reside en nuestro equipo referente a MySql?

La respuesta me llevo un rato buscarla y comprobar que Mysql una ves des instalado no dejara rastros en el registro ni nada parecido pero no, lo único que se requiere eliminar las carpetas que ya teníamos identificadas la carpeta de instalación y datos( en mi caso las carpetas "C:\ProgramData\MySQL\MySQL Server 5.1\Data\" y "C:\Program Files\MySQL\MySQL Server 5.1")

Una ves eliminadas las carpetas procedemos a realizar una nueva instalación la cual se ejecuta sin ningún problema, cargamos nuestros respaldos según nos acomode en mi caso igual haciendo uso del MySql Administrator y Listo información recuperada y servidor levantado.

Espero que esto les ahorre las horas que pase yo haciendo pruebas e investigando y recuerden que lo expresado aqui es para fines educativos .... y que yo no me responsabilizo de como lo utilicen... solo espero que les ayude como me ayudo a mi el saberlo..

1 comentario:

  1. Brothe.. y si el problema fue el borrado de los datos al reemplazar la bd llena de datos con otra con la misma estructura solo que sin datos.. se podrá recuperar

    ResponderEliminar