MySQL меняем storage engine в нескольких таблицах на InnoDB
Задача изменить storage engine для всех таблиц mysql в одной базе данных.
Это решение работает для тех таблиц, которые имеют одинаковый префикс, например для таблиц wordpress и других CMS поддерживающих префиксы.
Коротко, задача решается получением списка всех таблиц в один файл, с помощью замены строк строятся правильные SQL команды и последнее - надо выполнить команды.
1)Получаем список таблиц в файл:
CODE:
-
mysql -u username -ppassword -D dbname -e "show tables"> outputfile.txt
2)Открываем файл outputfile.txt например в vim и делаем следующие замены:
- Префикс меняем на ALTER TABLE prefix_ - для vim: %s/prefix_/ALTER TABLE prefix_/g
- Перенос строки меняем на ENGINE=InnoDB плюс перенос строки - для vim: %s/\n/ ENGINE=InnoDB;\r/g
3)Выполняем скрипт, но прежде делаем бэкап базы:
CODE:
-
mysqldump -u username -ppassword -D dbname> dbname.sql
-
mysql -u username -ppassword -D dbname <outputfile.txt
Может кто нибудь подскажет как сделать то же самое для таблиц без одинакового префикса?

Первое что прийшло в голову:
db='DatabaseName'; mysql -e "show tables" $db | grep -v "Tables_in_$db" | sed 's/^/ALTER TABLE `/' | sed "s/$/\` ENGINE=InnoDB; /" | mysql $db
Если без префикса, то можно ориентироваться на начало строки.
Vadim красиво!
Да , символ начала строки, как вылетел это из головы. :)