MySQL «запоминает» удаленную таблицу InnoDB - PullRequest
1 голос
/ 30 октября 2010

MySQL огорчает меня, когда я пытаюсь воссоздать определенную таблицу в определенной базе данных; Я считаю, что проблема в том, что где-то в MySQL есть записи внешних ключей таблицы, и он пытается проверить ограничение, когда я пытаюсь воссоздать таблицу.

Данная база данных предназначена для тестовой среды и периодически обновляется путем выгрузки БД prod, сброса тестовой БД, повторного создания тестовой БД и последующего применения дампа БД prod к новой тестовой БД.

Однако вчера вечером, когда я пошел делать эту процедуру, я неожиданно столкнулся с ошибкой MySQL: 121, которая обычно связана с неправильным внешним ключом ... Если я пытаюсь использовать другое определение таблицы без указания ключа, я получаю ошибка: 150 вместо. Однако это происходит только в том случае, если я пытаюсь применить дамп к новой базе данных с тем же именем, что и у старой. Если я создаю базу данных с именем, отличным от старого (все еще на том же сервере), и применяю дамп, проблем не возникает.

На самом деле, я даже не могу создать таблицу с точно таким же именем без каких-либо ключей, даже в совершенно новой базе данных.

Этот пример демонстрирует проблему

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)

Я уже удалил базу данных test_db; это должно удалить всю таблицу и все записи. Затем я создаю его, подключаюсь к нему и пытаюсь создать старую таблицу client_feed_group; Я получаю ошибку. Я создаю другую базу данных с другим именем и выполняю те же шаги; на этот раз проблем нет.

1 Ответ

1 голос
/ 13 ноября 2010

Это похоже на эту ошибку MySQL .

У меня сработала процедура, расположенная далеко внизу в комментариях, то есть

  • создайте таблицу снова, используя ту же схему, что и старая, но с использованием механизма MyISAM
  • используйте ALTER TABLE, чтобы изменить двигатель на innodb

, после этого все будет работать правильно;Теперь я могу удалить базу данных и выполнить полное восстановление без проблем.

...