如何将所有MySQL表从MyISAM转换为InnoDB存储引擎
时间:2020-02-23 14:40:53 来源:igfitidea点击:
MySQL数据库中是否有一些表仍在使用MyISAM,并且想将它们转换为使用InnoDB存储引擎?本教程旨在指导我们完成MyISAM向InnoDB Storage引擎的转换。
InnoDB非常注重性能,对事务的支持和可靠性。自MySQL 5.5起,它已成为默认的MySQL存储引擎。我们可以阅读MyISAM到InnoDB:为什么以及如何获得为什么选择InnoDB的摘要。
首先,在转换表之前,我们需要获取使用MyISAM的表的列表。为此,请从CLI登录到MySQL/MariaDB并运行以下查询。
$mysql -u root -p
然后运行:
SELECT CONCAT('ALTER TABLE ',TABLE_NAME,' ENGINE=InnoDB;') FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE='MyISAM' AND table_schema = 'mydb';
用实际数据库名称替换mydb。这将为我们提供使用MyISAM的数据库" mydb"中的表的列表,以及将它们转换为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 Shell中运行以下命令。
切换到要使用的数据库。
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数据存储引擎的所有数据库表。