Manuel:Base de données partagée

This page is a translated version of the page Manual:Shared database and the translation is 84% complete.
Outdated translations are marked like this.

Cette page fournit un bref aperçu sur l'utilisation des bases de données partagées dans MediaWiki. La plupart des informations présentes ici devraient fonctionner avec une installation simple de MediaWiki (sans extensions). Toute contrainte des extensions est notée. Notez que cela est conçu autour des bases de données MySQL. La prise en charge de SQLite a été ajoutée en MediaWiki 1.17. La prise en charge de PostgreSQL a été ajoutée en MediaWiki 1.19. Les autres moteurs de bases de données peuvent ne pas prendre en charge les bases de données partagées de cette manière.

Attention ! Attention : Ce guide suppose soit que vous commencer votre wiki à partir de rien, ou que vous passez d'une configuration à un wiki, à plusieurs. Ceci ne couvre pas la fusion des tables utilisateur ni le paramètrage dans le style de Wikimedia (c'est à dire avec une table globale d'utilisateurs et des tables utilisateurs locales) en utilisant CentralAuth .
Attention ! Attention : Renameuser is currently incompatible with $wgSharedDB. See phab:T104830.

Bases

Les bases de données partagées sont configurées par 3 Configuration variables globales principales dans votre fichier LocalSettings.php :

Toutes ne vous sont pas forcément nécessaires, cela dépend de vos besoins et de votre environnement.

<span id="The_simplest_setup:_A_shared_user_table">

La configuration la plus simple : une table utilisateur partagée

Une table partagée des utilisateurs peut être utilisée si vous avez plusieurs wikis se partageant l'enregistrement des utilisateurs, de sorte que ces derniers n'aient à se connecter qu'à un seul 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

Par défaut, $wgSharedTables contient les tables user et user_properties. For wikis first created after MediaWiki 1.35, it also includes the actor table.

Si vous avez deux wikis et que vous créez des utilisateurs différents sur chacun d'eux, et qu'ensuite vous commencez à partager la table des acteurs, cela ne fonctionnera pas car le 'userId' référencé dans la table locale des acteurs n'est pas le même que celui qui a été référencé dans la table partagée des acteurs. Cela se termine en créant la confusion et en corrompant les données à plusieurs endroits et d'une manière plus ou moins subtile. Unfortunately, there is also a bug that breaks login for new users on wikis with shared user tables but separate actor tables. Suggestion: pour la raison évoquée ci-dessus, il est recommandé de partager les tables (en particulier celles des utilisateurs) juste après avoir créé un nouveau wiki. Avant de créer les utilisateurs ou de faire des modifications.

Droits sur la base de données

L'utilisateur MySQL du wiki partagé doit avoir au moins les droits SELECT et UPDATE sur les tables des utilisateurs du wiki principal. Si vous avez différents utilisateurs MySQL pour chacun des wikis, vous devez ajouter des permissions supplémentaires à cellles de l'utilisateur du wiki partagé, comme indiqué dans la configuration $wgDBuser de ce wiki. Pour ceux qui utilisent un hébergement partagé, notez que ceci est possible pour quelques mais pas tous les fournisseurs. Vous pouvez réaliser cela avec des commandes MySQL similaires à :

grant select, update on mainwiki.user to 'sharedwikiuser'@'localhost';
grant select, update on mainwiki.user_properties to 'sharedwikiuser'@'localhost';

Cela permet à votre wiki de lire les utilisateurs dans la table principale, et de mettre à jour ces tables, ce qui arrive quand un utilisateur se connecte.

Partager les sessions

Pour les dernières informations à propos des sessions dans MediaWiki 1.27 et plus récent, voir SessionManager and AuthManager.

Pour partager des sessions de connexion entre vos wikis, initialisez $wgCookieDomain avec tous les sous-domaines qui se trouvent sous votre domaine racine. Par exemple, si vous disposez des sites en.example.com, fr.example.com et pool.example.com, déclarez :

$wgCookieDomain = '.example.com';

Mise à jour

Depuis MediaWiki 1.21, lors de la mise à jour de MediaWiki à partir de l'installateur web, $wgSharedTables doit être temporairement supprimé de LocalSettings.php pendant cette opération. Sinon les tables partagées ne seront pas du tout modifiées (ni les tables avec $wgSharedPrefix, ni celles avec $wgDBprefix), ce qui peut conduire à l'échec de la mise à jour.

Lorsque la mise à jour est faite à partir de la ligne de commande en exécutant le script update.php , il faut utiliser le paramètre --doshared pour mettre à jour les tables partagées.

Dans MediaWiki 1.24 le type par défaut du mot de passe qui était MD5 est devenu PBKDF2, et la valeur de hachage du mot de passe est mise à jour automatiquement lorsque l'utilisateur se connecte. Pour éviter que cela ne se produise avant que tous les wikis ne soient à jour, mettez $wgPasswordDefault à 'B' et supprimez-le partout une fois la mise à jour terminée, pour vous assurer qu'un cryptage plus fort est utilisé.

