MySQL合并InnoDb和MyiSAM表

时间:2011-12-06 02:46:29

标签: merge innodb sync myisam full-text-search

我正在为一些数据创建一个小型搜索引擎,因为它具有全文搜索功能,所以需要使用MyiSAM。不幸的是,我还需要使用事务进行提交和回滚,以确保输入将被搜索的数据。

我为数据存储创建了一个InnoDb表(因为它可以执行提交和回滚),以及一个MyiSAM表,它是InnoDb表的精确副本,用于使用全文搜索。现在的问题是保持这些表同步。

我正在寻找一种有效的方法来保持MyiSAM表与InnoDb表同步。我不能使用触发器,因为在将数据提交到InnoDb表之前,我不希望任何存储在MyiSAM表中的内容。

我可以编写一些将在提交时同步表的代码,但我不确定将两个表组合在一起的快速方法。表可能很大,我不希望用户等待一小时插入一条记录。在相同的上下文中,我不希望用户无法在一天中的某个时间访问搜索引擎一小时,因为cron作业同步两个表并锁定MyiSAM表。

有一点需要提及的是,我的MySQL服务器是在Bluehost上,因此MySQL在5.1版本上被锁定,所以我不能在版本5.6中使用新的InnoDb全文搜索。当然,我无法在Bluehost上安装像sphinx这样的第三方搜索服务器。

如果有人能很好地解决我的问题,我将非常感激。

2 个答案:

答案 0 :(得分:0)

这是一个老问题,但对于在搜索中遇到此问题的人:InnoDB表支持从MySQL 5.6.4开始的FULLTEXT索引。

答案 1 :(得分:0)

我有一个轻微的解决方法

  1. 设置MySQL复制
  2. 在主人身上
    • 删除MyISAM表上的FULLTEXT索引
    • 将MyISAM表转换为InnoDB
  3. 在奴隶身上
    • 将InnoDB表格转换回MyISAM
    • 在MyISAM表上重新创建FULLTEXT索引
  4. 前进

    • 在Master上执行所有INSERT,UPDATE和DELETE。
    • 在Slave上进行所有FULLTEXT搜索。

    我之前已经建议过:https://dba.stackexchange.com/a/22425/877