Soy bastante nuevo en MySQL y recibo 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 obtengo es que después de ejecutar y administrar mi base de datos muy bien durante un par de días / semanas, algo se dispara para (parece que está incompleto) eliminar algunas de las tablas que creé usando consultas desde Navicat.
Cuando intento ejecutar consultas con estas tablas, Navicat me advierte que la tabla en particular no existe. Hasta ahora todo bien, aquí viene la parte buena:
Cuando intento CREAR la tabla, por ejemplo, llamada "temp", que estaba allí anteriormente, recibo el siguiente mensaje de error:
Error : Tablespace for table '`database`.`temp`' exists. Please DISCARD the tablespace before IMPORT.
Sin embargo, si trato de descartar la tabla, o trato de descartar el espacio de tabla 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 que descarte el espacio de la tabla, pero cuando intento hacerlo, la tabla no existe. ¿Es posible que haya algún tipo de remanente de esta tabla en un lugar diferente donde la consulta DESECHAR no esté verificando? ¿Y alguien tiene una idea de lo que podría desencadenar todo eso, completamente al azar como parece?
Como dije, soy nuevo en el tema y no tengo ni idea. Sospecho que reiniciar mi computadora portátil, es decir, restablecer mi servidor MySQL local, o tal vez los derechos de permiso del usuario podrían tener que ver con eso, pero solo estoy planteando una hipótesis aquí.
fuente
Respuestas:
Un poco tarde aquí, pero en general he visto que este problema ocurre cuando aparece un error de "espacio de tabla lleno" cuando se ejecuta en modo "innodb_file_per_table". Sin entrar en demasiados detalles (más aquí ), el espacio de tabla del servidor de bases de datos está definido por la configuración innodb_data_file_path y, por defecto, es bastante pequeño. Incluso si se hace más grande, el 'espacio de tabla lleno' aún puede ocurrir con consultas más grandes y similares (muchas 'cosas' que no están en la tabla se almacenan allí, deshacer registros, cachés, etc.).
De todos modos, descubrí que si buscas en el directorio del sistema operativo donde están almacenados los archivos por tabla, / var / lib / mysql por defecto en OSX, / usr / local / var / mysql con homebrew iirc, encontrarás un archivo huérfano tablename.ibd sin su archivo complementario tablename.frm normal. Si mueve ese archivo .ibd a una ubicación temporal segura (solo para estar seguro), eso debería solucionar el problema.
Sin embargo, una advertencia, asegúrese de que lo que está causando el problema originalmente, por ejemplo, consulta de larga ejecución, tabla bloqueada, etc., se haya borrado. De lo contrario, terminará con otro archivo .ibd huérfano cuando lo intente por segunda vez.
fuente
/usr/local/mysql/data
lugar de/var/lib/mysql/
. De lo contrario, resolvió perfectamente el problema.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 me quedaba un
tablename.ibd
archivo mientras se eliminaban todos los demás. Lo eliminé manualmentemysql/data/database_name
y el error desapareció.fuente
Para usuarios de WAMP [Windows 7 Ultimate x64-bit]:
Estoy de acuerdo con lo que dijo DangerDave y por eso estoy haciendo una respuesta disponible para los usuarios de WAMP .
Ahora verá carpetas de todas sus bases de datos.
[Your offending MySQL table name].frm
, en su lugar debería haber un archivo[Your offending MySQL table name].ibd
[Your offending MySQL table name].ibd
fuente
Si
.idb
vuelve a crear el archivo después de eliminarlo, lea esta respuesta.Así es como funcionó conmigo. Tenía el
.idb
archivo sin su correspondiente.frm
y cada vez que borro el.idb
archivo, la base de datos lo vuelve a crear. y encontré la solución en una línea en la documentación de MySQL (el espacio de tabla no existe )Copié otro
.frm
archivo de tabla y lo nombré como mi tabla faltante, luego hice una consulta de caída de tabla normal y listo, funcionó y la tabla se soltó normalmente.mi sistema es XAMPP en Windows MariaDB v 10.1.8
fuente
En mi caso, la única solución de trabajo fue:
bad_table
MOTOR DE MESA = MyISAM ...bad_table
fuente
Esto es exactamente lo que hice en mariadb 10.2.16 en fedora cuando tenía una tabla que mostraba exactamente los mismos errores en el archivo de registro, supongo ...
su kilometraje y errores pueden variar, pero supongo que el principal es
con drop table no funciona tan bien como alter table ...
crear tabla también falla así:
para arreglar esto, lo que hice fue primero
luego en el directorio / var / lib / mysql / database_name hice lo siguiente como root reconociendo la sobrescritura de innodb_table.ibd causándonos problemas
luego de vuelta en la consola mysql emití un comando de caída exitoso en ambas tablas
y todo ahora es todo cuadrado y puedo recrear una sola mesa ...
fuente
En mi caso:
Primero elimine
tableName.ibd
en su directorio de base de datos de Mysql y la segunda ejecución:fuente
Obtuve el mismo error al ejecutarlo en wampserver al intentar crear una tabla de usuarios. Encontré un archivo users.ibd y después de eliminar este archivo, ejecuté nuevamente el comando migrate y funcionó. El archivo en mi máquina Windows estaba ubicado en wamp / bin / mysql / mysql5.6.12 / data / myproject.
fuente
Solución
Sin embargo, la opción más fácil es esta: reinicie MySQL, luego realice los mismos cuatro pasos de la siguiente manera:
De esta manera, la id del espacio de tabla en el diccionario de datos y el archivo coinciden; importando así el espacio de tabla tuvo éxito.
Esto puede darle una mayor confianza al tratar con algunos de los "problemas" de InnoDB durante el proceso de recuperación o incluso las transferencias de archivos.
árbitro
fuente
Aquí están los pasos de la solución:
fuente
Tuve este problema varias veces. Si tiene una base de datos grande y desea intentar evitar la copia de seguridad / restauración (con la tabla faltante agregada), intente varias veces de un lado a otro:
DROP TABLE my_table;
ALTER TABLE my_table DESCARGAR 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
(...)fuente
Eliminar / Mover tablename.ibd seguro no funcionó para mí.
Como lo solucione
Como iba a eliminar la tabla corrupta y no existente, hice una copia de seguridad de las otras tablas yendo a phpmyadmin-> database-> export-> tablas seleccionadas 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 solté. 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 he eliminado la tabla dañada. Ahora acabo de crear la tabla que arrojó el error.
Probablemente tuve una copia de seguridad anterior de la tabla corrupta.
fuente
Este error ocurre cuando suspende algunas funciones. Como ejecutar la consulta a continuación con una clave foránea incorrecta.
fuente
Tenía exactamente el mismo problema; Prepararía agregado
[email protected]
(después de tener 5.5 previamente).Los valores predeterminados para 5.6 son
innodb_file_per_table=1
mientras que en 5.5 soninnodb_file_per_table=0
.Su
ibdata1
archivo existente (los datos innodb combinados) todavía tendrá referencias a las tablas que está intentando crear / soltar.innodb_file_per_table
Vuelva a cambiar a 0 o elimine el archivo de datos ibdata1 ( esto perderá todos sus datos, así que asegúrese de mysqldump primero o ya tiene un volcado .sql ).El otro
[email protected]
defecto predeterminado que me mordió fue la falta de un puerto, por lo que la red estaba predeterminada en los sockets de Unix, y el cliente mysql seguía informando:Agregué
<string>--port=3306</string>
a la.plist
matriz, pero también podría especificarport=3306
en sumy.cnf
Ejecuta
brew services stop [email protected]
haz tus cambios entoncesbrew services start [email protected]
fuente
Intentar soltar el espacio de tabla puede darle otros errores. Para mí, recibí el siguiente error:
Mi solución fue eliminar la base de datos. Esto eliminará cualquier espacio de tabla relacionado con él y le permitirá crear las tablas nuevamente.
fuente
rm -r
. Es irritante, pero tampoco espectacular.Si tiene otro servidor con una buena versión de la misma tabla, puede hacer una copia (table_copy), transfiera table_copy al servidor problemático. Luego elimine la tabla del problema y cambie el nombre de table_copy a table.
fuente
Para mí, me ayudó simplemente ir al directorio MYSQL DATA en / var / lib / mysql / {db_name} (linux) y soltar el archivo {table_name} .ibd que era el mismo que el nombre de la carpeta.
fuente
Solo borro mi antiguo DB ubicado en mi host local directamente de wamp, Detiene todos los servicios, Vaya a wamp / bin / mysql / mysql [versión] / data y encontré el DB con problemas, lo borro y vuelvo a iniciar todos los servicios, cree nuevamente su base de datos y listo, ahora puede importar sus tablas,
fuente
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
yib_logfile*
desaparezcan (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.La secuencia de comandos que ayuda a resolver este problema es https://github.com/uberhacker/shrink-ibdata1 , a pesar de que el propósito declarado de este guión es diferente, se hace resolver el problema.
fuente
La única forma en que funcionó para mí fue:
fuente
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 datos, estos puntos también deben tenerse en cuenta.
fuente
DESECHE el espacio de tabla antes de IMPORTAR
Tengo la misma solución de problema a continuación
Primero tienes que soltar el nombre de tu base de datos. si su base de datos no se está borrando, me tiene flujo. Para el sistema Windows, su directorio será C: / xampp / mysql / data / yourdabasefolder remove "yourdabasefolder"
Nuevamente, debe crear una nueva base de datos e importar su antiguo archivo sql. Sera trabajo
Gracias
fuente
Tuve que localizar mi directorio de datos MySQL:
MOSTRAR VARIABLES DONDE Variable_Name COMO "% dir"
Luego forzar a eliminar esa base de datos:
sudo rm -rf
fuente
Puede ejecutar la siguiente consulta como usuario root de mysql
fuente
Hola, los desarrolladores no pierden el tiempo. Simplemente elimine la base de datos que contiene tablas e importe tablas enteras nuevamente. Ahorre tiempo = el tiempo es dinero. Salud.
fuente