Domanda

MySQL mi sta dando il dolore quando provo a ricreare una particolare tabella in un particolare database; Credo che il problema è che da qualche parte MySQL ha alcuni record di chiavi esterne della tabella e continua a cercare di controllare il vincolo quando si tenta di ricreare la tabella.

Il database in questione è per l'ambiente di prova e viene periodicamente aggiornato dal dumping del prod DB, lasciando cadere il test DB, creando il test DB di nuovo e poi applicare la discarica prod DB per il nuovo test DB.

Tuttavia ieri sera quando sono andato a fare questa procedura improvvisamente mi sono imbattuto in errno di MySQL: 121, che normalmente è correlato a un chiave esterna non corretta ... Se provo con una tabella diversa defnizione, senza specificare una chiave, ottengo errno: 150 invece. Tuttavia, questo si verifica solo se si tenta di applicare la discarica in un nuovo database di esattamente lo stesso nome di quello vecchio. Se creo un database con un nome diverso da quello vecchio (sullo stesso server ancora) e applicare la discarica, non c'è nessun problema.

In realtà, non riesco nemmeno a creare una tabella di esattamente lo stesso nome senza alcun tasto a tutti anche in un modo completamente nuovo database.

Questo esempio dimostra il problema

mysql> create database test_db;
Query OK, 1 row affected (0.01 sec)

mysql> connect test_db;
Connection id:    1590
Current database: test_db

mysql> create table client_feed_group(id int);
ERROR 1005 (HY000): Can't create table './test_db/client_feed_group.frm' (errno: 150)
mysql> create database new_db_name;
Query OK, 1 row affected (0.00 sec)

mysql> connect new_db_name;
Connection id:    1591
Current database: new_db_name

mysql> create table client_feed_group(id int);
Query OK, 0 rows affected (0.01 sec)

Ho già lasciato cadere il database TEST_DB; questo dovrebbe rimuovere tutti tavolo e tutti i record. Ho poi crearlo, collego ad esso e cercare di creare la vecchia tabella client_feed_group; Ottengo un errore. Creo un altro database con un nome diverso e seguire la stessa procedura; questa volta non c'è nessun problema.

È stato utile?

Soluzione

Sembra essere lo stesso di questo MySQL bug .

La procedura si trova in basso nei commenti lavorato per me, che è

  • creare la tabella di nuovo utilizzando lo stesso schema di quello vecchio, ma utilizzando un motore MyISAM
  • uso ALTER TABLE per cambiare il motore a InnoDB

da allora in poi le cose sembrano funzionare correttamente; Ora posso eliminare il database e fare un ripristino completo senza problemi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top