Типичная ситуация - возникла необходимость на рабочей системе организовать полнотекстовый поиск с использованием движка Sphinx. При этом желательно не останавливать сервер. Все бы ничего, но инструкции по установке Sphinx предлагают собирать и Sphinx и MySQL из исходников, что на работающей системе может обернуться неприятностями. К тому же, далеко не все ставят MySQL не из пакетов.

 

Итак, конфигурация нашей системы такова.

Операционная система Ubuntu 12.10 server

Сервер баз данных MySQL 5.5

Алгоритм

Действуем по заранее утвержденному плану.

  1. Скачиваем исходники Sphinx
  2. Получаем исходники установленной у нас версии MySQL
  3. Помещаем исходный код библиотек Sphinx для MySQL в каталог с библиотеками MySQL
  4. Компилируем MySQL
  5. Берем скомпилированную библиотеку и скармливаем ее MySQL'у.

План несложный. Теперь - за работу!

Sphinx fulltext search

Исходники

Скачиваем Sphinx последней версии с официального сайта. Нас интересует версия Source tarball (tar.gz). Распаковываем, в нашем случае,  в /install/sphinx-2.2.6-release.

# tar -xzf sphinx-2.2.6-release.tar.gz

Добываем исходный код той версии MySQL которая у нас установлена. Для этого выполним команду:

# cd /install/mysql

# apt-get source mysql-server

После выполнения команд у нас появляется каталог /install/mysql/mysql-5.5-5.5.40 с исходниками MySQL.

Скопируем исходники библиотеки SphinxSE для MySQL (mysqlse) в каталог с исходниками MySQL:

# cp -R /install/sphinx-2.2.6-release/mysqlse /install/mysql/mysql-5.5-5.5.40/storage/mysqlse

Компиляция MySQL

Запускаем "autorun.sh" для пересборки сорцов:

# cd /install/mysql/mysql-5.5-5.5.40

# sh BUILD/autorun.sh

Далее мы отклоняемся от инструкции производителя и не будем пересобирать MySQL.

( мануал велит делать так:

# ./configure --with-plugins=sphinx,innobase,archive,blackhole

# make && make install )

Мы же на этом этапе конфигурим и собираем MySQL, но не устанавливаем. Причем указывать --with-plugins в параметрах не пришлось, все подхватилось как есть.

# ./configure

# make

На этом этапе MySQL немного ругнулся, что ему нужен cmake, а потом еще и libncurses. В ответ на что необходимые пакеты были установлены.

apt-get install cmake

apt-get install libncurses5-dev

Здесь можно пойти попить кофе, так как сборка у меня заняла не менее десяти минут. Собственно, сам процесс нам и не интересен. Интерес представляет только один-единственный файлик ha_sphinx.so, появившийся по такому адресу:

/install/mysql/mysql-5.5-5.5.40/storage/mysqlse/ha_sphinx.so

Установка Sphinx для MySQL

велит нам перекомпилировать Установим дополнительные движки, в том числе и Sphinx. MySQL хранит свои плагины по следующему адресу:

/usr/lib/mysql/plugin

Переписываем туда собранный нами ha_sphinx.so:

cp /install/mysql/mysql-5.5-5.5.40/storage/mysqlse/ha_sphinx.so /usr/lib/mysql/plugin/ha_sphinx.so

Теперь выполняем SQL запрос в MySQL, который подключит наш плагин:

mysql -u root -p -h localhost mysql> INSTALL PLUGIN sphinx SONAME 'ha_sphinx.so';

Если операция прошла успешно - плагин установлен. У меня все завелось на ходу, но для верности лучше перезагрузить:

# /usr/local/etc/rc.d/mysql-server start

Войдем в MySQL-консоль и посмотрим какие есть у нас движки:

mysql> show engines;

движки

Движок мы установили, теперь использование Sphinx для полнотекстового поиска!