Recuperar tablas MySQL cuando sólo lo archivos .frm y. EII están disponibles

Cómo resolver “Error MySQL #1146 -Mesa no existe” causadas por mover archivos .IDB (InnoDB) directamente entre directorios. (espacio de tablas).

logo_mysql

Problema

Muchos de los problemas que tenemos son problemas que hemos creado. Sólo había creado un sitio web usando WordPress y pensamiento: Por qué ver cómo esto funciona en PHP 7? Ok, como mi WampServer utiliza PHP 5.6, así que tuve que “feliz” idea para mejorar el WampServer 2.5 (Apache-2.4.9, 5.6.17 MySQL, PHP 5.5.12) para WampServer 3.0.6 (Apache 2.4.23, MySQL 5.7.14, 5.6.25 PHP y Php 7.0.10).

Claro, Iniciado por copia de seguridad, pero mi gran resbalón se decide no exportar SQL desde tal sitio, En su lugar, acabo de hacer una copia de los archivos de MySQL (Datos de MySQL) y la aplicación (sitio www). Yo confiaba en que podría funcionar, como las otras veces.

Después de instalar el WampServer nuevo con PHP 7, poner los archivos de copia de seguridad y la aplicación, sólo cuando fui a probar el navegador, no mostrar la página web, pero la pantalla de instalación de WordPress como si fuese un nuevo sitio. Se congeló! Abrir PHPMyAdmin y compruebe para ver si la base de datos estaba bien y vi que, A pesar de estar listados en la base de datos, Cuando usted hace clic en la parte superior de la tabla para ver los datos del siguiente mensaje de error:

  MySQL Error #1146 -Tabla <TABLE_NAME> doesn ' t existe

Yo he estado buscando y acabo de enterar que usted sólo puede copiar o mover los archivos directamente a otro directorio de MySQL MySQL si los archivos son tipo MyISAM, aquellos con extensión. frm. MYD. MYI. No sé lo que pasó, pero mi base de datos aparecieron como InnoDB (.FRM y BID). Por desgracia, sólo después del hecho que alertó a MySQL documentación:

  Se puede mover libremente .Archivos de EII entre directorios de bases de datos ya que Usted puede con ficheros de tablas MyISAM. 
  La definición de la tabla almacenada en el espacio de tablas InnoDB compartido incluye el nombre de la base de datos. 
  La transacción ID y registro secuencia de números almacenados en los archivos del tablespace también difieren entre las bases de datos.

Solución

Cheguei a ver simples soluções de algumas, mas vou descrever aqui una única realmente funcionou para mim, fino-velada de parecer bem mais complexa, encontrada sin Post “Restauración de mesa(s) la base de datos MySQL cuando sólo están disponibles archivos frm o EII“.

Antes, Sin embargo, un título de conhecimento, vale lembrar em relação ao tipo InnoDB, MySQL la estructura de protección en archivos y datos en la EII .frm.. Suficiente teoría, Vamos a cortar a la persecución!

Paso 1: Volver a crear la estructura de los ficheros .frm

Como dijo, el frm contiene la estructura de la tabla. En primer lugar tenemos que recuperar esta estructura para luego rellenar los datos. Usted puede hacer esto 3 diferentes métodos que se describen a continuación, pero antes, Déjenme decirles algo acerca de la “Utilidades de MySQL”.

Utilidades de MySQL | mysqlfrm

Si no desea utilizar el primer método propuesto (En línea) por lo que es necesario utilizar la herramienta “mysqlfrm” proporcionados por el “Utilidades de MySQL“.

Esta herramienta extrae la estructura de datos y generar la creación de secuencia de comandos SQL. Por esta, Descargar “Utilidades de MySQL” (algo como mysql-utilidades-1.6.4-winx64.msi) y lo instalamos.

Abrir la consola (Comando / De la) y utilice el comando CD para mover el directorio de instalación predeterminado (algo así como C:\Utilidades de C:Program FilesMySQLMySQL 1.6\). Tenga en cuenta que dentro de este directorio es el archivo ejecutable mysqlfrm.exe.

  CD "C:\C:Program FilesMySQLMySQL utilidades 1.6"

