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

03.10.2016 в 11:15
24952
+197

В данной статье рассмотрим оба варианта перевода движка: из 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 на этом завершено.

loader
03.10.2016 в 11:15
24952
+197
Комментарии
К этому посту больше нельзя оставлять новые комментарии
Логические задачи с собеседований