MySQL: сбой ограничения целостности из-за сочетания MyISAM и InnoDB. Как это безопасно исправить?

#mysql #django #innodb #myisam

#mysql #django #innodb #myisam

Вопрос:

У меня есть веб-сайт, работающий на Django и MySQL.

Часть таблиц БД использует InnoDB в качестве движка, а некоторые другие используют MyISAM.

Для этого нет особой причины. Проект был запущен давным-давно, и я думаю, что это вызвано изменением конфигурации.

Это приводит к сбою некоторого ограничения целостности, когда InnoDB FK ссылается на таблицу MyISAM. Изменение таблицы с MyISAM на InnoDB устраняет проблему.

Моя проблема в том, что этот сайт находится в стадии разработки. В нем уже есть это сочетание таблиц. Существует много таблиц.

Есть ли чистый и безопасный способ решить эту проблему? Должен ли я изменить все таблицы MyISAM на InnoDB? Есть ли какой-либо риск сделать это?

Заранее спасибо за вашу помощь

Ответ №1:

Вы, конечно, можете перевести веб-сайт в автономный режим и преобразовать ваши таблицы MyISAM в InnoDB. (Конечно, сначала создайте резервную копию базы данных.)

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

Вероятно, разумнее всего создать теневую копию этой системы (веб-сайт и БД) и тщательно проработать все ваши изменения. Следите за командами и изменениями конфигурации, которые вы выполняете в теневой копии, чтобы вы могли повторить их в живой копии, когда докажете, что они работают. Но есть некоторый шанс, что они не будут работать.

Теневые копии просты в наш век виртуальных машин.