Конвертирование таблиц из MyISAM в InnoDB одной командой
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для перевода всех таблиц MyISAM в InnoDB воспользуйтесь следующим 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:
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 название_базы
Не забудьте заменить имя_пользователя
, пароль
и название_базы
на соответствующие значения. Эта однострочная команда выполняет три действия:
- Создаёт список таблиц MyISAM.
- На основе
awk
, генерирует командыALTER TABLE
для каждой таблицы. - Исполняет сгенерированные команды
ALTER TABLE
в выбранной базе данных.
Работа с представлениями и специальными символами: Поддержим порядок!
Information_schema
содержит данные о представлениях, которые являются не таблицами, и их изменение не требуется. Наш скрипт этих представлений не затрагивает, так как использует только 'BASE TABLE'.
Кроме того, обратите внимание на правильную обработку названий таблиц с нестандартными символами, заключая их в обратные кавычки:
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-разработчики могут пакетно конвертировать таблицы прямо в своей среде разработки:
$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");
}
Не забывайте о корректности заполнения полей хост
, название_базы
, имя_пользователя
и пароль
. Также уделите внимание обработке исключений.
Визуализация
Визуализация для большей наглядности:
🚗🚗🚗 🔄 🔧🔨⚙️ 🔄 🚙🚙🚙
Примечание: Наши таблицы MyISAM (🚗) проходят процесс модернизации (🔧🔨⚙️), и как результат — усовершенствованные и более производительные таблицы InnoDB (🚙).
Путеводитель по потенциальным издержкам при конвертации
Все на борту экспресса внешних ключей 🚂
InnoDB использует более строгие ограничения для внешних ключей по сравнению с MyISAM. Убедитесь в совместимости внешних ключей до начала процесса конвертации.
Поиск по тексту, потерянный и найденный 🕵️♂️
MyISAM и InnoDB по-разному обрабатывают индексы полнотекстового поиска. После конвертации необходимо их перестроить.
Один размер не подходит всем ❗
Некоторые специфические для MyISAM настройки хранения могут быть не совместимы с InnoDB. После перевода эти настройки придется настраивать с учетом разницы между двумя движками.
Размер имеет значение (для баз данных) 💽
При крупном объеме базы данных, процесс конвертации может потребовать продолжительное время и создать нагрузку на сервер. Планируйте конвертацию на периоды низкой активности или проводите ее порционно.
Полезные материалы
- Официальная документация MySQL 8.0 :: Преобразование таблиц из MyISAM в InnoDB — действующий MySQL-кодекс правил по конвертации.
- Сравнение движков хранения в MySQL – Techotopia — аналитический обзор и сравнение движков MySQL.
- Дискуссия на Stack Overflow об переводе таблиц из MyISAM в InnoDB — обширная подборка решений от профессионального сообщества по вопросу конвертации таблиц.