Sphinx 不在只读数据库上重建

Sphinx not rebuild on read only database

我正在为我的应用程序使用 master/slave 数据库,有 2 个从属数据库,一个用于 sphinx,一个用于用户,按照规则 1 个主数据库

从属数据库设置为只读。问题是当我在奴隶上重建狮身人面像时它给出了一个错误

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

我该如何解决这个问题?

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

如果您希望坚持只读访问,您可以研究 real-time indices 作为 SQL 支持的增量索引的替代方案,因为实时索引允许更新作为基础 ActiveRecord数据变化。如果您 运行 Thinking Sphinx v4,那么抽取任务根本不会改变,您只需要使用不同的索引类型。

如果您使用的是 TS v3,则任务的名称不同(regenerate 而不是 rebuildgenerate 而不是 index)。 The documentation does distinguish between the two major releases.

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

我所做的是通过覆盖 class

删除更新增量查询表单思考 sphinx 配置
class ReadOnlyDeltas < ThinkingSphinx::Deltas::DefaultDelta
  def reset_query
   nil
  end
end

并以此 class

扩展模型
ThinkingSphinx::Index.define :table_name, :with => :active_record, :delta => ReadOnlyDeltas do

现在发生的事情是,当我 re_index 或重建 sphinx 时,它在从数据库上也能正常工作。

为了更新增量,我在 ruby 中编写了一个脚本,它在 5 分钟后使用 cronjob

更新主服务器上的所有增量