03.10.2016   17650
MyISAM в InnoDB и наоборот

MyISAM в InnoDB и наоборот

Мало платят? Неинтересная работа? В институте ничему не учат?
Я тоже прошел через всё это. А потом взял и стал программистом :)
О том, как я это сделал, читай тут.

В данной статье рассмотрим оба варианта перевода движка: из MyISAM в InnoDB, и наоборот. В случае, когда переводим из MyISAM в InnoDB нужно открыть конфиг MySQL по пути /etc/mysql/my.cnf (для ОС Debian) и убедиться, что строка skip-innodb закомментирована, либо вовсе отсутствует. Если же Вы переводите InnoDB в MyISAM и после этого в СУБД не останется таблиц на InnoDB, то после завершения конвертации данную строку следует раскомментировать, это позволит сэкономить память на сервере.

Так же для при переходе на InnoDB нужно убедиться в правильности параметра innodb_data_file_path. Он должен быть похож на:

innodb_data_file_path = ibdata1:100M:autoextend

ibdata1 – минимальный создаваемый размер файла под хранение таблиц
autoextend – разрешает автоматическое увеличение этого файла.

Если у этого параметра установлен ключ max:NN – удалите его.

Также вместо innodb_data_file_path можно использовать innodb_file_per_table, тогда под каждую таблицу будет использоваться свой отдельный файл.

После внесения изменений следует перезапустить сервис MySQL:

service mysql restart

Теперь производим само преобразование. Создаём дамп БД, в которой планируем изменить тип движка:

mysqldump --opt -u USER -p DBNAME > dump.sql
Освой востребованную профессию и получай деньги за интересную работу.
Стань программистом!

И заменяем в дампе все значения с указанием нового движка. Для перевода из MyISAM в InnoDB:

sed 's/ENGINE=MyISAM/ENGINE=InnoDB/g' dump.sql > resultdump.sql

А для перевода InnoDB в MyISAM:

sed 's/ENGINE=InnoDB/ENGINE=MyISAM/g' dump.sql > resultdump.sql

После чего удаляем БД:

mysqladmin -u USER -p drop DBNAME

Создаём пустую БД:

mysqladmin -u USER -p create DBNAME

И загружаем в неё наш изменённый дамп:

mysql -u USER -p DBNAME < resultdump.sql

Готово. Не забудьте произвести дополнительные операции, описанные в начале статьи, если это необходимо. Изменение движка таблиц MySQL MyISAM InnoDB на этом завершено.

Присоединяйтесь к нам в Twitter, ВКонтакте, Facebook и Google+, а также вступайте в наш чат в Telegram, чтобы не пропустить новые уроки и быть в курсе последних новостей из мира веб-разработки.