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