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 на этом завершено.
Комментарии