Pergunta

O MySQL está me dando dor quando tento recriar uma tabela específica em um banco de dados específico; Acredito que o problema é que em algum lugar MySQL tem alguns registros das chaves estrangeiras da tabela e continua tentando verificar a restrição quando tento recriar a mesa.

O banco de dados em questão é para o ambiente de teste e é periodicamente atualizado ao despejar o DB Prod, soltando o banco de dados de teste, criando o banco de dados de teste novamente e aplicando o dump do Prod DB no novo db de teste.

No entanto, ontem à noite, quando fui fazer esse procedimento, de repente encontrei o Errno: 121 do MySQL, que normalmente está relacionado a uma chave estrangeira incorreta ... se eu tentar com uma desfnição de tabela diferente, sem especificar uma chave, eu recebo errno: 150 em vez de. No entanto, isso ocorre apenas se eu tentar aplicar o despejo a um novo banco de dados exatamente com o mesmo nome que o antigo. Se eu criar um banco de dados com um nome diferente do antigo (no mesmo servidor ainda) e aplicar o despejo, não há problema.

Na verdade, não consigo nem criar uma tabela exatamente com o mesmo nome, sem nenhuma chave, mesmo em um banco de dados completamente novo.

Este exemplo demonstra o 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)

Eu já retirei o banco de dados Test_DB; Isso deve remover toda a tabela e todos os registros. Em seguida, crio, conecto -o e tento criar o antigo client_feed_group; Eu recebo um erro. Crio outro banco de dados com um nome diferente e sigo as mesmas etapas; Desta vez, não há problema.

Foi útil?

Solução

Parece ser o mesmo que Este bug mysql.

O procedimento localizado bem nos comentários funcionou para mim, ou seja,

  • Crie a tabela novamente usando o mesmo esquema que o antigo, mas usando um motor Myisam
  • Use Alter Table para alterar o motor para Innodb

Depois disso, as coisas parecem funcionar corretamente; Agora posso soltar o banco de dados e fazer uma restauração completa sem problemas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top