Sphinx不能在只读数据库上重建

问题描述 投票:0回答:2

我正在为我的应用程序使用主/从数据库,并有2个奴隶,一个用于狮身人面像,一个用于用户,并按照规则1主

从属数据库设置为只读。问题是当我在奴隶上重建sphinx时会出错

The MySQL server is running with the --read-only option so it cannot execute this statement 

我该如何解决这个问题?

mysql ruby-on-rails sphinx thinking-sphinx master-slave
2个回答
1
投票

正如评论中所确定的那样,这种情况正在发生,因为增量索引正在发挥作用,并且在运行完整索引时,它们需要写入访问权限作为重置增量标志列的一部分。

如果您希望保持只读访问权限,则可以将real-time indices作为具有增量的SQL支持索引的替代方法进行调查,因为实时索引允许在基础ActiveRecord数据更改时进行更新。如果你正在运行Thinking Sphinx v4,那么rake任务根本不会改变,你只需要使用不同的索引类型。

如果您使用的是TS v3,那么任务的命名方式不同(regenerate而不是rebuildgenerate而不是index)。 The documentation does distinguish between the two major releases

但是,如果您希望继续使用SQL支持的索引和增量,则必须对数据库进行写访问。


0
投票

我所做的是删除更新delta查询表单,通过覆盖类来思考sphinx配置

class ReadOnlyDeltas < ThinkingSphinx::Deltas::DefaultDelta
  def reset_query
   nil
  end
end

并使用此类扩展模型

ThinkingSphinx::Index.define :table_name, :with => :active_record, :delta => ReadOnlyDeltas do

现在发生的事情是,当我重新索引或重建sphinx时,它也适用于奴隶数据库。

要更新delta,我在ruby中编写一个脚本,使用cronjob在5分钟后更新master上的所有增量

© www.soinside.com 2019 - 2024. All rights reserved.