Příručka:Sdílení databáze

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

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! 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! 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.

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. Přidání 'hráče' je plánováno.

Pokud máte dvě wikiny a na obou vytvoříte různé uživatele a poté začnete sdílet tabulku aktérů později, věci se pokazí, protože ID uživatele, na které se odkazuje v místní tabulce 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í

Aktuální informace o relacích v MediaWiki 1.27 a novějších naleznete v SessionManager and AuthManager.

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 '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.

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 ).

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 tabulku user_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.