2011-10-13 3 views
5

Sto ripristinare tutti i database da un file mysqldump e sto ottenendo il seguente errore:ERRORE 1005 (HY000) alla riga 156: Impossibile creare la tabella 'db1.testtable' (errno: 121)

ERROR 1005 (HY000) at line 156: Can't create table 'db1.testtable' (errno: 121) 

Dato che il mio SQL è stato creato dall'utilità mysqldump, sono confuso da come è apparso un errore nel codice SQL!

Le linee rilevanti nella mia dump.sql sono:

CREATE TABLE `testtable` (
    `username` varchar(255) NOT NULL, 
    `password` varchar(255) NOT NULL, 
    `emailaddress` varchar(255) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

Grazie, Jim

risposta

8

errno 121 significa un errore di chiave duplicata. Probabilmente la tabella esiste già nel dizionario dati interno di InnoDB, sebbene il file .frm per la tabella sia stato eliminato. Questo è il motivo più comune per ottenere errno 121 nella creazione di tabelle. Un altro possibile motivo è un conflitto di nome in un nome di vincolo di chiave esterna. I nomi dei vincoli devono essere univoci in un database, come lo sono i nomi delle tabelle.

Cosa stampa InnoDB nel registro .err?

+1

111013 9:30:47 InnoDB: Errore: tabella 'db1' .testtable' già esistente in InnoDB interno InnoDB: dizionario dati. Hai cancellato il file .frm InnoDB: e non usato DROP TABLE? Hai usato DROP DATABASE InnoDB: per le tabelle InnoDB in versione MySQL <= 3.23.43? InnoDB: vedere la sezione Restrizioni del manuale di InnoDB. InnoDB: è possibile rilasciare la tabella orfana all'interno di InnoDB entro InnoDB: creazione di una tabella InnoDB con lo stesso nome in un altro InnoDB: database e copia del file .frm nel database corrente. InnoDB: Allora MySQL pensa che la tabella esista e DROP TABLE sarà InnoDB: successo. –

+0

@ user993052 Penso che quelle istruzioni siano abbastanza chiare! :-) – ManseUK

+0

** bold ** Errore: tabella db1.testtable già esistente in InnoDB internal InnoDB: data dictionary. ** bold ** Suppongo che stiamo parlando dei file ibdata1, ib_logfile0, ib_logfile1? Proverò a eliminarli e ad avviare il caricamento da dump.sql da zero. –