Неожиданное изменение движка таблицы MySQL? - PullRequest
4 голосов
/ 26 ноября 2009

Я добавляю таблицы в базы данных MySQL, копируя и вставляя из файла в приложение командной строки mysql. Моя процедура состоит в том, чтобы скопировать оператор CREATE TABLE из файла и вставить его в мою базу данных разработки, а затем также вставить его в тестовую базу данных на другом компьютере. Я единственный, кто использует тестовую базу данных. Мои операторы CREATE TABLE указывают Engine = InnoDB. В тестовой базе данных включен InnoDB.

Недавно другой разработчик обнаружил, что все таблицы в тестовой базе данных являются таблицами MyISAM. Я проверил мой файл, он все еще говорит «Engine = InnoDB» для всего. Я проверил свою базу данных разработки, там есть таблицы Engine = InnoDB.

Чтобы доказать, что тестовая база данных не имеет проблем с InnoDB, я просто ALTER TABLEd установил механизм для InnoDB во всех таблицах.

Я надеюсь, что я только что сделал копию и вставил или другую глупую ошибку. Но кажется странным, что все тестовые таблицы - это MyISAM ... конечно, я не могу быть настолько согласен с моими ошибками. Все резервные копии и восстановление были сделаны с помощью mysqldump.

Есть ли способ непреднамеренной замены двигателей?

1 Ответ

4 голосов
/ 26 ноября 2009

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

В основном проблема заключается в том, что, если движок InnoDB не запускается по какой-либо причине (обычно проблемы с конфигурацией) - тогда MySQL молча возвращается к движку MyISAM. Даже если ваше утверждение гласит:

CREATE TABLE (...) ENGINE=InnoDB;

тогда, если InnoDB не активен, MySQL с радостью создаст таблицу MyISAM, даже не предупредив вас. Даже если вы позже обнаружите и исправите проблему InnoDB, все таблицы, созданные во время проблемы, останутся MyISAM. Прощай, целостность данных! :)

Вы можете запустить SHOW ENGINES, чтобы увидеть, какие двигатели активны. См. этот отчет об ошибке MySQL для получения более подробной информации.

...