2012-03-07 20 views
20

Tengo una tabla de myism 'prueba' que contiene algunos datos obsoletos, ahora quiero volver a crear la tabla, todas las columnas son iguales excepto que cambié el almacenamiento de myism a innodb. La sql vertido he usado para recrear la mesa es como:Mysql 'Error de error -1 del motor de almacenamiento'

drop table test; 
create table test (...) 
engine=innodb 

insert into test(...) values(...) 

ahí es donde me dieron el error "ha obtenido un error -1 del motor de almacenamiento", he buscado en Google en todo, la mayor parte de los resultados se centran en las tablas InnoDB corruptos. Mientras que en mi caso no creo que esté roto, es solo algo que me perdí en la caída y creo declaraciones.

Otra cosa es que después de ejecutar el sql anterior, todo lo que queda para la prueba de tabla es un archivo llamado file.frm, supongo que la tabla innodb necesita otras cosas para ejecutar pero no está seguro de qué.

¿Cómo puedo solucionar este problema? Y probablemente necesite hacer más tareas de este tipo, ¿cuál es el procedimiento correcto para eliminar la tabla myism y recrearlas como innodb?

Gracias.

+0

¿Quisces decir 'myisam'? –

Respuesta

56

OK. Encontré la solución. El problema se debía a innodb_force_recovery parámetro en my.cnf, que fue puesto a 4.

Para resolver el problema, establece en 0 o eliminar completamente este parámetro de my.cnf

Si marca de error log, durante la consulta, MySQL va a escribir en un lenguaje legible por humanos que: no le permitirá cambiar nada en la mesa hasta que se active el modo de recuperación innodb, exactamente mensaje siguiente:

InnoDB: A new raw disk partition was initialized or 
InnoDB: innodb_force_recovery is on: we do not allow 
InnoDB: database modifications by the user. Shut down 
InnoDB: mysqld and edit my.cnf so that newraw is replaced 
InnoDB: with raw, and innodb_force_... is removed. 

Consulte:http://bugs.mysql.com/bug.php?id=30225

+6

La ortografía correcta es innodb_force_recovery (en lugar de force_innodb_recovery) –

+0

¡Esto realmente ayudó! ¡Gracias! :) –

8

Una causa común para el error -1 es un disco lleno. Tengo diferentes máquinas virtuales pequeñas para fines de prueba, y innodb las sigue llenando (y sigo olvidándome de ellas).

$df -ah 

Si se muestra el disco al 100%, que es el origen de la -1 allí mismo;)

+1

No estoy de acuerdo con eso .. código para el disco lleno es 28 .. como "Obtuve el error 28 del motor de almacenamiento" –

+0

Sí, 28 es el código para el disco lleno. –

+0

Tuve el error -1 porque mi disco estaba lleno – Gerfried

0

Ir a /etc/my.cnf

comentario a la línea innodb_force_recovery = 1

guardar el archivo y reinicie MySQL

0

para descubrir lo que el código de error es para cualquier código de error del sistema en un sistema UNIX o Linux, busque en errno.h. En mi mac, que puedo hacer:

$ grep 28 /usr/include/sys/errno.h
#define ENOSPC 28/* No hay espacio libre en el dispositivo */

En otros sistemas operativos, tales como Linux, habrá algunas otras capas debido a que incluye sub capa de máquina. Sin embargo, debería poder examinar esos archivos y encontrar estas definiciones de error.

Como alternativa, utilice el comando 'man' para buscar "introducción" u otras páginas de manual en la sección '2', la sección del sistema operativo.

Cuestiones relacionadas