Tengo un MySQL InnoDB que tiene todos los archivos de la tabla de la base de datos, pero MySQL no los ve y no los carga.
El problema ocurrió porque he eliminado estos tres archivos: ibdata1
, ib_logfile0
yib_logfile1
porque estaba teniendo problemas con el inicio de mysql, y lo que leí fue eliminarlos porque MySQL simplemente los regenerará (sé que debería haberlos respaldado pero no lo hice).
¿Qué puedo hacer para que MySQL vuelva a ver las tablas?
about_member.frm site_stories.frm
about_member.ibd site_stories.ibd
db.opt stories.frm
FTS_00000000000000bb_BEING_DELETED_CACHE.ibd stories.ibd
FTS_00000000000000bb_BEING_DELETED.ibd story_comments.frm
FTS_00000000000000bb_CONFIG.ibd story_comments.ibd
FTS_00000000000000bb_DELETED_CACHE.ibd story_likes.frm
FTS_00000000000000bb_DELETED.ibd story_likes.ibd
FTS_00000000000000f5_BEING_DELETED_CACHE.ibd story_tags.frm
FTS_00000000000000f5_BEING_DELETED.ibd story_tags.ibd
FTS_00000000000000f5_CONFIG.ibd story_views.frm
FTS_00000000000000f5_DELETED_CACHE.ibd story_views.ibd
FTS_00000000000000f5_DELETED.ibd story_view_totals.frm
member_favorites.frm story_view_totals.ibd
member_favorites.ibd tags.frm
members.frm tags.ibd
members.ibd
Respuestas:
Aquí es por qué MySQL no puede ver esos archivos: El espacio de tabla del sistema (ibdata1) tiene un diccionario de datos específico de Storage-Engine que permite a InnoDB mapear el uso potencial de la tabla:
Mover tablas de InnoDB de un lugar a otro requiere comandos como
Aquí hay una parte de la documentación de MySQL 5.5 que explica lo que debe considerarse
Dadas estas advertencias y protocolos, aquí hay un curso de acción sugerido
Para este ejemplo, intentemos restaurar la
tags
tabla a lamydb
base de datos.PASO 1
Asegúrese de tener copias de seguridad de esos
.frm
y.ibd
archivos en/tmp/innodb_data
PASO 2
Obtenga la
CREATE TABLE tags
declaración y ejecútela comoCREATE TABLE mydb.tags ...
. Asegúrese de que sea exactamente la misma estructura que el originaltags.frm
PASO 3
Eliminar el vacío
tags.ibd
usando MySQLETAPA 4
Traiga la copia de seguridad de
tags.ibd
PASO # 5
Agregar
tags
tabla al diccionario de datos InnoDBPASO 6
Probar la accesibilidad de la mesa
Si obtiene resultados normales, felicidades, importe una tabla InnoDB.
PASO 7
En el futuro, no elimine ibdata1 y sus registros.
Darle una oportunidad !!!
He discutido cosas como esta antes
Apr 23, 2012
: MySQL: ¿cómo restaurar la tabla almacenada en un archivo .frm y .ibd?Sep 28, 2011
: Cómo recuperar una tabla InnoDB cuyos archivos se movieronADVERTENCIA
¿Qué pasa si no conoce la estructura de la tabla
tags
?Hay herramientas para obtener la instrucción CREATE TABLE simplemente usando el
.frm
archivo. También escribí una publicación sobre esto: ¿Cómo puedo extraer el esquema de la tabla solo del archivo .frm? . En esa publicación, copié un archivo .frm en una máquina Windows desde un cuadro de Linux, ejecuté la herramienta de Windows y obtuve laCREATE TABLE
declaración.fuente
weblyize
.tags
'existe. DESECHE el espacio de tabla antes de IMPORTAR. Entonces trato de ejecutar primero el tablespace alter y obtengo este error: ERROR 1146 (42S02): La tabla 'weblyize.tags' no existe . ¿Que puedo hacer?CREATE TABLE ...
y seguí tus pasos. ¡Me salvaste de tener que reescribirlos al 100% desde cero! No importó claves externas, pero está bien, ¡puedo hacerlo yo mismo! ¡Gracias otra véz!Tengo la misma situación, no puedo soltar o crear tblname específico. Mi procedimiento de reparación es:
Detener MySQL
Elimine ib_logfile0 e ib_logfile1.
Eliminar archivos tblname. ADVERTENCIA: ESTO BORRARÁ PERMANENTEMENTE SUS DATOS
Inicia MySQL.
fuente
Yo tuve este problema también. Eliminé
ibdata1
accidentalmente y se perdieron todos mis datos.Después de 1-2 días de búsqueda en Google y SO, finalmente encontré una solución que me salvó la vida (tenía tantas bases de datos y tablas con grandes registros).
tomar una copia de seguridad de
/var/lib/mysql
recuperar el esquema de la tabla del
.frm
archivo con dbsake (¡había otra opción! mysqlfrm . pero no funcionó para mí)crear nueva tabla (con nuevo nombre) con esquema exportado.
descarte los nuevos datos de la tabla con este comando:
/var/lib/mysql/database-name
y si hay datos (.ibd
archivo) para la tabla anterior, elimínelos.fuente