2012-03-07 10 views
20

Ho un 'test' myism table che contiene alcuni dati obsoleti, ora voglio ricreare la tabella, tutte le colonne lo stesso eccetto che ho cambiato l'archiviazione da myism innodb. Lo sql scaricato ho usato per ricreare la tabella è come:Errore Mysql 'Errore -1 dal motore di archiviazione'

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

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

è lì che ho ottenuto l'errore "ha ricevuto l'errore -1 dal motore di archiviazione", Googled intorno, la maggior parte dei risultati si concentrano su tabelle InnoDB danneggiati. Mentre per il mio caso non penso che sia rotto, è solo qualcosa che ho perso alla caduta e creare dichiarazioni.

Un'altra cosa è che dopo aver eseguito lo sql precedente, tutto ciò che rimane per il test della tabella è un file denominato file.frm, credo che la tabella di innodb abbia bisogno di altre cose su cui eseguire ma non si sa cosa.

Come posso risolvere questo problema? E probabilmente ho bisogno di fare più compiti di questo tipo, qual è la procedura corretta per far cadere il tavolo del miismo e ricrearli come quelli innodb?

Grazie.

+0

Vuoi dire 'myisam'? –

risposta

56

OK. Ho trovato la soluzione. Il problema è stato causato da innodb_force_recovery parametro my.cnf, che è stato impostato a 4.

Per risolvere il problema, impostato su 0 o rimuovere completamente questo parametro da my.cnf

Se si controlla l'errore log, durante la query mysql scriverà in un linguaggio leggibile che: non vi permetterà di cambiare qualcosa nel tavolo fino a quando è attivata la modalità di recupero InnoDB, esattamente messaggio successivo:

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. 

Si prega di fare riferimento a:http://bugs.mysql.com/bug.php?id=30225

+6

L'ortografia corretta è innodb_force_recovery (invece di force_innodb_recovery) –

+0

Questo davvero aiutato! Grazie! :) –

8

Una causa comune per l'errore -1 è un disco completo. Ho diverse piccole VM per scopi di test, e innodb continua a riempirle (e continuo a dimenticarmene).

$df -ah 

Se si vede il disco al 100%, che è l'origine del -1 proprio lì;)

+1

Non sono d'accordo con quello .. il codice per il disco pieno è 28 .. come "Errore ricevuto dal motore di archiviazione" –

+0

Sì, 28 è il codice per il disco pieno. –

+0

Ho avuto errore -1 perché il mio disco era pieno – Gerfried

0

Vai /etc/my.cnf

riga di commento innodb_force_recovery = 1

Salvare il file e riavviare mysql

0

Per scoprire qual è il codice di errore per qualsiasi codice di errore di sistema su un sistema Unix o Linux, cercare in errno.h. Sul mio Mac, non posso fare:

$ grep 28 /usr/include/sys/errno.h
#define ENOSPC 28/* Nessun spazio lasciato sul dispositivo */

su altri sistemi operativi, come ad come linux, ci saranno alcuni altri livelli a causa dei subset del livello macchina. Ma dovresti essere in grado di esaminare questi file e trovare queste definizioni di errore.

In alternativa, utilizzare il comando "man" per cercare "intro" o altre pagine di manuale nella sezione "2", la sezione del sistema operativo.

Problemi correlati