Partager davantage de tables

Vous pouvez partager des tables qui ne soient pas des tables d'utilisateurs, mais redoublez alors d'attention. Si une table contient des données spécifiques à un wiki, le partage peut poser problème. Notez-bien que chacune des sous-sections ici suppose que vous partagiez également la table des utilisateurs. Si vous devez ajouter d'autres tables, assurez-vous d'avoir complété le tableau ($var[] = 'value') ou bien d'inclure la table des utilisateurs dans la définition du nouveau tableau.

<span id="The_ipblocks_table">

Table ipblocks

$wgSharedTables[] = 'ipblocks';

En partageant la table ipblocks vous pouvez obtenir des blocages globaux de sorte que le blocage sur un wiki bloque l'utilisateur ou l'adresse IP sur tous les autres wikis qui utilisent la base de données partagée.

Mises en garde

Il peut y avoir quelques problèmes mineurs quand la table ipblocks est partagée :

  • Le champ ipb_reason correspond au motif 'reason' dans Special:Block, lors du blocage d'un utilisateur. Quand un utilisateur bloqué voit le message «Vous êtes bloqué », ceci est analysé comme du wikicode et les liens sont analysés sur Special:BlockList, vous devrez vous assurer lorsque vous bloquez un utilisateur, que les messages ont un sens sur tous les wikis.
  • Les journaux des blocages ne sont pas partagés (il n'est pas recommandé de partager la table logging ).

<span id="The_user_groups_table">

Table user_groups

$wgSharedTables[] = 'user_groups';

En partageant la table user_groups vous aurez des groupes globaux d'utilisateurs.

Mises en garde

  • De la même manière que le journal des blocages, le journal des droits utilisateur n'est pas partagé.
  • Tous les groupes utilisateurs seront globaux. Vous pouvez contourner cela d'une certaine façon, en personnalisant vos groupes utilisateur. Par exemple pour séparer les administrateurs d'un wiki et d'un autre, vous pouvez faire par exemple :
Dans la configuration du 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
Dans la configuration du wiki 2 :
$wgGroupPermissions['wiki2_admin'] = $wgGroupPermissions['sysop'];
unset($wgGroupPermissions['sysop']);
$wgGroupPermissions['wiki1_admin'] = array();
  • Pour éviter que les bureaucrates d'un wiki n'assignent à eux-même des droits qu'ils n'ont pas à avoir sur les autres wikis, vous pouvez créer une configuration similaire à celle ci-dessus, mais en supprimant les droits 'userrights' qui leurs permettent de définir un groupe quelconque et en utitisant $wgAddGroups /$wgRemoveGroups à la place.

Autres tables

Cette section couvre les autres tables pour lesquelles il y a moins de raisons communes à les partager, ainsi que les tables qui ne doivent pas être partagées.

  • La table interwiki contient principalament des données statiques; cela peut être utile quand vous avez plusieurs liaisons interwikis personnalisées.
  • La table site_stats peut éventuellement être partagée pour aggréger les données de tous vos wikis.
  • Par défaut, la table user_properties est incluse dans la liste des tables partagées. Si votre wiki a été créé avec MediaWiki 1.15 ou plus ancien vous devriez éventuellement garder ceci pour la compatibilité arrière, car les préférences de l'utilisateur seront migrées automatiquement sans préavis de la table user vers la table user_properties. Sinon vous pouvez supprimer ceci du tableau pour permettre aux utilisateurs d'avoir des préférences différentes sur chaque wiki (si cela est souhaité)

La plupart des autres tables ne doivent pas être partagées parce qu'elles contiennent des données spécifiques au wiki, typiquement les connexions aux pages via un pageId ou une combinaison espace de noms et titre. Ceci comprend (mais n'est pas limité à) :

  • Une table de liens quelconque (pagelinks, templatelinks, etc.)
  • La table page
  • La table revision
  • table image (pour disposer d'un dépôt de médias partagé, voir $wgForeignFileRepos )

Pour plus de détails, voir Manual:Suitability of tables for sharing

Voir aussi

  • Extension:CentralAuth - Une méthode différente pour avoir des tables utilisateur partagées. Utilisé par Wikimedia, et probablement l'option la plus facile pour fusionner des wikis déja installés.
  • Extension:BlocageGlobal - extension permettant de bloquer globalement des adresses IP, sans partager d'autres bases de données. Les droits pour bloquer globalement des utilisateurs sont indépendants de ceux nécessaires pour le 'block' normal.
  • Extension:GlobalUserrights - Extension qui autorise les groupes globaux d'utilisateurs et qui facilite leur gestion via Special:GlobalUserrights.