Handbuch:SQLite

This page is a translated version of the page Manual:SQLite and the translation is 100% complete.
SQLite logo
SQLite logo

Die SQLite-Unterstützung von MediaWiki ist ab Version 1.17 für Produktiv-Installationen nutzbar. Seit MediaWiki-Version 1.13 ist die SQLite-Unterstützung Teil der Code-Basis. Allerdings variiert die Unterstützung durch Erweiterungen, die Datenbank-Änderungen vornehmen. Weiter unten folgen einige Bemerkungen zur Installation der SQLite-Bibliothek in der PHP-Umgebung.

Obwohl SQLite Produktivqualität aufweist und ein etablierter Support existiert, gibt es zwei wichtige Vorbehalte bei der Nutzung mit MediaWiki. Erstens unterstützen zwar die meisten Erweiterungen SQLite, aber einige populäre tun das bis heute nicht. Zweitens skaliert SQLite nicht über mehrere Server. Für ein großes Wiki mit vielen Inhalten empfiehlt sich ein Datenbanksystem, das ein Primär-Replikationsmodell unterstützt, z.B. MySQL. Wenn also das eingesetzte Wiki solche Erweiterungen nutzt oder ein Datenbanksystem mit Primär-Replikationsmodell benötigt, ist MySQL die bessere Wahl. Die Entscheidung über den Einsatz von SQLite, MySQL oder eines anderen Datenbanksystems sollte idealerweise vor dem erstmaligen Aufsetzen des Wiki erfolgen, da es schwierig ist, von SQLite nach MySQL zu wechseln, wenn die Nutzung des Wiki einmal gestartet ist.

Über SQLite

SQLite ist eine Open-Source Datenbankbibliothek, die mit einer Public Domain Lizenz veröffentlicht wurde. Im Unterschied zu Client-Server Datenbankmanagement-Systemen ist die SQLite-Bibliothek direkt zu PHP verlinkt, und wird dadurch zum direkten Bestandteil des Server-Prozesses MediaWiki nutzt die SQLite-Funktionalität durch einfache Funktionsaufrufe, um die Latenz zu reduzieren, da Funktionsaufrufe effizienter sind als die Interprozesskommunikation.

Die Nutzung von SQLite als Datenbank-Backend für MediaWiki hat ihre Vor- und Nachteile:

Vorteile
  • Es muss kein expliziter Datenbankserver installiert und gewartet werden wie bei MySQL. Das senkt den Administrationsaufwand und erspart einige Fehlerquellen.
  • Daraus folgt, dass SQLite für portable Installationen (z.B. auf einem USB-Stick) durchaus passend ist.
  • Es gibt keine Einschränkungen durch Datenbankbegrenzungen auf shared Hosts.
  • Die gesamte Datenbank ist in einer einzelnen Datei gespeichert, die auf allen Plattformen einsetzbar ist: das erleichtert Backups und Plattformwechsel.
Nachteile
  • SQLite skaliert nicht besonders gut, bei großen und breit genutzten Wikis sollte besser MySQL eingesetzt werden.
  • SQLite verfügt zwar über eine eigene Suchmaschine, diese wird allerdings nicht von höher entwickelten Lösungen wie Lucene unterstützt.

Bei einigen Erweiterungen ist bekannt, dass sie die Datenbank verändern oder Probleme bei der Installation von SQLite verursachen: AbuseFilter, Echo, Flow, und LiquidThreads.

SQLite Installation

SQLite wird mindestens in der Version 3.8.0 benötigt. Um die Volltextsuche nutzen zu können, muss SQLite mit aktivem FST3-Modul kompiliert sein (das ist heutzutage standardmäßig der Fall). SQLite3 arbeitet über PHP's PDO Funktionen.

  • Unter Debian oder Ubuntu wird SQLite3 mit folgendem Aufruf installiert: apt-get install php-sqlite3
  • Die Windows binaries von php.net sind OK.
  • Das PHP PDO SQLite Modul muss geladen werden. Die folgende Zeile in der php.ini darf nicht auskommentiert sein:
    • extension=pdo_sqlite
  • Wo sollte die SQLite-Datenbank selbst liegen? Der Standardpfad sollte lauten: $IP/ ..data/$dbname.sqlite. Alles außer dem Wurzelverzeichnis des Webauftritts selbst sollte sicher sein; es ist gut es in der Nähe zu halten. Im Zweifel kann es auch im Wurzelverzeichnis angesiedelt werden, dann muss dem Webserver allerdings in der Konfiguration der Zugriff darauf entzogen werden.

