Příručka:Sdílení databáze
Tato stránka poskytuje stručný přehled používání sdílených databází v MediaWiki. Většina informací zde by měla fungovat s jednoduchou instalací MediaWiki (bez rozšíření). Jakékoli požadavky na rozšíření jsou uvedeny. Všimněte si, že toto je navrženo kolem databází MySQL. Podpora pro SQLite byla přidána do MediaWiki 1.17. Podpora pro PostgreSQL byla přidána do MediaWiki 1.19. Jiné databázové stroje nemusí podporovat sdílené databáze tímto způsobem.
Pozor: | Tato příručka předpokládá, že své wikiny buď začínáte od začátku, nebo přecházíte z jedné wiki na více wikin. Toto nezahrnuje "slučování" user tabulek ani nastavení ve stylu Wikimedie (s globální user tabulkou a lokálními user tabulkami) pomocí CentralAuth . |
Pozor: | Renameuser is currently incompatible with $wgSharedDB. See phab:T104830. |
Základy
Sdílené databáze jsou nakonfigurovány se 3 hlavními globálními Configuration variables ve vašem LocalSettings.php:
V závislosti na vašich potřebách a prostředí možná nebudete muset používat všechny tyto možnosti.
<span id="The_simplest_setup:_A_shared_user
_table">
Nejjednodušší nastavení: Sdílená user
tabulka
Sdílenou tabulku user
lze použít pro více wikin, které mají sdílené registrace uživatelů, takže uživatelé se musí zaregistrovat pouze do jedné wiki.
$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
Ve výchozím nastavení obsahuje $wgSharedTables tabulky user
a user_properties
.
For wikis first created after MediaWiki 1.35, it also includes the actor
table.
actor
, není stejné ID uživatele, na které odkazuje sdílená tabulka actor
. To na mnoha místech způsobí zmatek a poškození dat, více či méně rafinovanými způsoby. Unfortunately, there is also a bug that breaks login for new users on wikis with shared user tables but separate actor tables.
Doporučení: Z výše uvedeného důvodu je vhodné sdílet tabulky (zejména user
tabulky) hned po vytvoření nové wiki. Před vytvořením uživatele nebo provedením úprav.
Oprávnění k databázi
Uživatel MySQL sdílené wiki musí mít alespoň oprávnění SELECT a UPDATE pro hlavní tabulky user
wiki.
Pokud pro každou wiki používáte různé uživatele MySQL, budete muset uživateli sdílené wiki udělit další oprávnění, jak je uvedeno v nastavení $wgDBuser dané wiki.
Pro ty, kteří používají sdílený hosting, mějte na paměti, že to je možné u některých, ale ne u všech poskytovatelů.
Udělení oprávnění lze provést pomocí příkazů MySQL podobných následujícím:
grant select, update on mainwiki.user to 'sharedwikiuser'@'localhost';
grant select, update on mainwiki.user_properties to 'sharedwikiuser'@'localhost';
To vaší wiki umožní číst uživatele z hlavní tabulky a také aktualizovat tabulky, což se stane vždy, když se uživatel přihlásí.
Sdílení relací
Chcete-li sdílet přihlašovací relace mezi svými wikinami, nastavte $wgCookieDomain tak, aby zahrnoval všechny subdomény pod vaší kořenovou doménou. Pokud máte například stránky en.example.com, fr.example.com a pool.example.com, nastavte:
$wgCookieDomain = '.example.com';
Aktualizace
Od MediaWiki 1.21, když aktualizujete MediaWiki z webového instalačního programu, musí být během aktualizace dočasně odstraněny $wgSharedTables z LocalSettings.php. Jinak se sdílených tabulek vůbec nedotkne (ani tabulek s $wgSharedPrefix, ani těch s $wgDBprefix), což může vést k neúspěšnému upgradu.
Při aktualizaci z příkazového řádku, spouštění skriptu update.php , musíte pro aktualizaci sdílených tabulek použít parametr --doshared
pro skript.
V MediaWiki 1.24 se výchozí typ hesla pro MediaWiki změnil z MD5 na PBKDF2 a hodnoty hash hesel se automaticky aktualizují, když se uživatelé přihlásí.
Chcete-li tomu zabránit, dokud nebudou aktualizovány všechny wikiny, nastavte $wgPasswordDefault až 'B'
na všech wikinách a odeberte to na všech wikinách, když byly aktualizovány, abyste zajistili použití silnějšího šifrování.
Sdílení více tabulek
Můžete sdílet i jiné tabulky než user
, ale buďte při tom opatrní.
Pokud tabulka obsahuje data specifická pro jednu wiki, sdílení může způsobit problémy.
Všimněte si, že každá ze zde uvedených podsekcí předpokládá, že sdílíte také tabulku user
.
Kdykoli přidáváte další tabulky, nezapomeňte buď připojit k poli ($var[] = 'value'
) nebo zahrnout user
tabulku do nové definice pole.
<span id="The_ipblocks
_table">
Tabulka ipblocks
$wgSharedTables[] = 'ipblocks';
Sdílením tabulky ipblocks můžete mít "globální bloky", takže blok na jedné wiki zablokuje uživatele nebo IP na všech ostatních wikinách využívajících sdílenou databázi.
Upozornění
Při sdílení tabulky ipblocks
mohou nastat drobné problémy:
- Pole
ipb_reason
je nastaveno jako "důvod" na Special:Block při blokování uživatele. Když zablokovaný uživatel uvidí zprávu "Jste zablokováni", tato je analyzována jako wikitext a odkazy jsou analyzovány na Special:BlockList, budete se muset při blokování uživatele ujistit, že zpráva dává smysl na všech wikinách. - Protokoly bloků nebudou sdíleny (nedoporučujeme sdílení tabulky logging ).
<span id="The_user_groups
_table">
Tabulka user_groups
$wgSharedTables[] = 'user_groups';
Sdílení tabulky user_groups vám umožní mít globální skupiny uživatelů.
Upozornění
- Stejně jako u protokolu blokování není protokol uživatelských práv sdílen.
- Všechny skupiny uživatelů budou globální. Můžete to trochu obejít přizpůsobením skupin uživatelů. Chcete-li například mít administrátory na jedné wiki oddělené od administrátorů na jiné, můžete udělat něco takového:
- V konfiguraci pro 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
- V konfiguraci pro wiki 2:
$wgGroupPermissions['wiki2_admin'] = $wgGroupPermissions['sysop'];
unset($wgGroupPermissions['sysop']);
$wgGroupPermissions['wiki1_admin'] = array();
- Abyste zabránili byrokratům na jedné wiki přidělovat si práva na jiných wikinách, která by neměli mít, můžete provést podobnou konfiguraci jako výše, ale odebrat právo "uživatelská práva", která jim umožňuje nastavit jakoukoli skupinu, a místo toho použít $wgAddGroups /$wgRemoveGroups .
Další tabulky
Tato část se zabývá dalšími tabulkami s méně běžnými důvody pro sdílení a také tím, které tabulky nesdílet.
- Tabulka interwiki obsahuje převážně statická data. Může být užitečné sdílet, pokud máte mnoho vlastních interwiki.
- Tabulka
site_stats
by mohla být sdílena, aby se agregovala data na všech vašich wikinách. - Ve výchozím nastavení je tabulka user_properties zahrnuta do seznamu sdílených tabulek. Pokud byly vaše wikiny spuštěny pomocí MediaWiki 1.15 nebo starší, měli byste si to pravděpodobně ponechat kvůli zpětné kompatibilitě, protože uživatelské preference budou automaticky automaticky migrovány z tabulky
user
na tabulkuuser_properties
. Jinak to můžete odstranit z pole, abyste uživatelům umožnili mít na každé wiki různé preference (pokud si to přejete)
Většina ostatních tabulek by neměla být sdílena, protože obsahují data specifická pro wiki, obvykle spojení se stránkami prostřednictvím ID stránky nebo kombinace jmenného prostoru a názvu. To zahrnuje (ale není omezeno na):
- Kterákoli z tabulek vlevo (pagelinks, templatelinks atd.)
- Tabulka
page
- Tabulka
revision
- Tabulka
image
(chcete-li mít sdílené úložiště médií, viz $wgForeignFileRepos )
Další podrobnosti najdete na stránce Manual:Suitability of tables for sharing
Související odkazy
- Rozšíření:CentralAuth - Jiný způsob, jak mít sdílené
user
tabulky. Používá Wikimedie a pravděpodobně nejjednodušší možnost pro sloučení již zavedených wikin. - Extension:GlobalBlocking - rozšíření, které umožňuje globálně blokovat IP adresy bez sdílení dalších databází. Právo globálně blokovat uživatele je odděleno od normálního práva 'block' (blokovat).
- Extension:GlobalUserrights - Rozšíření, které umožňuje globální skupiny uživatelů a umožňuje jejich snadnou správu prostřednictvím Special:GlobalUserrights.