Если перед вами возникла задача конвертировать таблицы MyISAM в InnoDB (или наоборот), то можете воспользоваться моей инструкцией.
Thank you for reading this post, don't forget to subscribe!Я провожу конвертацию sql дампа из-за этого создает даунтайм на время операции.
Предварительно
Перед тем как начать стоит убедиться, что в конфиге mysql включена поддержка InnoDB и другие параметры настроены верно, иначе потеряете и время и нервы.
Откройте конфиг mysql /etc/my.cnf и убедитесь что там нет или закоментирована сточка skip-innodb (если вы наоборот отказываетесь от innodb, то в последствии можете добавить эту строчку, это позволит сэкономить память на ненужном движке).Так же для innodb убедитесь в правильности параметра innodb_data_file_path. Он должен быть похож на:
innodb_data_file_path = ibdata1:100M:autoextend
, где 100M – минимальный создаваемый размер файла под хранение таблиц, autoextend – разрешает автоматическое увеличение этого файла.
Если у этого параметра установлен еще ключ max:NN – то либо удалите его совсем, либо выставите *NN* в максимальный размер для одной таблице, иначе импорт дампа может выпасть за этот лимит и придется его менять.
Или за место innodb_data_file_path использовать innodb_file_per_table, тогда под каждую таблицу будет использоваться свой отдельный файл.
Любые изменения в конфигурации потребует перезапуска mysql сервера.
Конвертация
Все операции выполняются в консоле.
-
Создание исходного дампа базы:
mysqldump --opt -u USER -p DBNAME > dbname.sql
-
Изменяем тип движка для таблиц:
для MyISAM → InnoDB:
sed 's/ENGINE=MyISAM/ENGINE=InnoDB/g' dbname.sql > dbname.innodb.sql
для InnoDB → MyISAM:
sed s/ENGINE=InnoDB/ENGINE=MyISAM/g dbname.sql > dbname.myisam.sql
-
Теперь удалим саму БД:
mysqladmin -u USER -p drop DBNAME
-
И создадим заново:
mysqladmin -u USER -p create DBNAME
-
Заливаем дамп обратно:
mysql -u USER -p DBNAME < dbname.{innodb|myisam}.sql
Отключение движка innodb на mysql 5.5
Если вы не планируете использовать движок innodb базе данных mysql, его можно отключить. Обычно нужно раскомментировать опцию в файле my.cnf:
skip-innodb
В новых версиях mysql 5.5 этой опции уже не достаточно, база не запускается. Ошибка при запуске mysql - "unknown unsupported storage engine innodb". Если у вас подобная ситуация, необходимо добавить еще одну опцию:
default-storage-engine=myisam
При этом нужно помнить, что эти опции должны быть размещены в секции [mysqld] конфигурационного файла my.cnf базы mysql. Если просто добавить эти параметры, то будет ошибка при запуске mysql.