我正在为我的应用程序使用主/从数据库,并有2个奴隶,一个用于狮身人面像,一个用于用户,并按照规则1主
从属数据库设置为只读。问题是当我在奴隶上重建sphinx时会出错
The MySQL server is running with the --read-only option so it cannot execute this statement
我该如何解决这个问题?
正如评论中所确定的那样,这种情况正在发生,因为增量索引正在发挥作用,并且在运行完整索引时,它们需要写入访问权限作为重置增量标志列的一部分。
如果您希望保持只读访问权限,则可以将real-time indices作为具有增量的SQL支持索引的替代方法进行调查,因为实时索引允许在基础ActiveRecord数据更改时进行更新。如果你正在运行Thinking Sphinx v4,那么rake任务根本不会改变,你只需要使用不同的索引类型。
如果您使用的是TS v3,那么任务的命名方式不同(regenerate
而不是rebuild
,generate
而不是index
)。 The documentation does distinguish between the two major releases。
但是,如果您希望继续使用SQL支持的索引和增量,则必须对数据库进行写访问。
我所做的是删除更新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上的所有增量