如何在不对 table 进行任何更改的情况下更改 table 的引擎

How to change engine of table without making any changes to table

我的 table 正在使用 'InnoDB' 存储引擎,当我尝试对其执行 'full text search' 时,它给我一个错误 'The used table doesn't support full text索引' 这就是为什么我试图将我的 table 引擎从 'InnoDB' 更改为 'MyIsam' 但它再次给我错误 'Cannont delete or update table foreign key contraint fail'。它链接到其他 table,我不想同时更改 table 和其中的数据

当我运行

SHOW VARIABLES LIKE "%version%"

innodb_version 1.1.8
protocol_version 10
slave_type_conversions 
version 5.5.24
version_comment MySQL Community Server (GPL)
version_compile_machine x86
version_compile_os Win64

这是我的sql版本和InnoDb版本,请帮助我。

选项 1:升级到 MySQL5.6

由于您不想更改数据,唯一的办法就是升级到 MySQL 5.6,因为 InnoDB 在该版本中支持 FULLTEXT 索引。

我已经提到在 DBA StackExchange (Full text search results in a large amount of time spent in 'FULLTEXT initialization')

中使用 InnoDB-specific FULLTEXT 选项

为了完整说明,please read the MySQL Documentation on it

选项 2:切换到 MyISAM

您需要删除约束以更改存储引擎

ALTER TABLE yourtable ENGINE=MyISAM;

选项 3:使用 MySQL 复制

如果你有一个奴隶,运行这个

SET foreign_key_checks = 0;
SET unique_checks = 0;
STOP SLAVE;
ALTER TABLE childtable DROp CONSTRAINT ... ;
ALTER TABLE parenttable ENGINE=MyISAM;
ALTER TABLE childtable ENGINE=MyISAM;
ALTER TABLE ADD FULLTEXT ftindexname (columns);
START SLAVE;

这样的话,Master还是全InnoDB,slave的表都改成MyISAM了。

可以做到这一点,因为我在 DBA StackExchange 中写了一个 post 标题为 Can I have an InnoDB master and MyISAM slaves with Full-Text for searching? 的关于如何做到这一点的文章。

完成此操作后,只需在从站上执行全文搜索即可。