Anteriormente he guardado una copia del directorio / var / lib / mysql / ddms ("ddms" es el nombre del esquema). Ahora instalé un nuevo MySQL en un Ubuntu 10.04.3 LTS recién instalado al ejecutar apt-get install mysql-server
, creo que se instaló la versión 5.1. Después de copiar el directorio ddms en / var / lib / mysql, algunas de sus tablas funcionan bien, estas son las tablas con un conjunto asociado de tres archivos: un archivo .frm, un archivo .MYD y un archivo .MYI.
Sin embargo, hay dos tablas con un conjunto diferente de archivos: un archivo .frm y un archivo .ibd. Estas dos tablas no aparecieron en la lista de tablas en phpMyAdmin. Cuando miro el registro de errores, dice:
[ERROR] Cannot find or open table ddms/dictionary_item from
the internal data dictionary of InnoDB though the .frm file for the
table exists. Maybe you have deleted and recreated InnoDB data
files but have forgotten to delete the corresponding .frm files
of InnoDB tables, or you have moved .frm files to another database?
or, the table contains indexes that this version of the engine
doesn't support.
Por favor, ayuda con la restauración de estas dos tablas. Gracias.
Respuestas:
Las tablas InnoDB no se pueden copiar de la misma manera que las tablas MyISAM.
Solo copiar los archivos .frm y .ibd de una ubicación a otra es un problema. Copiar el archivo .frm y .ibd de una tabla InnoDB solo es bueno si y solo si puede garantizar que el id del espacio de tabla del archivo .ibd coincida exactamente con la entrada de id del espacio de tabla en los metadatos del archivo ibdata1 .
Escribí dos publicaciones en DBA StackExchange sobre este concepto de id de espacio de tabla
Aquí hay un excelente enlace sobre cómo volver a adjuntar cualquier archivo .ibd a ibdata1 en caso de id. De espacio de tabla no coincidentes: http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file . Después de leer esto, debe darse cuenta inmediatamente de que copiar archivos .ibd es simplemente una locura.
Puede aplicar las sugerencias desde el enlace del Calendario Chris, o puede volver a la antigua instalación de mysql, iniciar mysql y luego mysqldump la
ddms
base de datos. Luego, importe ese mysqldump en su nueva instancia de mysql. Confía en mí, esto sería mucho más fácil.fuente
How to Recover an InnoDB table whose files were moved around
literalmente me salvó la vida. Muchas gracias.Recientemente experimenté este mismo problema. Estos son los pasos que utilicé para resolverlo sin tener que perder el tiempo con la id de tablespace como RolandoMySQLDBA menciona anteriormente. Estoy en una Mac y, por lo tanto, utilicé MAMP para restaurar la base de datos a un punto donde podría exportarla en un volcado de MySQL.
Puede leer la publicación completa del blog aquí: http://www.quora.com/Jordan-Ryan/Web-Dev/How-to-Recover-innoDB-MySQL-files-using-MAMP-on-a-Mac
Debes tener:
-ibdata1
-ib_logfile0
-ib_logfile1
-.FRM archivos de su carpeta mysql_database
-Instalación fresca de MAMP / MAMP Pro que está dispuesto a destruir (si es necesario)
Copie en todas las carpetas y archivos incluidos en el archivo de la carpeta mysql desde el servidor de producción (entorno mt Plesk en mi caso) EXCEPTO NO SOBRESCRIBIR:
- / Aplicaciones / MAMP / db / mysql / mysql /
- / Aplicaciones / MAMP / db / mysql / mysql_upgrade_info
- / Aplicaciones / MAMP / db / mysql / performance_schema
Y listo, ahora debería poder acceder a las bases de datos desde phpMyAdmin, ¡qué alivio!
Pero no hemos terminado, ahora debe realizar un mysqldump para restaurar estos archivos a su entorno de producción, y la interfaz phpmyadmin agota el tiempo de espera para grandes bases de datos. Sigue los pasos aquí:
http://nickhardeman.com/308/export-import-large-database-using-mamp-with-terminal/
Copiado a continuación para referencia. Tenga en cuenta que en una instalación MAMP predeterminada, la contraseña es "root".
Cómo ejecutar mysqldump para MAMP usando Terminal
BASE DE DATOS DE EXPORTACIÓN DESDE MAMP [1]
Paso uno: abra una nueva ventana de terminal
Paso dos: navegue a la instalación de MAMP ingresando la siguiente línea en el terminal cd / aplicaciones / MAMP / library / bin Presione la tecla enter
Paso tres: escriba el comando de volcado ./mysqldump -u [USERNAME] -p [DATA_BASENAME]> [PATH_TO_FILE] Presione la tecla Intro
Ejemplo:
Consejo rápido: para navegar a una carpeta rápidamente, puede arrastrar la carpeta a la ventana del terminal y escribirá la ubicación de la carpeta. Fue un gran día cuando alguien me mostró esto.
Paso cuatro: esta línea de texto debe aparecer después de presionar enter Ingresar contraseña: así que adivina qué, escribe tu contraseña, ten en cuenta que las letras no aparecerán, pero están ahí Presiona la tecla enter
Paso cinco: Verifique la ubicación donde almacenó su archivo, si está allí, ÉXITO Ahora puede importar la base de datos, que se describirá a continuación.
Ahora que tiene una exportación de su base de datos mysql, puede importarla en el entorno de producción.
fuente
He recuperado mis archivos MySQL 5.5 * .ibd y * .frm con MySQL Utilites y MariaDB 10.
1) Generando Crear SQLs.
Puede obtener su creación de sql del archivo frm. Debe usar: https://dev.mysql.com/doc/mysql-utilities/1.5/en/mysqlfrm.html
shell> mysqlfrm --server = root: pass @ localhost: 3306 c: \ MY \ t1.frm - -port = 3310 De
otra manera, puede hacer que cree sql's.
2) Crea tus tablas
Crea tus tablas en la base de datos.
3) alterar tabla xxx descartar espacio de tabla
Deseche sus tablas que desea reemplazar sus archivos * .ibd.
4) Copie sus archivos * .ibd (MySQL o MariaDB) a la ruta de datos de MariaDB.
Primero trato de usar MySQL 5.5 y 5.6 para restaurar, pero la base de datos se bloquea e inmediatamente se detiene por un error de id. ( ERROR 1030 (HY000): Recibí el error -1 del motor de almacenamiento )
Después de haber usado MariaDB 10.1.8, y he recuperado con éxito mis datos.
5) alter table xxx import tablespace
Cuando ejecuta esta declaración, MariaDB advierte sobre el archivo pero no es importante que recuperar sus datos :) La base de datos aún continúa y puede ver sus datos.
Espero que esta información te sea útil.
fuente
mysqlfrm
(las versiones probadas 1.3.5 y 1.6.5 con MySQL 5.6 y 5.7) no dieron laCREATE
definición correcta , incluso cuando se usa MySQL 5.7 ( el valor predeterminado ROW_FORMAT cambió en MySQL 5.7.9 ) lo que resultaSchema mismatch (Expected FSP_SPACE_FLAGS=0x21, .ibd file contains 0x0.)
al importar el espacio de tabla. Agregar manualmenteROW_FORMAT=compact
al final de laCREATE
declaración hizo el truco.Manually adding ROW_FORMAT=compact at the end of the CREATE statement did the trick.
Eso también funcionó para mí. ¡Gracias! 👍He tenido exactamente el mismo problema solo teniendo los archivos como copia de seguridad.
Lo que hice para resolverlo fue copiar los archivos de la base de datos en / var / lib / mysql / yourdb y el ibdata1 que se encuentra en / var / lib / mysql.
Luego pude verificar que podía acceder a las tablas mysql -u root -p dbname y consultar algunas de las tablas que estaban dañadas anteriormente.
Luego volqué la base de datos con mysqldump -u root -p [root_password] [database_name]> dumpfilename.sql
fuente
Si está utilizando MAMP y no puede hacer que MySQL se inicie después de copiar sus archivos, lo puse
innodb_force_recovery = 2
dentromy.ini
y luego pude hacer que mysql se iniciara y exportara mi db.fuente
Si puede restaurar el archivo * .ibd en el servidor MySQL original, no olvide restaurar también los derechos de acceso al archivo. En mi caso (MySQL8 en CentOS7), restauré el archivo a /var/lib/mysql/db/tablename.ibd y ejecuté:
Antes de corregir los derechos de acceso, el acceso a la tabla dio como resultado el error "El servidor MySQL 2006 se ha ido". Después de corregir los derechos de acceso, la tabla funcionó (incluso sin reiniciar el servicio mysqld).
fuente
He recopilado publicaciones de temas similares (cuyas respuestas no se publicaron aquí):
solución 1: https://dba.stackexchange.com/a/59978
solución 2: https://dba.stackexchange.com/a/71785 (+ otra publicación allí)
solución 3: kit de recuperación para tablas: https://twindb.com/how-to-recover-innodb-dictionary/
solución 4: Recupere la base de datos MySQL de la carpeta de datos sin ibdata1 de los archivos ibd
solución 5: usando el
mysqlfrm
comandosolución 6: https://dba.stackexchange.com/a/159001
solución 7: https://dba.stackexchange.com/a/144573
fuente
Solo quiero agregar una cosa más para los usuarios de macos El Capitan. Las utilidades MySQL no son compatibles con esta versión, por lo que el comando mysqlfrm no es útil. Lo que hice fue recuperar las estructuras de mi tabla con dbsake como se muestra en este enlace: https://www.percona.com/blog/2015/12/16/recovering-table-structure-from-frm-files-using-dbsake/
Todo lo que necesitas hacer es instalar dbsake:
luego use el comando frmdump y proporcione la ruta a su archivo .frm:
obtendrá la declaración de creación. Una vez que he hecho esto, simplemente seguí los pasos 2 a 5 ya mencionados por @Ecd. Espero que ayude a alguien.
fuente
Realmente aprecio Ecd. Lo que funcionó para mí:
1.- que tenía una copia de seguridad de la base hace unos meses esto me ayudó a levantar esta copia de seguridad en XAMPP en Windows 10 y crear las tablas para tener la estructura (configuración: Windows 10, XAMPP-windows-x64-7.1.30- 5-VC14) mysql my.ini configuración archivo al final
2.- Tener la base de datos antigua, me puse a ejecutar alter table xxx descarte de tabla para cada tabla en la base de datos que quería recuperar, a continuación, los archivos .ibd de la carpeta de datos en C: / xampp / mysql / datos / sistemas había sido eliminado (en este caso, es este camino)
3.- procedí a copiar los archivos de la base de datos .ibd quería recuperar a la carpeta xampp de la antigua base de datos
4.- Tener los archivos copiados, ejecute: Modificar tabla xxx de tablas de importación para cada tabla en la base de datos, aparecerá una advertencia, pero vamos a ignorarlo, los datos se cargan en la tabla y se pueden exportar más tarde.
5.- exportar toda la base de datos en un archivo sql y proceder a construir en la producción y el éxito!
Espero que ayude a alguien que tiene esta situación, saludos.
Inglés proporcionada por Google
fuente
intente ejecutar esto con utilidades de MySQL
comando / promt shell
fuente