MySQL меняем storage engine в нескольких таблицах на InnoDB

Задача изменить storage engine для всех таблиц mysql в одной базе данных.

Это решение работает для тех таблиц, которые имеют одинаковый префикс, например для таблиц wordpress и других CMS поддерживающих префиксы.

Коротко, задача решается получением списка всех таблиц в один файл, с помощью замены строк строятся правильные SQL команды и последнее - надо выполнить команды.

1)Получаем список таблиц в файл:

CODE:
  1. 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:
  1. mysqldump -u username -ppassword -D dbname> dbname.sql
  2. mysql -u username -ppassword -D dbname <outputfile.txt

Может кто нибудь подскажет как сделать то же самое для таблиц без одинакового префикса?

  1. Vadim Voituk says:

    Первое что прийшло в голову:

    db='DatabaseName'; mysql -e "show tables" $db | grep -v "Tables_in_$db" | sed 's/^/ALTER TABLE `/' | sed "s/$/\` ENGINE=InnoDB; /" | mysql $db

  2. Oleg Lobach says:

    Если без префикса, то можно ориентироваться на начало строки.

  3. Vadim красиво!

    Да , символ начала строки, как вылетел это из головы. :)

  1. There are no trackbacks for this post yet.

Leave a Reply