转换步骤

转换步骤

我最近将 CPanel 服务器从 mySQL 5.5 升级到了 mySQL 5.6,因为它现在支持 InnoDB 的全文搜索。现在,我对 mySQL 不是很在行,所以我想知道除了运行

ALTER TABLE my_table ENGINE=InnoDB;

我的几个表都有全文索引。它们会怎样?索引会自动转换吗?还是我必须事后手动重建它们?

答案1

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

转换步骤

如果您可以从命令行界面连接到 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';

这将向您显示将具有 FULLTEXT 索引的 MyISAM 表转换为 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

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

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

mysql> source ConversionScript.sql

试一试 !!!

相关内容