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

标签 mysql sql database innodb full-text-indexing

我的表正在使用“InnoDB”存储引擎,当我尝试对其进行“全文搜索”时出现错误“所用表不支持全文索引” 这就是为什么我试图将我的表引擎从“InnoDB”更改为“MyIsam”,但它再次给我错误“Cannont delete or update table foreign key contraint fail”。它链接到其他表,我不想更改其中的表和数据

当我运行时

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:升级到 MySQL 5.6

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

我已经提到在 DBA StackExchange ( Full text search results in a large amount of time spent in 'FULLTEXT initialization' ) 中使用特定于 InnoDB 的 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 上写了一篇题为 Can I have an InnoDB master and MyISAM slaves with Full-Text for searching? 的帖子关于如何做到这一点。

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

关于mysql - 如何在不对表进行任何更改的情况下更改表的引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29712747/

相关文章:

mysql查询执行时间太长

php - 如何调试不再有效的 PHP/SQL 代码?

mysql - 使用like语句后如何从SQL中获取数据

sql - 如何重命名 Athena 中的表?

mysql - 主表和事务表之间有什么关系?

mysql - 如何使用剩余表的自动增量值插入多个表

PHP 和 MySQL - 用数组中的 N 个值替换 N 个分隔符

mysql - 如何在vb.net WPF和MySQL中使用DataGrid获取/过滤两个日期之间的数据?

sql - ssrs 报表中的报表参数验证

database - 只向表中添加一列而不是执行连接操作是否更好?