Elegir sólo uno de los métodos a continuación para extraer la estructura de la tabla contenida en los ficheros .frm:

1º Método | En línea

1. Ir al sitio web HTTPS://Recovery.twindb.com/;
2. Haga clic en el menú “Recuperar la estructura” y luego en “archivo FRM.“;
3. Haga clic en el botón “Explorador…” y seleccione el archivo frm; y
4. Haga clic en el botón “Subir” y el script de creación de tabla se mostrará en la pantalla.

Es posible enviar múltiples frm archivos una vez generando un solo script con todas las tablas. Sólo para que pueda crear un .zip con todas su .frm antes “Navegador/subir”.

2º Método | Utilizando –diagnóstico

/* Ejemplo genérico */
   mysqlfrm-diagnóstico "<Ruta de origen>/MyTable.frm" > "<Destination/path/recovered_mytable.SQL>"
 
/* Ejemplo en practicar con la tabla wp_posts.frm de los WordPress */
   mysqlfrm --diagnóstico "C:\wampbinmysqlmysql5.6.17datameubancowp_posts.frm" > "C:\recovered_wp_posts.SQL"

3º Método | Utilizando –Servidor

/* Ejemplo genérico */
  mysqlfrm-servidor=raíz:micontraseña@localhost-puerto=3311 "<Ruta de origen>/MyTable.frm" > "<Ruta de destino>/recovered_mytable.SQL"
 
/* Ejemplo en practicar con la tabla wp_posts.frm de los WordPress */
  mysqlfrm --Servidor=raíz@localhost --Puerto=3307 ""C:\wampbinMySQL\MySQL5.6.17\datameubancowp_posts.FRM" > "C:\recovered_wp_posts.SQL"

No use el puerto de MySQL! Elegir cualquier otro disponibles. Tenga en cuenta que el comando redirecciona la salida a un archivo .SQL que se guarda en la ruta especificada (en el caso, C:).

Paso 2: Volver a crear la tabla en la base de datos

