Чат PHP-разработчиков
Логические задачи
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 на этом завершено.

Присоединяйтесь к нам в ВКонтакте и в Facebook, чтобы не пропустить новые уроки. А также вступайте в наш чат PHP-разработчиков в Telegram.
Об авторе
Generic placeholder image
Артём Ивашкевич
Занимаюсь программированием более трех лет, работаю над проектами с миллионной посещаемостью. В свободное время обучаю программированию на PHP других людей, потому что мне это нравится. Если вы интересуетесь темой IT и хотели бы стать разработчиком, рекомендую прочитать статью о том, как я стал программистом.
Читайте также
Комментарии (0)