Как преобразовать все таблицы MySQL из MyISAM в InnoDB Storage Engine

by itisgood

У вас есть какие-то таблицы в базе данных MySQL, все еще использующие MyISAM, и вы хотели бы преобразовать их в механизм хранения InnoDB ?

Это руководство было написано, чтобы помочь вам преобразовать MyISAM в InnoDB Storage Engine.

InnoDB уделяет большое внимание производительности, поддержке транзакций и надежности.

Начиная с версии MySQL 5.5 это был механизм хранения MySQL по умолчанию.

Вы можете прочитать MyISAM для InnoDB: почему и как получить сводную информацию о том, почему вы должны выбрать InnoDB.

Во-первых, прежде чем вы сможете конвертировать таблицы, вам нужно получить список таблиц, которые используют MyISAM.

Для этого войдите в свою MySQL / MariaDB из CLI и выполните запрос ниже.

$ mysql -u root -p

Затем запустите:

SELECT CONCAT('ALTER TABLE ',TABLE_NAME,' ENGINE=InnoDB;') 
 FROM INFORMATION_SCHEMA.TABLES
 WHERE ENGINE='MyISAM'
 AND table_schema = 'mydb';

Замените mydb вашим реальным именем базы данных.

Это выдаст вам список таблиц в базе данных mydb с использованием MyISAM и запросы, которые необходимо использовать для преобразования их в InnoDB.

Вы должны получить вывод, аналогичный приведенному ниже.

+------------------------------------------------------+
 | CONCAT('ALTER TABLE ',TABLE_NAME,' ENGINE=InnoDB;')  |
 +------------------------------------------------------+
 | ALTER TABLE wp_ninja_forms_fav_fields ENGINE=InnoDB; |
 | ALTER TABLE wp_blc_synch ENGINE=InnoDB;              |
 | ALTER TABLE wp_nf_relationships ENGINE=InnoDB;       |
 | ALTER TABLE wp_top_ten_daily ENGINE=InnoDB;          |
 | ALTER TABLE wp_es_deliverreport ENGINE=InnoDB;       |
 | ALTER TABLE wp_usermeta ENGINE=InnoDB;               |
 | ALTER TABLE wp_comments ENGINE=InnoDB;               |
 | ALTER TABLE wp_term_relationships ENGINE=InnoDB;     |
 | ALTER TABLE wp_options ENGINE=InnoDB;                |
 | ALTER TABLE wp_terms ENGINE=InnoDB;                  |
 | ALTER TABLE wp_blc_links ENGINE=InnoDB;              |
 | ALTER TABLE wp_links ENGINE=InnoDB;                  |
 | ALTER TABLE wp_term_taxonomy ENGINE=InnoDB;          |
 | ALTER TABLE wp_postmeta ENGINE=InnoDB;               |
 | ALTER TABLE wp_nf_objects ENGINE=InnoDB;             |
 | ALTER TABLE wp_give_donormeta ENGINE=InnoDB;         |
 | ALTER TABLE wp_commentmeta ENGINE=InnoDB;            |
 | ALTER TABLE wp_es_sentdetails ENGINE=InnoDB;         |
 | ALTER TABLE wp_blc_instances ENGINE=InnoDB;          |
 | ALTER TABLE wp_snp_log ENGINE=InnoDB;                |
 | ALTER TABLE wp_posts ENGINE=InnoDB;                  |
 | ALTER TABLE wp_blc_filters ENGINE=InnoDB;            |
 | ALTER TABLE wp_slim_events_archive ENGINE=InnoDB;    |
 | ALTER TABLE wp_top_ten ENGINE=InnoDB;                |
 | ALTER TABLE wp_es_emaillist ENGINE=InnoDB;           |
 | ALTER TABLE wp_es_templatetable ENGINE=InnoDB;       |
 | ALTER TABLE wp_nf_objectmeta ENGINE=InnoDB;          |
 | ALTER TABLE wp_users ENGINE=InnoDB;                  |
 | ALTER TABLE wp_es_notification ENGINE=InnoDB;        |
 | ALTER TABLE wp_ninja_forms_fields ENGINE=InnoDB;     |
 | ALTER TABLE wp_give_donors ENGINE=InnoDB;            |
 | ALTER TABLE wp_termmeta ENGINE=InnoDB;               |
 | ALTER TABLE wp_snp_stats ENGINE=InnoDB;              |
 | ALTER TABLE wp_es_pluginconfig ENGINE=InnoDB;        |
 +------------------------------------------------------+
 34 rows in set (0.003 sec)

Преобразование таблиц MySQL из MyISAM в хранилище InnoDB

Все, что вам нужно сделать сейчас, это скопировать и запустить команду ниже в вашей оболочке MySQL.

Переключитесь на базу данных, которую вы хотите использовать.

MariaDB [mysql]> use mydb;
 Reading table information for completion of table and column names
 You can turn off this feature to get a quicker startup with -A
 Database changed
 MariaDB [mydb]>

Затем запустите приведенные ранее команды преобразования.

Образец вывода:

 MariaDB [mydb]> ALTER TABLE wp_give_donors ENGINE=InnoDB;         
 Query OK, 0 rows affected (0.013 sec)              
 Records: 0  Duplicates: 0  Warnings: 0
 MariaDB [mydb]> ALTER TABLE wp_termmeta ENGINE=InnoDB;            
 Query OK, 0 rows affected (0.016 sec)              
 Records: 0  Duplicates: 0  Warnings: 0
 MariaDB [mydb]> ALTER TABLE wp_snp_stats ENGINE=InnoDB;           
 Query OK, 0 rows affected (0.015 sec)              
 Records: 0  Duplicates: 0  Warnings: 0
 MariaDB [mydb]> ALTER TABLE wp_es_pluginconfig ENGINE=InnoDB;     
 Query OK, 1 row affected (0.014 sec)               
 Records: 1  Duplicates: 0  Warnings: 0

Повторите первую команду, чтобы проверить, есть ли таблицы, возвращающие для MyISAM.

MariaDB [mydb]> SELECT CONCAT('ALTER TABLE ',TABLE_NAME,' ENGINE=InnoDB;')  FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE='MyISAM' AND table_schema = 'mydb';
 Empty set (0.003 sec)

Хорошо, теперь у вас есть все таблицы базы данных с использованием механизма хранения данных InnoDB.

См. также:

Как найти размеры базы данных в MySQL / MariaDB на сервере

Как сбросить пароль root MySQL или пароль root MariaDB

Как установить и использовать MariaDB на Ubuntu 18.04

Как удалить учетную запись пользователя MySQL / MariaDB в Linux / Unix

You may also like

Leave a Comment