En una nueva base de datos, crear una tabla con el script generado en el paso 1. Personalmente instalé una versión limpia de WampServer y utilizar PHPMyAdmin (http://localhost/phpmyadmin /) para crear la base de datos e importar el script SQL que creó en el paso 1 (recovered_wp_posts.SQL). Este script creará 2 archivos en el directorio de la base de datos MySQL:

  SUA_TABELA.desde SUA_TABELA.BID

En mi caso, Estos archivos fueron creados en C:\wamp64binmysqlmysql5.7.14data<mi asiento>. IE, miramos para su instalación y se nota en el directorio fecha Será la base de datos y los dos archivos mencionados.

Paso 3: Quitar el nuevo archivo .IDB

Para extraer el nuevo archivo .IDB, Ejecute el siguiente comando SQL:

/* Ejemplo genérico */
  ALTER TABLE mitabla descartar tablas;
 
/* Exemplo na prática com un wp_posts tabela WordPress */
  ALTER TABLE wp_posts descartar tablas;

Este comando quitar o enlace entre una tabela e o tablas (Donde se guardan físicamente los archivos de base de datos), y quitar el archivo .IDB.

Paso 4: Copiar el antiguo archivo .IDB

El original archivo .IDB (el que contiene los datos) necesita ser copiado al lugar que consiguió en el paso de .IDB 3. Utilice Ctrl + C y Ctrl + V, o suicidarse mediante el uso de la línea de comandos.

Paso 5: Reactivar la mesa

El enlace roto en el paso 3 tiene que restaurar con el siguiente comando:

/* Ejemplo genérico */
  ALTER TABLE mitabla tablas de importación;
 
/* Exemplo na prática com un wp_posts tabela WordPress */
  ALTER TABLE wp_posts tablas de importación;

No se preocupe si recibe algunas advertencias, Sin embargo, Podría ser mal funcionamiento general que aparece el siguiente error:

  #1808 - Falta de coincidencia de esquema (La tabla tiene formato de registro ROW_TYPE_DYNAMIC, .EII archivo tiene formato de registro ROW_TYPE_COMPACT.)

En este caso, Esto sucedió debido a diferentemente que mysql 5.7.14 (Nuevo) crea una tabla por defecto en comparación con Mysql-5.6.17 (ANTIGUO), SEM o ROW_FORMAT = compact.

Por lo tanto, se você está usando MySQL > = ao mysql5.7.14, Tudo você precisa fazer é acrescentar ROW_FORMAT = compact na definição de criação da tabela.

  CREATE TABLE 'wp_posts' (. . .) MOTOR=InnoDB ROW_FORMAT=compacto

Outros errores

Apenas para decriptar registrado, antes de obter sucesso na extracción de mortajas hacen .frm, tive alguns errores:

  # Fuente en localhost: ... conectado.
  # Iniciar el servidor enraícen en Puerto 3304 ... ERROR intentar detener error servidor enraícen.  Id. de proceso = 6648.
  ERROR: Error en la operación Spawn server. Error de servidor clon: Incapaz de comunicarse con nuevo instancia de. Id. de proceso = 6648.. Para diagnosticar la, Vuelva a ejecutar la utilidad y uso el --opción de nivel de detalle para ver los mensajes desde el servidor enraícen y corregir los errores presentados luego vuelva a ejecutar la utilidad.
  ÉXITO: El proceso con PID 6648 (proceso hijo de EPI 7264) ha terminado.
Rastreo (más reciente llamada última):
  Archivo "G:\adebuildsb_0-19921351-1470074463.97Python-2.7.6-Windows-x86-64bitlibsite-packagescx_FreezeinitscriptsConsole.py", línea 27, en <módulo de>
  Archivo "scripts\mysqlfrm.py", línea 422, en <módulo de>
  Archivo ".\mysql\utilities\command\read_frm.py", línea 439, en read_frm_files
  Archivo ".\mysql\utilities\command\read_frm.py", línea 166, en _spawn_server
  Archivo ".\mysql\utilities\command\serverclone.py", línea 180, en clone_server
  Archivo ".\mysql\utilities\common\tools.py", línea 273, en get_mysqld_version IOError: [Errno 13] Permiso denegado: 'version_check'

En el caso específico de WordPress, usted necesita quitar el script que genera el SQL generado bajo. frm, por defecto las entradas todos ‘0000-00-00 00:00:00’, de lo contrario, se captura el error:

  #1067 - Valor por defecto (por defecto) no válido para 'comment_date'

Eso es todo!

Fuentes

http://www.voxteneo.com/restoring-tables-mysql-database-frm-ibd-files-available/

https://medium.com/@alexquick/transporting-mysql-tablespaces-from-5-6-to-5-7-517c01345fbb#.72zermd8b

http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html

https://lanmenezesbr.wordpress.com/2014/10/21/mysql-erro-1146-table-doesnt-exist/

http://stackoverflow.com/questions/7759170/mysql-table-doesnt-exist-but-it-does-or-it-should

Total hits: 14914

10 Comentarios sobre “Recuperar tablas MySQL cuando sólo lo archivos .frm y. EII están disponibles

  1. Rodrigo dijo:

    Qué hacer cuando vea el siguiente mensaje de error: #1815 – Error interno. No puede restablecer LSNs en tabla “mi asiento”.”mitabla”: Corrupción de la estructura de datos.
    Puedo ejecutar manualmente las inserciones de datos? Como fazer isso?
    Desde já te agradeço.

  2. Cristian U dijo:

    Hola Taylor,

    Cómo resolver este error:
    ERROR: Error en la operación Spawn server. Error de servidor clon: No se puede comunicar con la nueva instancia. Id. de proceso = 6648.. Para diagnosticar la, Vuelva a ejecutar la utilidad y uso de la –opción de nivel de detalle para ver los mensajes desde el servidor enraícen y corregir los errores presentados luego vuelva a ejecutar la utilidad.
    ÉXITO: El proceso con PID 6648 (proceso hijo de EPI 7264) ha terminado.

    Yo sigo recibiendo el mismo mensaje y me don´t saber como resolverlo.

    Gracias

Contesta

Su dirección de correo electrónico no será publicado. Campos requeridos están marcados con *