Mysql конвертация Myisam -> Innodb

Периодически сталкиваюсь с интересным явлением, когда на клиентских VPS mysql работает в режиме Innodb, а таблицы БД хранятся в формате MyIsam. Это может негативно повлиять на производительность. Вероятно, что проблема возникает из-за многократного переноса БД с одного VPS на другой или из-за обновления СУДБ. Но смотрится это довольно странно. Опишу решение и возможные проблемы.

Исходные данные: сервер mysql в режиме Innodb, БД с таблицами Myisam. БД неободимо конвертировать в InnoDB.

Как сделать дамп базы данных MySQL

На всякий случай — восстановление БД из дампа:

Как создать новую БД

Можно и даже лучше это сделать из установленной на сервере панели управления, но можно и из консоли

  • Из консоли mysql:

убедимся, что БД создана

  • Создаём новую БД и просматриваем список существующих из обычной консоли:

Как конвертировать таблицы mysql из MyIsam в InnoDB

Объединим операцию по конвертации и переносу данных из дампа в БД

Если процесс завершился без сообщений об ошибках, то он удачно выполнен. Но бывает, что в таблицах MyIsam существуют FULLTEXT индексы, тогда при этой операции выведется сообщение об ошибке:

Для успешной конвертации MyIsam -> InnoDB FULLTEXT индексы необходимо удалить.

Как найти FULLTEXT индексы в таблице?

Можно посмотреть запрос по которому создавалась таблицы

если среди текста попадётся следующая строка или строки, то индексы найдены

Как удалить FULLTEXT индекс?

После удаления FULLTEXT индексов следует создать новый дамп и повторить все операции.