将mySQL(5.6)数据库从MyISAM更改为InnoDB

我最近将我的CPanel服务器从mySQL 5.5升级到了mySQL 5.6,因为它现在支持对InnoDB进行全文search。 现在,我对mySQL并不是很了解,所以我想知道除了运行之外,还有什么特别的东西需要记住

ALTER TABLE my_table ENGINE=InnoDB; 

我的几个表都有全文索引。 他们会发生什么事? 索引是否会自动转换? 或者之后我是否必须手动重新构build它们?

如果您不更改任何FULLTEXT启动参数,则从MyISAM到InnoDB的转换将负责为InnoDB创buildFULLTEXT索引。

转换步骤

如果您可以从命令行界面连接到MySQL,请运行此查询

 SELECT DISTINCT table_schema,table_name FROM information_schema.statistics WHERE index_type='FULLTEXT'; 

这会给你每个有FULLTEXT索引的表。

使用该查询,运行此查询

 SELECT CONCAT('ALTER TABLE ',B.table_schema,'.',B.table_name,' ENGINE=InnoDB') Cmd FROM (SELECT DISTINCT table_schema,table_name FROM information_schema.statistics WHERE index_type='FULLTEXT') A INNER JOIN information_schema.tables B USING (table_schema,table_name) WHERE B.engine='MyISAM'; 

这将向您展示将MyISAM表与FULLTEXT索引转换为InnoDB的所有命令。

您可以将这些命令转储到一个文本文件。

 SQL="SELECT CONCAT('ALTER TABLE ',B.table_schema,'.',B.table_name,' ENGINE=InnoDB')" SQL="${SQL} FROM (SELECT DISTINCT table_schema,table_name" SQL="${SQL} FROM information_schema.statistics" SQL="${SQL} WHERE index_type='FULLTEXT') A" SQL="${SQL} INNER JOIN information_schema.tables B" SQL="${SQL} USING (table_schema,table_name)" SQL="${SQL} WHERE B.engine='MyISAM'" mysql -uroot -p -ANe"${SQL}" > ConversionScript.sql less ConversionScript.sql 

这将创build转换脚本并让您查看它。

如果您对脚本的内容感到满意,请login到mysql并运行以下命令:

 mysql> source ConversionScript.sql 

试一试 !!!