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
ALTER TABLE tblname DISCARD TABLESPACE;
ALTER TABLE tblname IMPORT TABLESPACE;
Aquí hay una parte de la documentación de MySQL 5.5 que explica lo que debe considerarse
Consideraciones de portabilidad para archivos .ibd
No puede mover libremente archivos .ibd entre los directorios de la base de datos como puede hacerlo con los archivos de tabla MyISAM. La definición de tabla almacenada en el espacio de tabla compartido InnoDB incluye el nombre de la base de datos. Los ID de transacción y los números de secuencia de registro almacenados en los archivos de espacio de tabla también difieren entre las bases de datos.
Para mover un archivo .ibd y la tabla asociada de una base de datos a otra, use una instrucción RENAME TABLE:
RENAME TABLE db1.tbl_name TO db2.tbl_name; Si tiene una copia de seguridad "limpia" de un archivo .ibd, puede restaurarlo a la instalación de MySQL desde la que se originó de la siguiente manera:
La tabla no debe haberse descartado ni truncado desde que copió el archivo .ibd, ya que al hacerlo cambia la ID de la tabla almacenada dentro del espacio de tabla.
Emita esta instrucción ALTER TABLE para eliminar el archivo .ibd actual:
ALTER TABLE tbl_name DESCARGAR TABLESPACE; Copie el archivo .ibd de respaldo en el directorio de base de datos adecuado.
Emita esta instrucción ALTER TABLE para decirle a InnoDB que use el nuevo archivo .ibd para la tabla:
ALTER TABLE tbl_name IMPORT TABLESPACE; En este contexto, una copia de seguridad de archivo .ibd "limpia" es aquella para la que se cumplen los siguientes requisitos:
No hay modificaciones no confirmadas por transacciones en el archivo .ibd.
No hay entradas de búfer de inserción no fusionadas en el archivo .ibd.
Purge ha eliminado todos los registros de índice marcados con eliminación del archivo .ibd.
mysqld ha vaciado todas las páginas modificadas del archivo .ibd del grupo de búferes al archivo.
Dadas estas advertencias y protocolos, aquí hay un curso de acción sugerido
Para este ejemplo, intentemos restaurar la tags
tabla a la mydb
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 como CREATE 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 MySQL
ALTER TABLE mydb.tags DISCARD TABLESPACE;
ETAPA 4
Traiga la copia de seguridad de tags.ibd
cd /var/lib/mysql/mydb
cp /tmp/innodb_data.tags.ibd .
chown mysql:mysql tags.ibd
PASO # 5
Agregar tags
tabla al diccionario de datos InnoDB
ALTER TABLE mydb.tags IMPORT TABLESPACE;
PASO 6
Probar la accesibilidad de la mesa
SHOW CREATE TABLE mydb.tags\G
SELECT * FROM mydb.tags LIMIT 10;
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
ADVERTENCIA
¿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 la CREATE TABLE
declaración.