POWERED BY RBSOFT

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

> SQL > Mysql/MariaDB
Дата обновления: 23 мая 2024 г. Дата публикации: 23 мая 2024 г. Автор: Стрекаловский Александр

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

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