mysql - missing - table storage engine myisam does not support the create option tablespace or logfile group
Error: el espacio de tablas para la tabla xxx existe. Por favor, DESCARTE el tablespace antes de IMPORT (17)
Soy bastante nuevo en MySQL y estoy obteniendo un error bastante interesante en el que no puedo encontrar ninguna ayuda a través de google y la búsqueda de stackoverflow.
Estoy ejecutando un servidor local de MySQL 5.6.10 en MacOS 10.8.3 y administro mi base de datos a través de Navicat essentials para MySQL.
El error que recibo es que después de ejecutar y administrar mi base de datos sin problemas durante un par de días / semanas, algo se desencadena (parece incompleto) eliminar algunas de las tablas que he creado utilizando consultas desde dentro de Navicat.
Cuando trato de ejecutar consultas usando estas tablas, Navicat me advierte que la tabla en particular no existe. Hasta aquí todo bien, aquí viene la buena parte:
Cuando intento CREAR la tabla, por ejemplo, llamada "temp", que estaba allí anteriormente, aparece el siguiente mensaje de error:
Error : Tablespace for table ''`database`.`temp`'' exists. Please DISCARD the tablespace before IMPORT.
Sin embargo, si trato de soltar la tabla, o trato de descartar el tablespace para esta tabla, usando
DROP TABLE temp;
ALTER TABLE temp DISCARD TABLESPACE;
Recibo los siguientes mensajes de error:
Error : Unknown table ''database.temp''
Error : Table ''database.temp'' doesn''t exist
Eso significa que se me aconseja descartar el espacio de la tabla, pero cuando intento hacerlo, la tabla no existe. ¿Es posible que exista algún tipo de remanente de esta tabla en un lugar diferente donde la consulta DISCARD no esté revisando? ¿Y alguien tiene una idea de qué podría desencadenar todo eso, completamente al azar como parece?
Como dije, soy nuevo en el tema y casi no tengo ni idea. Sospecho que volver a arrancar mi computadora portátil, es decir, reiniciar mi servidor MySQL local, o tal vez los derechos de permiso del usuario podrían tener que ver con eso, pero solo estoy planteando la hipótesis aquí.
Eliminar / Mover tablename.ibd seguro no funcionó para mí.
Cómo lo resolví
Como iba a eliminar la tabla corrupta y no existente, tomé una copia de seguridad de las otras tablas yendo a phpmyadmin-> database-> export-> selected tables para hacer una copia de seguridad-> exportar (como .sql).
Después de eso, seleccioné el icono de la base de datos junto al nombre de la base de datos y luego lo dejé caer. Creó una nueva base de datos. Seleccione su nueva base de datos-> importar-> Seleccione el archivo que descargó anteriormente-> haga clic en importar. Ahora tengo mis viejas tablas de trabajo y eliminé la tabla corrupta. Ahora solo creo la tabla que arrojaba el error.
Probablemente tuve una copia de seguridad anterior de la tabla corrupta.
En mi caso, la única solución de trabajo fue:
- CREATE TABLE
bad_table
ENGINE = MyISAM ... - rm bad_table.ibd
- DROP TABLE
bad_table
Este error ocurre cuando suspendes algunas funciones. Como ejecutar la consulta a continuación con una clave externa incorrecta.
set foreign_key_checks=0
Intentar dejar caer el tablespace puede darte otros errores. Para mí, recibí el siguiente error:
DROP TABLESPACE `tablename`
Error Code: 1478. Table storage engine ''InnoDB'' does not support the create option ''TABLESPACE or LOGFILE GROUP''
Mi solución fue abandonar la base de datos. Esto eliminará todos los espacios de tabla relacionados y le permitirá crear las tablas nuevamente.
La forma en que encontré para "resolver" este problema es bastante molesto, pero hay un script que lo maneja.
Esencialmente, necesita que los archivos ibdata1
e ib_logfile*
vayan (contienen las asignaciones de claves externas, entre otras cosas). La única forma segura de hacerlo es exportar todas sus bases de datos, detener mysql, eliminar los archivos, iniciar mysql y luego importar los archivos.
El script que ayuda a resolver este problema es https://github.com/uberhacker/shrink-ibdata1 , aunque el propósito declarado de este script es diferente, resuelve el problema.
Obtuve el mismo error al ejecutarlo en wampserver mientras trataba de crear una tabla de usuarios. Encontré un archivo users.ibd y después de eliminar este archivo, ejecuté el comando migrate nuevamente y funcionó. El archivo en mi máquina de Windows estaba ubicado en wamp / bin / mysql / mysql5.6.12 / data / myproject.
Si tiene otro servidor con una buena versión de la misma tabla, puede hacer una copia (table_copy) y transferir table_copy al servidor problemático. A continuación, elimine la tabla de problemas y cambie el nombre table_copy a table.
Solo elimino mi DB antiguo ubicado en mi localhost directamente desde wamp, Detener todos los servicios, Ir a wamp / bin / mysql / mysql [versión] / data y encontré el DB con problemas, lo elimino y comienzo de nuevo con todos los servicios, crea de nuevo tu base de datos y termina, ahora puedes importar tus tablas,
Tuve este problema varias veces. Si tiene una gran base de datos y desea evitar la copia de seguridad / restauración (con la tabla faltante agregada), intente algunas veces hacia adelante y hacia atrás:
DROP TABLE my_table;
ALTER TABLE my_table DISCARD TABLESPACE;
-y-
rm my_table.ibd (huérfano sin el correspondiente my_table.frm) ubicado en el directorio / var / lib / mysql / my_db /
-y entonces-
CREAR TABLA SI NO EXISTE my_table
(...)
Un poco tarde aquí, pero en general, he visto este problema cuando aparece el error ''tablespace full'' cuando se ejecuta en un modo ''innodb_file_per_table''. Sin entrar en demasiados detalles (más here ), el espacio de tablas del servidor de la base de datos se define mediante la configuración innodb_data_file_path y, por defecto, es bastante pequeño. Incluso más grande, el ''espacio de tablas lleno'' aún puede ocurrir con consultas más grandes y cosas así (muchas cosas que no están en la mesa se almacenan allí, registros de deshacer, cachés, etc.).
De todos modos, encontré que si busca en el directorio del sistema operativo donde se almacenan los archivos por tabla, / var / lib / mysql de forma predeterminada en OSX, / usr / local / var / mysql con homebrew iirc, encontrará una huérfano tablename.ibd sin su archivo compañero normal tablename.frm. Si mueve ese archivo .ibd a una ubicación temporal segura (solo para estar seguro) eso debería solucionar el problema.
$ ls /var/lib/mysql
table1.frm
table1.idb
table2.frm
table2.ibd
table3.idb <- problem table, no table3.frm
table4.frm
table4.idb
$ mkdir /tmp/mysql_orphans
$ mv /var/lib/mysql/table3.ibd /tmp/mysql_orphans/
Sin embargo, una advertencia, asegúrese de que lo que está causando el problema originalmente, por ejemplo, la consulta de larga ejecución, la tabla bloqueada, etc., haya sido borrado. De lo contrario, terminas con otro archivo .ibd huérfano cuando lo intentas por segunda vez.
si tiene este problema y no tiene otra opción, cambie el motor a otro motor como ''myisam'', luego intente crear la tabla.
Descargo de responsabilidad: no es la respuesta válida, ya que puede tener restricciones de clave externa que no serán compatibles con otro motor de almacenamiento. Cada motor de almacenamiento tiene su propia especialidad para almacenar y acceder a los datos, estos puntos también deben tenerse en cuenta.
Aquí están los pasos de la solución:
- haga una copia de seguridad de su base de datos (estructura con opción de colocar y datos)
- detener el servicio del motor mysql
- eliminar el directorio de la base de datos manualmente desde dentro de mysql / data
- iniciar motor mysql
- crea una nueva base de datos con cualquier nombre diferente de tu base de datos corrupta
- crea una sola tabla con el nombre de la tabla dañada dentro de la nueva base de datos (este es el secreto). y es mejor crear la tabla con exactamente la misma estructura.
- cambiar el nombre de la base de datos a la antigua base de datos corrupta
- restaura tu copia de seguridad y tu tabla funcionará bien.
Solución
Sin embargo, la opción más fácil es la siguiente: reiniciar mysql, luego hacer los mismos cuatro pasos enumerados cerca del comienzo de la publicación. De esta forma, la id del tablespace en el diccionario de datos y el archivo coinciden; por lo tanto, la importación del tablespace tuvo éxito.
Esto puede darle una mayor confianza al tratar con algunos de los "errores" de InnoDB durante el proceso de recuperación o incluso transferencias de archivos.
Para usuarios de WAMP [Windows 7 Ultimate x64-bit]:
Estoy de acuerdo con lo que dijo DangerDave, por lo que estoy ofreciendo una respuesta para los usuarios de WAMP .
Nota: En primer lugar, debe dirigirse a la carpeta .. / WAMP / Bin / MySQL / MySQL [Su versión MySQL] / Data .
Ahora, verá las carpetas de todas sus bases de datos
- Haga doble clic en la carpeta de la base de datos que tiene la tabla ofensiva para abrirla
- No debe haber un archivo
[Your offending MySQL table name].frm
, en su lugar debe haber un archivo[Your offending MySQL table name].ibd
- Eliminar el
[Your offending MySQL table name].ibd
- Luego, elimínelo de la Papelera de reciclaje también
- Luego ejecuta tu consulta MySQL en la base de datos y listo
Por favor, DESCARTE el tablespace antes de IMPORT
Tengo la misma solución problema está debajo
Primero tienes que soltar el nombre de tu base de datos. si tu base de datos no está borrando, me has enviado. Para el sistema de Windows, su directorio será C: / xampp / mysql / data / yourdabasefolder eliminará "yourdabasefolder"
De nuevo, debe crear una nueva base de datos e importar su archivo sql anterior. Será trabajo
Gracias
Si .idb
crear el .idb
después de eliminarlo, lea esta respuesta.
así es como funcionó conmigo. Tenía el archivo .idb
sin su correspondiente .frm
y cada vez que .idb
archivo .idb
, la base de datos vuelve a .idb
. y encontré la solución en una línea en la documentation mysql (parte del espacio de tabla no existe )
1- Cree un archivo .frm coincidente en algún otro directorio de base de datos y cópielo al directorio de la base de datos donde se encuentra la tabla huérfana.
2- Emitir DROP TABLE para la tabla original. Eso debería soltar con éxito la tabla e InnoDB debería imprimir una advertencia al registro de errores que faltaba el archivo .ibd.
Copié otro archivo .frm
tabla y lo llamo mi tabla faltante, luego realizo una consulta de tabla desplegable normal. y voalla funcionó y la mesa se deja caer normalmente!
mi sistema es xampp en windows MariaDB v 10.1.8
Usuarios de Xampp y Mamp
Tuve el mismo error al importar una base de datos (después de vaciarla) a través de MySQL. Descubrí que tenía un archivo tablename.ibd
la izquierda, mientras que todos los demás fueron eliminados. Lo borré manualmente de mysql/data/database_name
y el error desapareció.