Конвертирование таблиц из MyISAM в InnoDB одной командой

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для перевода всех таблиц MyISAM в InnoDB воспользуйтесь следующим SQL-скриптом:

SQL
Скопировать код
SELECT CONCAT('ALTER TABLE `', table_schema, '`.`', table_name, '` ENGINE=InnoDB;') 
FROM information_schema.tables 
WHERE engine = 'MyISAM' AND table_schema = НАЗВАНИЕ_ВАШЕЙ_БД;

Не забудьте заменить НАЗВАНИЕ_ВАШЕЙ_БД на наименование вашей фактической базы данных. Данный скрипт автоматизирует конвертацию движка таблиц на InnoDB.

Реализация конвертации с помощью скриптов: Работаем умным образом, нежели активно!

Воспользуйтесь данным SQL-скриптом для автоматизации процесса конвертации. Он создаёт команды ALTER TABLE для каждой MyISAM таблицы в вашей базе данных. Использование скрипта позволит вам сэкономить время и исключит ошибки, которые могут возникнуть при ручной конвертации.

Решение магии командной строки для энтузиастов MySQL

Если вы предпочитаете работать с командной строкой, имеется возможность быстрого перевода всех MyISAM таблиц при помощи MySQL CLI:

Bash
Скопировать код
mysql -u имя_пользователя -pпароль -D название_базы -e "SHOW TABLE STATUS WHERE Engine = 'MyISAM'" | 
awk '{ if(NR>1) print "ALTER TABLE `" $1 "` ENGINE=InnoDB;"}' | 
mysql -u имя_пользователя -pпароль -D название_базы

Не забудьте заменить имя_пользователя, пароль и название_базы на соответствующие значения. Эта однострочная команда выполняет три действия:

  1. Создаёт список таблиц MyISAM.
  2. На основе awk, генерирует команды ALTER TABLE для каждой таблицы.
  3. Исполняет сгенерированные команды ALTER TABLE в выбранной базе данных.

Работа с представлениями и специальными символами: Поддержим порядок!

Information_schema содержит данные о представлениях, которые являются не таблицами, и их изменение не требуется. Наш скрипт этих представлений не затрагивает, так как использует только 'BASE TABLE'.

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

SQL
Скопировать код
SELECT CONCAT('ALTER TABLE `', table_schema, '`.`', table_name, '` ENGINE=InnoDB;') 
FROM information_schema.tables 
WHERE engine = 'MyISAM' AND table_schema = НАЗВАНИЕ_ВАШЕЙ_БД AND `TABLE_TYPE` = 'BASE TABLE';

Работаете в PHP-среде? Мы учли ваши нужды!

PHP-разработчики могут пакетно конвертировать таблицы прямо в своей среде разработки:

php
Скопировать код
$pdo = new PDO('mysql:host=хост;dbname=название_базы', 'имя_пользователя', 'пароль');
$stmt = $pdo->query("SELECT table_name FROM information_schema.tables WHERE engine = 'MyISAM' AND table_schema = 'название_базы'");
while ($row = $stmt->fetch()) {
    $pdo->exec("ALTER TABLE `{$row['table_name']}` ENGINE=InnoDB");
}

Не забывайте о корректности заполнения полей хост, название_базы, имя_пользователя и пароль. Также уделите внимание обработке исключений.

Визуализация

Визуализация для большей наглядности:

Markdown
Скопировать код
🚗🚗🚗 🔄 🔧🔨⚙️ 🔄 🚙🚙🚙

Примечание: Наши таблицы MyISAM (🚗) проходят процесс модернизации (🔧🔨⚙️), и как результат — усовершенствованные и более производительные таблицы InnoDB (🚙).

Путеводитель по потенциальным издержкам при конвертации

Все на борту экспресса внешних ключей 🚂

InnoDB использует более строгие ограничения для внешних ключей по сравнению с MyISAM. Убедитесь в совместимости внешних ключей до начала процесса конвертации.

Поиск по тексту, потерянный и найденный 🕵️‍♂️

MyISAM и InnoDB по-разному обрабатывают индексы полнотекстового поиска. После конвертации необходимо их перестроить.

Один размер не подходит всем ❗

Некоторые специфические для MyISAM настройки хранения могут быть не совместимы с InnoDB. После перевода эти настройки придется настраивать с учетом разницы между двумя движками.

Размер имеет значение (для баз данных) 💽

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

Полезные материалы

  1. Официальная документация MySQL 8.0 :: Преобразование таблиц из MyISAM в InnoDB — действующий MySQL-кодекс правил по конвертации.
  2. Сравнение движков хранения в MySQL – Techotopia — аналитический обзор и сравнение движков MySQL.
  3. Дискуссия на Stack Overflow об переводе таблиц из MyISAM в InnoDB — обширная подборка решений от профессионального сообщества по вопросу конвертации таблиц.