Индексирование таблиц MySQL в Sphinx RT с использованием бинлога

AntonyZZZ

Новичок
Здравствуйте, уважаемые коллеги. Взялся за индексирование в Сфинкс. Думаю использовать RT через бинлог. Кто-нибудь делал/пытался делать индексирование через бинлог MySQL?. Для чтения бинлога вроде даже есть библиотеки, например php-binlog или MySQL Binlog Events (на С++, вроде даже официальная, правда не релиз). Что из этого вышло? В интернете как-то мало информации по этому вопросу, но кое-что есть.

P.S. Не хочу использовать схему main+delta, потому, что для поддержки удаления и обновления нужно вносить большие изменения в базу. Например, таблица EAV 8M+ записей, с ALTER TABLE уйдет в спячку надолго.
 

fixxxer

К.О.
Партнер клуба
Идея интересная. И вполне реализуемая:
1) включаем binlog_format = row (и, возможно, оставляем только нужные базы данных через binlog-use|ignore-db)
2) берем, скажем, Бегуновскую libslave: https://github.com/Begun/libslave
3) делаем на ее основе программу, которая подсоединяется к серверу, вычитывает с сохраненной позиции replication binary log (как это делают слейвы), фильтрует ненужное, а из нужного выплевывает xmlpipe2 или генерирует sql-запросы на sphinx.

php тут, правда, нигде не понадобится :) ну разве что написать wrapper extension на, скажем, php-cpp для libslave и писать потом на php, но особого смысла в этом не наблюдаю.
 

AntonyZZZ

Новичок
Спасибо большое за ответ!
О libslave не знал, посмотрю.
Да, на C++ маленькую программу быстрее получится написать, чем делать расширение.
При замене формата бинлога придется заново реплики поднимать, верно?
 

fixxxer

К.О.
Партнер клуба
да вроде он особо не менялся, вот разве что gtid добавили

а если ты про row/statement/mixed, то понятно, что нужен row, statement не годится - из sql-запроса типа delete from users where username like '%bar%' киллисты не сделаешь итд :)
 

fixxxer

К.О.
Партнер клуба
В libslave кстати в комплекте есть микро mysql клиент. Он там нужен для служебных запросов к мастеру, но в принципе им же можно и в sphinx RT писать.
 

AntonyZZZ

Новичок
Спасибо большое! Про row в курсе. Для SBR нужен будет SQL-парсер, так что проще переключиться на RBR и поднять новые реплики
 

fixxxer

К.О.
Партнер клуба
Можно оставить на мастере statement/mixed, а row вычитывать с реплики.
 
Сверху