MySQL “lembra” Tabela Innodb excluída
-
27-09-2019 - |
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.
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.