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

AntonyZZZ

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

P.S. Не хочу использовать схему main+delta, потому, что для поддержки удаления и обновления нужно вносить большие изменения в базу. Например, таблица EAV 8M+ записей, с ALTER TABLE уйдет в спячку надолго.
 
Идея интересная. И вполне реализуемая:
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, но особого смысла в этом не наблюдаю.
 
Спасибо большое за ответ!
О libslave не знал, посмотрю.
Да, на C++ маленькую программу быстрее получится написать, чем делать расширение.
При замене формата бинлога придется заново реплики поднимать, верно?
 
да вроде он особо не менялся, вот разве что gtid добавили

а если ты про row/statement/mixed, то понятно, что нужен row, statement не годится - из sql-запроса типа delete from users where username like '%bar%' киллисты не сделаешь итд :)
 
В libslave кстати в комплекте есть микро mysql клиент. Он там нужен для служебных запросов к мастеру, но в принципе им же можно и в sphinx RT писать.
 
Спасибо большое! Про row в курсе. Для SBR нужен будет SQL-парсер, так что проще переключиться на RBR и поднять новые реплики
 
Можно оставить на мастере statement/mixed, а row вычитывать с реплики.
 
Сверху