sorgalla.com

PHP, Zend Framework, Datenbanken und was sonst noch so anfällt.

Sphinx und SphinxSE unter Ubuntu installieren

with 5 comments

Wer Projekte mit MySQL als Datenbank-Backend realisiert, wird die Erfahrung schon gemacht haben, dass er bei der Implementierung einer Suchfunktion an Grenzen stößt. Der Fulltext-Index ist nicht der Wahrheit letzter Schluss und andere Lösungen oft nur unbefriedigende Workarounds.

Hier kann Sphinx Abhilfe schaffen. Besonders die nahtlose Integration in MySQL sticht hier als Pluspunkt heraus. So kann man den Suchindex direkt über SQL-Abfragen ansprechen und andere Tabellen hinzu-”joinen”. In diesem Artikel wollen wir uns mit der Installation von Sphinx und SphinxSE, der Storage-Engine für MySQL, beschäftigen.

Die Installationsanleitung bezieht sich auf Ubuntu 9.10 als Betriebssystem, lässt sich aber im Prinzip auch für andere Systeme/Versionen nachvollziehen. Folgende Versionen waren zum Zeitpunkt der Erstellung dieses Artikels aktuell:

  • MySQL 5.1.37
  • Sphinx 0.9.9

Wir gehen davon aus, dass MySQL bereits installiert ist, falls nicht, schnell nachholen:

$ sudo apt-get install mysql-server-5.1

Sphinx installieren

Zuerst holen wir uns die Quellen von Sphinx und entpacken Sie:

$ wget http://www.sphinxsearch.com/downloads/sphinx-0.9.9.tar.gz
$ tar -xvzf sphinx-0.9.9.tar.gz
$ cd sphinx-0.9.9/

Da wir mit libstemmer-Support kompilieren wollen, um deutsches Stemming nutzen zu können (Standardmäßig unterstützt Sphinx nur Englisch und Russisch), holen und entpacken wir uns noch das entprechende Archiv:

$ wget http://snowball.tartarus.org/dist/libstemmer_c.tgz
$ tar -xvzf libstemmer_c.tgz

Nun installieren:

$ ./configure --with-libstemmer
$ make
$ sudo make install

Für die weitere Konfiguration verweise ich jetzt einfach mal auf die Dokumentation und den Quickstart von Sphinx.

SphinxSE installieren

Wir wechseln zuerst ins Elternverzeichnis und holen uns die Quellen von MySQL:

$ cd ../
$ apt-get source mysql-server-5.1
$ cd mysql-dfsg-5.1-5.1.37/

Nun kopieren wir die Dateien für die Storage-Engine in das entsprechende Verzeichnis:

$ cp -R ../sphinx-0.9.9/mysqlse storage/sphinx

./configure beschwert sich wegen eines fehlenden Docs/-Ordners. Also schnell das Archiv von der MySQL-Seite holen und den entsprechenden Ordner ins Installationsverzeichnis kopieren:

$ wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.37.tar.gz
$ mkdir temp
$ tar -xzvf mysql-5.1.37.tar.gz -C temp
$ mv temp/mysql-5.1.37/Docs .
$ rm -rf temp
$ rm mysql-5.1.37.tar.gz

Nun gehts ans Bauen. Die configure-Flags kommen aus debian/rules und sollten denen entprechen, mit denen die Original-Installation von MySQL gebaut wurde:

$ BUILD/autorun.sh
$ ./configure --prefix=/usr \
              --exec-prefix=/usr \
              --libexecdir=/usr/sbin \
              --datadir=/usr/share \
              --localstatedir=/var/lib/mysql \
              --includedir=/usr/include \
              --infodir=/usr/share/info \
              --mandir=/usr/share/man \
              --enable-thread-safe-client \
              --enable-local-infile \
              --with-pstack \
              --with-fast-mutexes \
              --with-big-tables \
              --with-unix-socket-path=/var/run/mysqld/mysqld.sock \
              --with-mysqld-user=mysql \
              --with-libwrap \
              --with-ssl \
              --without-docs \
              --with-extra-charsets=all \
              --with-embedded-server \
              --with-embedded-privilege-control
$ make

Danach finden wir im Verzeichnis storage/sphinx/.libs die ladbaren .so-Dateien für MySQL. Diese speichern wir nun in /usr/lib/mysql/plugin

$ sudo mkdir /usr/lib/mysql/plugin
$ sudo cp storage/sphinx/.libs/ha_sphinx.so* /usr/lib/mysql/plugin/
$ sudo chown -R mysql:mysql /usr/lib/mysql/plugin

Den Ort müssen wir nun noch MySQL mitteilen. Wir editieren /etc/mysql/my.cnf:

$ sudo vi /etc/mysql/my.cnf

Im Abschnitt [mysqld] fügen wir folgende Zeile ein:

plugin_dir = /usr/lib/mysql/plugin

Ubuntu nutzt AppArmor um zu regeln, welche Programme ausgeführt bzw. geladen werden dürfen. Also müssen wir AppArmor über den neuen Plugin-Ordner informieren:

$ sudo vi /etc/apparmor.d/usr.sbin.mysqld

Wir fügen folgende Zeile hinzu:

/usr/lib/mysql/plugin/* mr,

Danach AppArmor und MySQL neu starten:

$ sudo /etc/init.d/apparmor restart
$ sudo /etc/init.d/mysql restart

Zu guter Letzt installieren wir das Plugin:

$ mysql -u root -p
mysql> INSTALL PLUGIN sphinx SONAME 'ha_sphinx.so';
Query OK, 0 rows affected (0.00 sec)

Danach sollte Sphinx als Engine auftauchen und die “Support”-Spalte sollte “YES” enthalten:

mysql> show engines;
+------------+----------+---------------------------------------------------------+
| Engine     | Support  | Comment                                                 |
+------------+----------+---------------------------------------------------------+
| MyISAM     | DEFAULT  | Default engine as of MySQL 3.23 with great performance  |
  ...
| SPHINX     | YES      | Sphinx storage engine 0.9.9                             |
  ...
+------------+----------+---------------------------------------------------------+
13 rows in set (0.00 sec)

Links zum Thema

Post to Twitter Post to Delicious Post to Digg Post to Facebook Post to Reddit

Written by jan

Dezember 15th, 2009 at 7:18 pm

Posted in MySQL

Tagged with , , ,

5 Responses to 'Sphinx und SphinxSE unter Ubuntu installieren'

Subscribe to comments with RSS or TrackBack to 'Sphinx und SphinxSE unter Ubuntu installieren'.

  1. Hallo,

    wie wäre es wenn mal ein HowTo kommt wie man dort den indexer und die sphinx.conf richtig einstellt.

    Da gibt es wohl viele Probs

    Ali

    8 Jan 10 at 14:42

  2. Ja, ich hatte schon daran gedacht das als Serie mal fortzusetzen. Setup von Sphinx und Integration ins ZF.
    Ich hatte allerdings nie große Probleme und fand es relativ gut erklärt in der Doku.

    jan

    8 Jan 10 at 15:26

  3. [...] neben der PHP-API auch SphinxSE (also die Sphinx-Engine für MySQL) verwenden möchte, dem sei dieser Artikel ans Herz [...]

  4. [...] Zur Installation findet ihr eine recht nette Anleitung findet man beim semanticblog und auf sorgalla.com! [...]

  5. [...] Zur Installation findet ihr eine recht nette Anleitung findet man beim semanticblog und auf sorgalla.com! [...]

Leave a Reply