Como recuperar tablas MySQL teniendo archivos frm ?

Iniciado por Azielito, 3 Noviembre 2009, 21:20 PM

0 Miembros y 1 Visitante están viendo este tema.

Azielito

Pues en la carpeta "data" de mysql tengo la carpeta de la base de datos, dentro tengo los archivos FRM y un archivo opt, el problema es que cuando entro com PHPMyAdmin me dice que no existen tablas en la base de datos [ésta si la muestra]

Intente hacer
Código (sql) [Seleccionar]
REPAIR TABLE `tabla1`, `tabla2`, `...`

Y me dice
Cita de: mysqldb.tabla1    repair    error    Table 'db.tabla1' doesn't exist
db.tabla2    repair    error    Table 'db.tabla2' doesn't exist
db. ...    repair    error    Table 'db. ...  ' doesn't exist


Buscando en internet encuentro que hay una herramienta para reparar [http://kopernix.com/?q=myisamchk]... pero con archivos MYI :xD






Alguna [sugerencia|idea] ?

:D

^Tifa^

#1
Hola.

1 - REPAIR TABLE
2 - Myisamchk
3 -Mysqlcheck

Solo funcionan sobre tablas almacenadas en motores Myisam. Si solo tienes los archivitos *.frm me temo que no hay forma de restaurar ninguna data de ninguna tabla. Los archivos *.frm guardan las definiciones (nombres de tablas y campos) de una tabla sin embargo, la data que compone (o sea los registros, indices, etc) de esas tablas estan repartidas en los archivos logicos de cada motor de almacenamiento, sino tienes estos archivos No puedes restaurar datos de ninguna tablas:

Para Myisam: necesitas ademas los archivos MYI y MYD (el primero de indices y el segundo data)

Para InnoDB: necesitas ademas los archivos ibdata y los ib logs.

La unica forma de recuperar datos (registros) de archivos *.frm es si estamos hablando de Vistas y no de Tablas, pero me temo que haz mencionado Tablas y no Vistas.


Azielito

Pero la estructura si la puedo recuperar? los datos deberian estar en algun otro lado "fisico", el sistema que maneja esas tablas tambien lo tengo, pero queria ahorrar un poco de tiempo al recordar/ver fuente/hacer las tablas nuevamente :')

^Tifa^

Ok

No se como llegaste a la condicion de perder los indices y la data  :¬¬   :¬¬  no quiero imaginarme que estes jugando a eliminar a proposito archivos de MySQL con una mala intencion  :¬¬   :¬¬   :¬¬ 

Si tanto te preocupan tus tablas perdidas, sencillamente vete a la carpeta data de MySQL, y elimina la carpeta con todos sus archivos referente a la base de datos de la cual estas teniendo el problema. (SI Borra la carpeta con todo).

Hecho esto, cuando ingreses al motor y hagas un show databases no veras dicha base de datos, bien sal del motor, y en la misma carpeta Data de MySQL crea una carpeta nueva (Con el mismo nombre de la DB eliminada) entra a dicha carpeta y crea manualmente (aunque sean archivos vacios) y bajo el mismito nombre, todos los archivos extension *.frm que tenias mas un extra *.opt 

A esa carpeta especificale que su owner y grupo es el usuario mysql, y nada cuando entres al motor, veras tu base de datos ahi y dentro las tablas.... y posiblemente la data

PD: Si estas esperando que te diga en que archivo fisico el motor guarda esto, no lo hare  :P  no veo buenas intenciones en lo que estas realizando es todo.

Azielito

oka! ahora mismo lo voy a probar ...




Ya esta, aparece la base de datos, el nombre de las tablas, pero no la estructura :xD

Código (sql) [Seleccionar]
SHOW FULL FIELDS FROM `inspectores` ;
#1033 - Incorrect information in file: '.\db\tabla1.frm'


Voy a probar a poner el contenido de los archivos antigüos en los nuevos, o los archivos asi como estan :xD





Copiando los archivos no funciono, de nuevo me dice que no hay tablas... ahora voy a ver si vaciando el contenido






No, fue el mismo resultado [algo asi me temia =\ ]
















no tengo malas intensiones jehehehe, es un sistema que estaba haciendo y de un dia al otro no reconocio la base de datos... quien me conoce sabe que no me gusta eso de destruir cosillas y menos entrar a lugares sin permiso :') pero ese es otro tema ...

el-brujo

Los archivos .frm son sólo las definiciones de tabla, y tienes uno por cada tabla (tenga el motor que tenga). Para restaurar físicamente la base de datos, necesitas:

- Tablas MyISAM: Un archivo .MYD y otro .MYI para cada tabla

fuente:
http://forums.mysql.com/read.php?71,117096,117096#msg-117096

^Tifa^

#6
Perdona, se me olvido aclararte mi sugerencia para recuperar tablas y sus registros con archivos *.frm solo aplica siempre y cuando no se haya reiniciado o hecho flush a la metadata del motor MySQL  ;)  si por X o Y razon, reiniciaron el servidor o el motor de la DB despues que te ocurrio ese problemon que llevas... me temo que se perdio toda la data de la cache en memoria por ende, no podras recuperar nisiquiera la estructura de las tablas que se guardan en los *.frm   :-(   :-(  

Lo que te pego el-brujo y lo que te especifique mas arriba involucra el mismo tema (No hay forma de recuperar nisiquiera la estructura de una tabla en base solo a archivos *.frm),  la sugerencia que te di aplica porque llama toda la info de la cache de memoria, pero si reiniciaste el motor de base de datos o el servidor Linux... me temo que no hay nada que puedas hacer. Ya te lo expuse mas arriba y mira que han vuelto a postearte la notificacion.

Azielito

ups =S si, el server se reinicio, es un server de donde desarrollo antes de subirlos a un server "dedicado" =\

Seguire buscando, pero creo que seria mejor ir a ver el codigo del sistema para ver los querys que hay para hacer la base de datos de nuevo =S




@el-brujo, tifa tiene razon [ :xD no, no estaba dudando de ti :xD ] mira:
http://forums.mysql.com/read.php?71,117096,220790#msg-220790

Pues voy a ver si con algun programa de recuperacion de archivos encuentro esos .MYD y otro .MYI :¬¬

:¬¬





Gracias por la ayuda a los dos !! :D

^Tifa^

Lo siento mucho la verdad  :-(   :-( 

Te habia dicho que no se podia (porque realmente no se puede con lo que dispones) pero luego pense que si tu servidor era un hosting compartido o asi, posiblemente no habias o no se habia reiniciado el motor, por lo que si, existia la posibilidad de recuperar todo con los archivitos *.frm nada mas.... (Ya que la info el motor lo hubiese llamado desde la memoria cache  ;) ) Pero si tu mismo me confirmas que reiniciaste el motor, lo siento ya si que no hay en absoluto nada que puedas hacer  :-(   :-(   :-(  me hubiese gustado ayudarte, pero no te dire mentira no es posible solo con los archivitos *.frm y un motor reiniciado   :-(  Si al menos hubieras tenido un backup logico de esas tablas algo hubieras podido recuperar.

Azielito

see, jahahaha, es la mala costumbre de no hacer respaldos :xD!!! por cierto, ahora me voy al dedicado a respaldar todas las bases de datos y los sistemas :xD!!!





gracias por la ayuda de nuevo :D