Manuel:Base de données partagée
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.
![]() | 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 . |
![]() | 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.
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 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 tableuser_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:GlobalBlocking - 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.