MediaWiki mit SQLite Backend installieren

  • Wenn das SQLite-Modul für PHP korrekt installiert ist, sollte der MediaWiki-Installer (/mw-config/index.php) eine Option zur Nutzung von SQLite anbieten. * Bei MediaWiki-Versionen vor 1.16 müssen die Felder "DB username" und "DB password" ausgefüllt werden, obwohl SQLite diese nicht benötigt.
  • Wenn ins "SQLite data directory" nichts eingetragen wird, bleibt $wgSQLiteDataDir leer. Dies korrespondiert mit dem übergeordneten data Verzeichnis im Hauptordner. Da es jedoch auch Voraussetzung für Web-Scripte und Wartungsscripte ist, und unterschiedlich sein kann, empfiehlt es sich es hier explizit zu benennen.

Suchmaschinen

MediaWiki Version:
1.16

Suchfunktionalitäten für das SQLite-Backend wurden mit MediaWiki Version 1.16 eingeführt. SQLite wird mit einkompiliertem FTS3-Modul benötigt, was in den meisten modernen Versionen vorhanden ist. Wenn die SQLite-Unterstützung auf eine Version mit FTS3 umgestellt wurde, muss der Updater genauso ausgeführt werden wie bei einem MediaWiki-Upgrade. Nachdem der Updater die Tabelle mit dem Suchindex erstellt hat, muss sie mit rebuildtextindex.php veröffentlicht werden. Das gleiche gilt falls auf eine Version ohne FTS3 zurückgestellt werden soll: Der Updater stellt dann die Tabelle um damit SQL-Fehler vermieden werden.

Backup

If your wiki is currently offline, its database can be backed up by simply copying the database file. Otherwise, you should use a maintenance script: php maintenance/SqliteMaintenance.php --backup-to <backup file name>, which will make sure that operation is atomic and there are no inconsistencies. If your database is not really huge and server is not under heavy load, users editing the wiki will notice nothing but a short lag. Users who are just reading will not notice anything in any case.

Fehlerbehebung

Kein Datenbankzugriff über Kommandozeile

Um einen Zugang zur Datenbank über die Kommandozeile zu erhalten, ist folgende Befehlszeile einzugeben:

sqlite3 /var/data/database_name.sqlite

Dabei muss /var/data mit dem Verzeichnis ersetzt werden, das während der Installation als "SQLite data directory" festgelegt wurde. Schaue alternativ nach $wgSQLiteDataDir innerhalb von LocalSettings.php .

Dies kann für unerfahrene Benutzer knifflig sein, denn sqlite3 database_name öffnet eine andere Datenbank, die es neu anlegt wenn sie nicht existiert. Die Ursache ist, dass SQLite das Argument nicht als systemweiten Datenbanknamen interpretiert, sondern stattdessen als Dateinamen der die Datenbank enthält.

Probleme

Fehler sollten beim Bugtracker von Wikimedia gemeldet werden. Zuvor sollte geprüft werden ob das Problem schon gemeldet wurde, indem die Suchfunktion im Zusammenhang mit #sqlite genutzt wird. Wird das Problem nicht gefunden, kann ein neues Ticket angelegt werden. Hat das Problem direkten Bezug zum SQLite Backend, ist es unter der MediaWikiDatabase Komponente zu melden. Andernfalls (wenn das Problem mir einem sehr spezifischen Aspekt der Software oder einer Erweiterung zusammenhängt) ist das passende Produkt bzw. die Komponente zu wählen. In jedem Fall sollte SQLite in der Zusammenfassung erwähnt werden und das entsprechende Tag gesetzt werden, damit der Fehler leichter gefunden und nachverfolgt werden kann.

Siehe auch

Externe Links