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

Комментарии

Чтобы написать комментарий нужно войти на сайт.
Или получить доступ прямо сейчас:


Нажимая эту кнопку
Вы принимаете политику конфиденциальности