Handbuch:SQLite

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

Der Zweck dieser Seite ist es, Informationen und Erfahrungen über das Ausführen von MediaWiki auf SQLite zu sammeln.

MediaWiki unterstützt SQLite seit 1.17. Beachte jedoch, dass es sich dabei um eine zweitklassige Unterstützung handelt und du wahrscheinlich auf einige Bugs stoßen wirst. Die Datenbank, die am häufigsten mit MediaWiki verwendet wird, ist MySQL . Siehe Phabricator für eine Liste der Probleme. MediaWiki benötigt SQLite 3.8.0 oder höher. Allerdings variiert die Unterstützung durch Erweiterungen, die Datenbank-Änderungen vornehmen.

Ist SQLite eine gute Wahl für MediaWiki?

Es existieren zwei wichtige Vorbehalte gegen die Verwendung von SQLite für 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

Es wird mindestens die SQLite-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 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.
  • 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

Wenn dein Wiki gerade offline ist, kann seine Datenbank durch einfaches Kopieren der Datenbankdatei gesichert werden. Andernfalls solltest du ein Wartungsskript verwenden: php maintenance/SqliteMaintenance.php --backup-to <backup file name>, das sicherstellt, dass die Operation atomar abläuft und keine Inkonsistenzen existieren. Wenn deine Datenbank nicht sehr groß ist und der Server nicht stark belastet wird, werden die Benutzer, die das Wiki bearbeiten, lediglich eine kurze Verzögerung bemerken. Nutzerinnen und Nutzer, die nur lesen, werden in jedem Fall nichts bemerken.

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. Wenn du dein Problem nicht finden kannst, erstelle eine neue Ausgabe. In jedem Fall solltest du einige Maßnahmen ergreifen, damit dein Fehler leicht zu finden und zu verfolgen ist: Erwähne SQLite in der Zusammenfassung und versehe ihn mit dem Projekt-Tag SQLite.

Performance Tipps

  • Wenn möglich sollte sichergestellt sein, dass die Erweiterung "APCu php" installiert ist und $wgMainCacheType auf CACHE_ACCEL gesetzt ist. Wenn kein Cache gefunden wird, wird MediaWiki die Datenbank als Cache-Backend nutzen, was zu Schreibkonflikten führen kann. Bei SQLite kann das Wiki dadurch signifikant verlangsamt werden.
  • Make sure your SQLite database is in WAL mode (Write-Ahead Logging – WAL). This can have a major impact on performance when people are viewing and editing your site at the same time. You can do this by using the sqlite command line tool to open the DB, and run the command PRAGMA journal_mode=wal;.

Siehe auch