Как быстро сменить тип таблиц на InnoDB в WordPress

Вордпресс в наши дни отлично работает как с InnoDB так и с MyISAM, однако сам MySQL новых версий по-умолчанию рекомендует использовать InnoDB, так как при прочих равных он дает больше возможностей и выше скорость.

На всех моих старых сайтах использовался тип MyISAM, и встал вопрос о том, как быстро сменить его на InnoDB.

Первое, что приходит в голову – установить phpMyAdmin и вручную все заменить, однако если сайтов хотя бы 10, то это то еще приключение! В моем случае phpMyAdmin вообще не был установлен, и возиться с его настройкой не хотелось.

Зато я давно знаю об одном интересном плагине под названием Adminer – это почти полноценная замена phpMyAdmin! Устанавливаем его, и в раздел Tools – Adminer и нажимаем любую из кнопок: “Start Adminer inside” или “Start Adminer in a new tab”. В результате откроется окно:

Главное окно плагина Adminer

Главное окно плагина Adminer

Дальше можно руками пробежаться по всем таблицам и поменять тип таблиц, однако, мы уже определились, что если сайтов много, то и таблиц будет 11 умножить на количество сайтов! Значит 10 сайтов это 110 таблиц – долговато будет =)

Переходим в раздел “SQL запрос” в меню в левом верхнем углу и в открывшемся окне вставляем текст запроса:

Вставляем запрос в Adminer

Вставляем запрос в Adminer

SET @DATABASE_NAME = 'ksenzov';

SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE=InnoDB;') AS sql_statements
FROM information_schema.tables AS tb
WHERE table_schema = @DATABASE_NAME
AND `ENGINE` = 'MyISAM'
AND `TABLE_TYPE` = 'BASE TABLE'
ORDER BY table_name DESC;

Обратите внимание, в первой строке вместо ksenzov нужно ввести название своей базы данных, она указана в выпадающем списке над меню в левом верхнем углу.

Выполняем запрос, и в результате сервер MySQL выдает нам еще несколько запросов:

MySQL сгенерировал запросы

MySQL сгенерировал запросы

ALTER TABLE `ksenzov_users` ENGINE=InnoDB;
ALTER TABLE `ksenzov_usermeta` ENGINE=InnoDB;
ALTER TABLE `ksenzov_term_taxonomy` ENGINE=InnoDB;
ALTER TABLE `ksenzov_term_relationships` ENGINE=InnoDB;
ALTER TABLE `ksenzov_terms` ENGINE=InnoDB;
ALTER TABLE `ksenzov_posts` ENGINE=InnoDB;
ALTER TABLE `ksenzov_postmeta` ENGINE=InnoDB;
ALTER TABLE `ksenzov_options` ENGINE=InnoDB;
ALTER TABLE `ksenzov_links` ENGINE=InnoDB;
ALTER TABLE `ksenzov_comments` ENGINE=InnoDB;
ALTER TABLE `ksenzov_commentmeta` ENGINE=InnoDB;

Их нужно скопировать целиком, все, и вставить еще раз в окно “SQL запрос” и выполнить.

В результате выполнения все типы таблиц в базе данных поменяются на InnoDB!