Перевод таблиц MySQL в InnoDB

InnoDB отличает от MyISAM — другого популярного движка баз данных MySQL прежде всего принцип блокировки при выполнении запросов и скорость работы. С InnoDB скорость работы сервера баз данных значительно возрастает и конвертация таблиц может быть решением при высокой нагрузке, создаваемой MySQL из-за низкой оптимизированности запросов. В статье рассмотрен скрипт «Convert to innodb» автоматически изменяющий тип таблиц в указанной базе данных.

Прежде всего оказывается полезным узнать сколько таблиц и какие именно используют движок MyISAM. Сделать это можно выполнив в консоли сервера баз данных следующий запрос:

SELECT TABLE_SCHEMA as DbName ,TABLE_NAME as TableName ,ENGINE as Engine FROM information_schema.TABLES WHERE ENGINE = ‘MyISAM’ AND TABLE_SCHEMA NOT IN(‘mysql’,’information_schema’,’performance_schema’);

Чтобы преобразовать одну из таблиц из вывода предыдущей команды нужно выполнить:

USE databasename;

ALTER TABLE tablename ENGINE = InnoDB;

Этого запроса достаточно для того, чтобы конвертировать таблицу, но в больших проектах таких таблиц как правило сотни и тысячи и если нужно уонвертировать все то повторять запрос для каждой непрактично.

Автоматизировать работу можно написав простой bash-скрипт.

Перевод таблиц в innodb при помощи bash скрипта ‘Convert to innodb’

!/bin/bash

echo «Converting tables for database DBnamE» for table in mysql -u root -pPassworD -N -e «SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = ‘DBnamE’ AND engine = ‘MyISAM’» do echo -n » Alter table table $table … « mysql -u root -pfc8d68997c2c96c6f955921c23c48d33 -N -e «ALTER TABLE $table ENGINE = InnoDB» DBnamE echo «done» done if [ «$table» = «» ]; then echo «No tables found in DBnamE» else echo «Converting completed»

Вместо DBnamE в скрипт подставляем имя базы данных, в которой находятся таблицы

В скрипте операции выполняются от имени пользователя root, но можно указать имя другого пользователя, который имеет достаточно привилегий для изменения таблиц

Вместо PassworD нужно указать пароль пользователя

Как и любой bash скрипт данный код нужно сохранить в файл и дать на него права на исполнение

chmod +x convert

Затем в файле подставляются имя баз данных, пользователя и его пароль и скрипт запускается и из консоли

./convert

Информация о конвертируемых таблицах будет выводиться на экран. Если случаются какие-то ошибки таблицы при которых они произошли нужно конвертировать вручную после того как скрипт отработает.

Совпадений по запросу " "

    Совпадений по запросу "" не найдено