Сфинкс не перестраивается на базе данных только для чтения - PullRequest
0 голосов
/ 10 марта 2019

Я использую базы данных master / slave для моего приложения и имею 2 slave, одну для sphinx и одну для пользователей и в соответствии с правилом 1 master

Подчиненные базы данных установлены только для чтения. Проблема в том, что когда я перестраиваю sphinx на подчиненном устройстве, выдается ошибка

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

Как я могу решить эту проблему?

Ответы [ 2 ]

1 голос
/ 11 марта 2019

Как определено в комментариях, это происходит из-за того, что дельта-индексы находятся в игре, и им требуется доступ на запись как часть сброса столбцов дельта-флага при запуске полного индекса.

Если вы хотите сохранить доступ только для чтения, вы можете исследовать индексы реального времени как альтернативу индексам на основе SQL с дельтами, поскольку индексы реального времени допускают обновления в качестве базовых данных ActiveRecord. изменения. Если вы работаете в Thinking Sphinx v4, то задачи с граблями вообще не изменятся, вам просто нужно использовать разные типы индексов.

Если вы используете TS v3, тогда задачи назывались иначе (regenerate вместо rebuild, generate вместо index). В документации различаются два основных выпуска .

Но да, если вы хотите продолжить работу с индексами и дельтами на основе SQL, тогда необходим доступ для записи в базу данных.

0 голосов
/ 01 июня 2019

Что я сделал, так это удалил обновленный дельта-запрос, думая о конфигурации sphinx, переопределив класс

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

и расширяйте модели этим классом

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

Теперь, что происходит, когда я re_index или перестроить sphinx, он отлично работает и на slave db.

Для обновления дельты я пишу скрипт на ruby, который через 5 минут обновляет все дельты на мастере с помощью cronjob

...