mysql sql phpmyadmin innodb

mysql - Restaurar la estructura de la tabla desde archivos frm e ibd



phpmyadmin innodb (5)

Estoy tratando de restaurar una base de datos en PMA pero solo tengo acceso a los archivos frm e ibd, no a los archivos ib_log que entiendo que necesita.

Sé que es posible que no pueda recuperar los datos de la base de datos, pero ¿es posible recuperar la estructura de las tablas de los archivos frm?


En realidad, esto es bastante fácil siempre y cuando sepas cómo hacerlo, y no se necesitan programas externos ni comandos de shell.

Los datos de la base de datos se almacenan en C: / xampp / mysql / data / o similar de forma predeterminada. Las carpetas son las tablas de la base de datos. Dentro de cada carpeta, el archivo .frm son las columnas. El .ibd contiene los valores de la fila.

Primero cree las bases de datos en PHPMyAdmin.

Obtenga la consulta SQL generada desde este sitio, en el menú Recuperar estructura> Desde archivo .frm:

https://recovery.twindb.com/

Cargue cada archivo .frm y luego copie y pegue estas consultas en el comando SQL para crear las tablas en PHPMyAdmin.

Luego, en cada tabla, haga esta consulta SQL:

ALTER TABLE table_name DISCARD TABLESPACE

Esto eliminará automáticamente el nuevo archivo .ibd del directorio de la base de datos. Copie el archivo .ibd antiguo en la carpeta de la base de datos. Ejecute el siguiente comando para activar la tabla nuevamente:

ALTER TABLE table_name IMPORT TABLESPACE

¡Y eso es! Debería poder ver y acceder a todos sus valores anteriores nuevamente.


InnoDB necesita los archivos ib_log para la recuperación de datos, pero también necesita el archivo ibdata1 que contiene el diccionario de datos y, a veces, contiene datos pendientes para las tablas.

El diccionario de datos es una especie de sistema duplicado que registra la estructura de la tabla y también hace coincidir una identificación de la tabla con el archivo físico .ibd que contiene los datos de la tabla.

No puede simplemente mover archivos .ibd sin el diccionario de datos InnoDB, y el diccionario de datos debe coincidir con la identificación de la tabla que se encuentra dentro del archivo .ibd. Puede volver a conectar un archivo .ibd y recuperar los datos, pero el procedimiento no es para cardíacos. Ver http://www.chriscalender.com/recovering-an-innodb-table-from-only-an-ibd-file/

Puede recuperar la estructura utilizando los archivos .frm con algunos trucos de archivos, pero al principio no podrá crearlos como tablas InnoDB. Aquí hay un blog que cubre un método para recuperar archivos .frm como tablas MyISAM: http://www.percona.com/blog/2008/12/17/recovering-create-table-statement-from-frm-file/

No podrá usar PMA para esto. Necesita acceso de superusuario al directorio de datos en el servidor.


Puede recuperar la estructura de la tabla a partir de archivos .frm y datos de archivos ibd.

Usando la herramienta mysqlfrm que es parte de MySQL Utilities

shell> mysqlfrm --diagnostic myfile.frm

Recree la tabla en una base de datos del mismo nombre utilizando la estructura de la tabla.

mysql> CREATE mytable (int i);

Deseche el espacio de tabla de la tabla recién creada.

mysql> ALTER TABLE mytable DISCARD TABLESPACE;

Copie el archivo .idb huérfano de su directorio de respaldo al nuevo directorio de la base de datos. Asegúrese de que el archivo .ibd tenga los permisos de archivo necesarios.

Importe el archivo huérfano .ibd. Se emite una advertencia que indica que InnoDB intentará importar el archivo sin verificación de esquema.

mysql> ALTER TABLE r IMPORT TABLESPACE;SHOW WARNINGS;


Restablecí la tabla solo con archivos .frm y .idb .

Obtenga la consulta SQL para crear las tablas

Si ya conoce el esquema de sus tablas, puede omitir este paso.

  1. Primero, instale MySQL Utilities . Luego puede usar el comando mysqlfrm en el símbolo del sistema (cmd).

  2. En segundo lugar, obtenga las consultas SQL de los archivos .frm usando el comando mysqlfrm :

    mysqlfrm --diagnostic <path>/example_table.frm

Luego puede obtener la consulta SQL para crear la misma tabla estructurada. Me gusta esto:

CREATE TABLE `example_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(150) NOT NULL, `photo_url` varchar(150) NOT NULL, `password` varchar(600) NOT NULL, `active` smallint(6) NOT NULL, `plan` int(11) NOT NULL, PRIMARY KEY `PRIMARY` (`id`) ) ENGINE=InnoDB;

Crea las tablas

Cree las tablas con la consulta SQL anterior.

Si los datos antiguos aún existen, es posible que primero deba descartar la base de datos y las tablas respectivas. Asegúrese de tener una copia de seguridad de los archivos de datos.

Restaurar los datos

Ejecute esta consulta para eliminar nuevos datos de la tabla:

ALTER TABLE example_table DISCARD TABLESPACE;

Esto elimina las conexiones entre el nuevo archivo .frm y el archivo (nuevo, vacío) .idb . Además, elimine el archivo .idb de la carpeta.

Luego, coloque el antiguo archivo .idb en la nueva carpeta, por ejemplo:

cp backup/example_table.ibd <path>/example_table.idb

Asegúrese de que el usuario de mysql pueda leer los archivos .ibd , por ejemplo, ejecutando chown -R mysql:mysql *.ibd en la carpeta.

Ejecute esta consulta para importar datos antiguos:

ALTER TABLE example_table IMPORT TABLESPACE;

Esto importa datos del archivo .idb y restaurará los datos.


También puedes probar con la utilidad mysql.

Desde el archivo book.frm a un archivo book.sql:

mysqlfrm --server=root:mysqladmin@localhost:3306 D:/yahwehdb/yahweh_altera/book.frm > D:/yahwehdb/yahweh_altera/book.frm/book.sql --diagnostic --port=3307 --user=root

Desde un directorio que contiene todos los archivos .frm a un archivo all.sql:

mysqlfrm --server=root:mysqladmin@localhost:3306 D:/yahwehdb/yahweh_altera > D:/yahwehdb/yahweh_altera/all.sql --diagnostic --port=3307 --user=root