Handbuch:Gemeinsame Datenbank
Diese Seite bietet einen kurzen Überblick über die Verwendung gemeinsamer Datenbanken in MediaWiki. Die meisten Informationen hier sollten mit einer einfachen Installation von MediaWiki (ohne Erweiterungen) funktionieren. Es werden alle Voraussetzungen für Erweiterungen benannt. Beachte, dass dies für MySQL-Datenbanken entwickelt wurde. Unterstützung für SQLite wurde in MediaWiki 1.17 hinzugefügt. Unterstützung für PostgreSQL wurde in MediaWiki 1.19 hinzugefügt. Andere Datenbank-Engines unterstützen gemeinsam genutzte Datenbanken möglicherweise nicht auf diese Weise.
Achtung: | In dieser Anleitung wird davon ausgegangen, dass Sie Ihre Wikis entweder von Grund auf neu erstellen oder von einem Wiki auf mehrere umsteigen. Das Zusammenführen von user -Tabellen oder ein Wikimedia-ähnlicher Aufbau (mit einer globalen user -Tabelle und lokalen user -Tabellen) unter Verwendung von CentralAuth wird nicht behandelt. |
Achtung: | Renameuser is currently incompatible with $wgSharedDB. See phab:T104830. |
Grundlagen
Geteilte Datenbanken sind mit 3 globalen Configuration variables in Ihrem LocalSettings.php konfiguriert:
Je nach Bedürfnissen und Umgebung müssen diese nicht alle verwendet werden.
<span id="The_simplest_setup:_A_shared_user
_table">
Die einfachste Konfiguration: Eine gemeinsame user
-Tabelle
Eine gemeinsame Tabelle für user
kann verwendet werden, um mehrere Wikis zu haben, bei denen Benutzerregistrierungen geteilt werden, sodass sich die Benutzer nur für ein Wiki anmelden müssen.
$wgSharedDB = 'mainwiki'; # The $wgDBname for the wiki database holding the main user table
$wgSharedTables[] = 'actor';
$wgSharedPrefix = 'm_'; # The $wgDBprefix for the database. Defaults to the prefix of the current wiki if not specified
Standardmäßig enthält $wgSharedTables die Tabellen user
und user_properties
.
Für Wikis, die nach MediaWiki 1.35 erstellt wurden, enthält sie auch die Tabelle actor
.
actor
-Tabelle gemeinsam nutzen, kommt es zu Problemen, weil die Benutzer-ID, die in der lokalen actor
-Tabelle referenziert wurde, nicht dieselbe ist, die in der gemeinsamen actor
-Tabelle referenziert wird. Dies führt an vielen Stellen zu Verwirrung und Datenverfälschung auf mehr oder weniger subtile Weise. Unfortunately, there is also a bug that breaks login for new users on wikis with shared user tables but separate actor tables.
Vorschlag: Aus dem oben genannten Grund ist es ratsam, Tabellen (insbesondere user
-Tabellen) gleich nach der Erstellung eines neuen Wikis freizugeben. Bevor Benutzer erstellt oder Bearbeitungen durchgeführt werden.
Datenbankberechtigungen
Der MySQL-Benutzer des gemeinsamen Wikis muss mindestens SELECT- und UPDATE-Berechtigungen für die Haupttabellen des Wikis user
haben.
Werden verschiedene MySQL-Benutzer für jedes Wiki verwenden, müssen dem gemeinsamen Wiki-Benutzer zusätzliche Rechte gewährt werden, wie in der $wgDBuser -Einstellung dieses Wikis angegeben.
Für diejenigen, die Shared Hosting nutzen, sei darauf hingewiesen, dass dies bei einigen, aber nicht bei allen Providern möglich ist.
Die Erteilung von Berechtigungen kann mit MySQL-Befehlen ähnlich den folgenden durchgeführt werden:
grant select, update on mainwiki.user to 'sharedwikiuser'@'localhost';
grant select, update on mainwiki.user_properties to 'sharedwikiuser'@'localhost';
Dadurch kann Ihr Wiki die Benutzer aus der Haupttabelle auslesen und die Tabellen aktualisieren, was immer dann passiert, wenn sich ein Benutzer anmeldet.
Sessions teilen
Um Login-Sessions zwischen den Wikis zu teilen, setze $wgCookieDomain so, dass alle Subdomains unter deiner Root-Domain eingeschlossen sind. Wenn du beispielsweise die Websites en.example.com, fr.example.com und pool.example.com hast, setze:
$wgCookieDomain = '.example.com';
Upgrade
Ab MediaWiki 1.21 muss bei einem Upgrade von MediaWiki über den Web-Installer $wgSharedTables während des Upgrades vorübergehend aus LocalSettings.php entfernt werden. Andernfalls werden die gemeinsam genutzten Tabellen überhaupt nicht beachtet (weder die Tabellen mit $wgSharedPrefix, noch die mit $wgDBprefix), was zu einem fehlgeschlagenen Upgrade führen kann.
Wenn das Upgrade von der Befehlszeile aus durchführt wird, durch Ausführung des update.php -Skripts, muss der --doshared
-Parameter für das Skript verwendet werden, um die gemeinsamen Tabellen zu aktualisieren.
In MediaWiki 1.24 wurde der Standard-Passworttyp für MediaWiki von MD5 auf PBKDF2 geändert, und die Hashes der Passwörter werden automatisch aktualisiert, wenn sich Benutzer anmelden.
Um dies zu verhindern, bis alle Wikis aktualisiert sind, setze $wgPasswordDefault auf allen Wikis auf 'B'
, und entferne es auf allen Wikis, wenn sie aktualisiert wurden, um sicherzustellen, dass eine stärkere Verschlüsselung verwendet wird.
Weitere Tabellen gemeinsam nutzen
Es können auch andere Tabellen als die user
Tabelle geteilt werden, aber es setzt eine gewisse Vorsicht voraus.
Wenn eine Tabelle Wiki-spezifische Daten enthält, kann die gemeinsame Nutzung zu Problemen führen.
Beachte, dass jeder der Unterabschnitte hier davon ausgeht, dass auch die Tabelle von user
geteilt wird.
Wenn du andere Tabellen hinzufügst, stelle sicher, diese entweder an das Array ($var[] = 'value'
) anzuhängen oder die Tabelle user
in die neue Arraydefinition aufnehmen.
<span id="The_ipblocks
_table">
Die ipblocks
-Tabelle
$wgSharedTables[] = 'ipblocks';
Durch die gemeinsame Nutzung der ipblocks -Tabelle können "globale Sperren" eingerichtet werden, sodass eine Sperre in einem Wiki den Benutzer oder die IP in allen anderen Wikis, die die gemeinsame Datenbank nutzen, sperrt.
Einschränkungen
Durch die gemeinsame Nutzung der ipblocks
-Tabelle können Sie "globale Sperren" einrichten, so dass eine Sperre in einem Wiki den Benutzer oder die IP in allen anderen Wikis, die die gemeinsame Datenbank nutzen, sperrt.
- Das Feld
ipb_reason
wird als "Grund" auf Special:Block gesetzt, wenn ein Benutzer gesperrt wird. Wenn ein gesperrter Benutzer die Nachricht "Du bist gesperrt" sieht, wird diese als Wikitext geparst, und Links werden auf Special:BlockList geparst, du musst also beim Sperren eines Benutzers sicherstellen, dass die Nachricht in allen Wikis Sinn ergibt. - Blockprotokolle werden nicht gemeinsam genutzt (die gemeinsame Nutzung der logging -Tabelle wird nicht empfohlen).
<span id="The_user_groups
_table">
Die user_groups
-Tabelle
$wgSharedTables[] = 'user_groups';
Die gemeinsame Nutzung der user_groups -Tabelle ermöglicht es, globale Benutzergruppen zu haben.
Einschränkungen
- Wie das Blockprotokoll wird auch das Benutzerrechteprotokoll nicht gemeinsam genutzt.
- Die Benutzergruppen sind alle global. Das Problem kann umgangen werden, indem die Benutzergruppen angepasst werden. Um zum Beispiel Admins in einem Wiki von Admins in einem anderen Wiki zu trennen, könnten man etwa Folgendes tun:
- In der Konfiguration von Wiki 1:
$wgGroupPermissions['wiki1_admin'] = $wgGroupPermissions['sysop']; // Copy the default sysop permissions to the new group
unset($wgGroupPermissions['sysop']); // Then remove the default sysop group
$wgGroupPermissions['wiki2_admin'] = array(); // Don't give admins from other wikis any extra rights
- In der Konfiguration für Wiki 2:
$wgGroupPermissions['wiki2_admin'] = $wgGroupPermissions['sysop'];
unset($wgGroupPermissions['sysop']);
$wgGroupPermissions['wiki1_admin'] = array();
- Um zu verhindern, dass Bürokraten in einem Wiki sich selbst Rechte in anderen Wikis zuweisen, die sie nicht haben sollten, kann eine ähnliche Konfiguration wie oben vorgenommen werden. Aber das Recht userrights entfernen, das es ihnen erlaubt, jede Gruppe festzulegen, und stattdessen $wgAddGroups /$wgRemoveGroups verwenden.
Weitere Tabellen
In diesem Abschnitt geht es um andere Tabellen mit weniger häufigen Gründen für eine gemeinsame Nutzung sowie um Tabellen, die nicht gemeinsam genutzt werden sollten.
- Die Tabelle
interwiki
enthält hauptsächlich statische Daten; es kann nützlich sein, sie gemeinsam zu nutzen, wenn viele benutzerdefinierte Interwikis vorhanden sind. - Die
site_stats
-Tabelle kann gemeinsam genutzt werden, um Daten über alle Wikis zu aggregieren. - Standardmäßig wird die Tabelle user_properties in die Liste der gemeinsamen Tabellen aufgenommen. Wenn die Wikis mit MediaWiki 1.15 oder höher gestartet wurden, sollte dies aus Gründen der Abwärtskompatibilität beibehalten werden, da die Benutzereinstellungen automatisch von der Tabelle
user
in die Tabelleuser_properties
migriert werden. Andernfalls, dies aus dem Array entfernen, um den Benutzern zu ermöglichen, unterschiedliche Einstellungen für jedes Wiki zu haben (falls gewünscht).
Die meisten anderen Tabellen sollten nicht gemeinsam genutzt werden, da sie Wiki-spezifische Daten enthalten, typischerweise Verbindungen zu Seiten über eine Seiten-ID oder eine Namespace/Titel-Kombination. Dazu gehören (aber nicht ausschließlich):
- Jede der Link-Tabellen (pagelinks, templatelinks, etc.)
- Die
page
-Tabelle - Die
revision
-Tabelle - Die
image
-Tabelle (um ein gemeinsames Medien-Repository zu haben, siehe $wgForeignFileRepos )
Für mehr Details siehe Manual:Suitability of tables for sharing
Siehe auch
- Erweiterung:CentralAuth - Eine andere Methode, um gemeinsame
user
-Tabellen zu haben. Wird von Wikimedia verwendet und ist wahrscheinlich die einfachste Option für die Zusammenführung bereits bestehender Wikis. - Extension:GlobalBlocking - eine Erweiterung, die es ermöglicht, IP-Adressen global zu sperren, ohne andere Datenbanken zu nutzen. Das Recht, Nutzer global zu sperren, ist vom normalen "Sperrrecht" getrennt.
- Erweiterung:GlobalUserrights - Eine Erweiterung, die globale Benutzergruppen ermöglicht und deren einfache Verwaltung über Special:GlobalUserrights.