Manual: Banco de dados Compartilhado

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

Esta página fornece uma breve visão geral do uso de bancos de dados compartilhados no MediaWiki. A maioria das informações aqui deve funcionar com uma instalação simples do MediaWiki (sem extensões). Qualquer requisitos de extensão serão anotados. Observe que isso foi desenvolvido em torno do bancos de dados MySQL. Suporte para SQLite foi adicionado no MediaWiki 1.17. Suporte para PostgreSQL foi adicionado no MediaWiki 1.19. Outros mecanismos de banco de dados podem não oferecer suporte a bancos de dados compartilhados dessa maneira.

Atenção! Atenção: Este guia pressupõe que você esteja começando seus wikis do zero ou esteja migrando de um wiki para vários. Isto não abrange a "fusão" de tabelas user nem uma configuração no estilo Wikimedia (com uma tabela user global e tabelas user locais) usando CentralAuth .
Atenção! Atenção: Renameuser is currently incompatible with $wgSharedDB. See phab:T104830.

Informações básicas

Os bancos de dados compartilhados são configurados com 3 principais Configuration variables globais em seu LocalSettings.php:

Dependendo de suas necessidades e do ambiente, talvez você não precise usar todos eles.

<span id="The_simplest_setup:_A_shared_user_table">

A configuração mais simples: uma tabela de user compartilhada

Uma tabela de user compartilhada pode ser usada para ter vários wikis que têm registros de usuários compartilhados, de modo que os usuários só precisam se inscrever em um 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

Por padrão, $wgSharedTables contém as tabelas user e user_properties. Para wikis criados após o MediaWiki 1.35, também inclui a tabela actor.

Se você tiver dois wikis e criar usuários diferentes em ambos e depois começar a compartilhar a tabela actor, as coisas podem quebrar porque o ID do usuário que foi referenciado na tabela actor local não é o mesmo ID do usuário que está sendo referenciado na tabela actor compartilhada. Isso acaba causando confusão e rompimento de dados em muitos lugares, de maneiras mais ou menos sutis. Unfortunately, there is also a bug that breaks login for new users on wikis with shared user tables but separate actor tables. Sugestão: Pelo motivo mencionado acima, é aconselhável compartilhar tabelas (especialmente tabelas de user) logo após criar um novo wiki. Antes que qualquer usuário seja criado ou que edições sejam feitas.

Permissões do banco de dados

O usuário MySQL do wiki compartilhado deve ter pelo menos permissões SELECT e UPDATE para as tabelas principais do user wiki. Se você usar usuários MySQL diferentes para cada wiki, precisará conceder permissões adicionais ao usuário do wiki compartilhado, conforme especificado na configuração $wgDBuser desse wiki. Para aqueles que usam hospedagem compartilhada, observe que isso é possível em alguns, mas não em todos os provedores. A concessão de permissões pode ser realizada usando comandos semelhantes ao MySQL que podem ser vistos a seguir:

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

Isso permitirá que seu wiki leia usuários da tabela principal e também atualize as tabelas, o que acontece sempre que um usuário faz login.

Sessão de Compartilhamento

Para obter informações atualizadas sobre sessões no MediaWiki 1.27 e posteriores, consulte SessionManager and AuthManager.

Para compartilhar sessões de login entre seus wikis, defina $wgCookieDomain para incluir todos os subdomínios sob seu domínio raiz. Por exemplo, se você tem os sites en.example.com, fr.example.com e pool.example.com, defina:

$wgCookieDomain = '.example.com';

Atualizações

A partir do MediaWiki 1.21, ao atualizar o MediaWiki a partir do instalador web, $wgSharedTables deve ser removido temporariamente do LocalSettings.php durante a atualização. Caso contrário, as tabelas compartilhadas não serão tocadas (nem as tabelas com US$ 1, nem aquelas com US$ 2), o que pode levar a uma falha na atualização.

Ao atualizar a partir da linha de comando, executando o script update.php , você precisa usar o parâmetro --doshared para que o script atualize as tabelas compartilhadas.

No MediaWiki 1.24, o tipo de senha padrão para o MediaWiki foi alterado de MD5 para PBKDF2, e os hashes de senha serão atualizados automaticamente quando os usuários efetuarem login. Para evitar que isso aconteça até que todos os wikis sejam atualizados, defina $wgPasswordDefault como 'B' em todos os wikis e remova-o de todos os wikis quando eles forem atualizados para garantir que uma criptografia mais forte seja usada.

Compartilhando mais tabelas

Você pode compartilhar outras mesas além da mesa de US$ 1, mas tenha cuidado ao fazer isso. Se uma tabela contiver dados específicos de um wiki, o compartilhamento poderá causar problemas. Observe que cada uma das subseções aqui pressupõe que você também está compartilhando a mesa de user. Sempre que adicionar outras tabelas, certifique-se de anexar à matriz ($var[] = 'value') ou incluir a tabela user na nova definição de matriz.

<span id="The_ipblocks_table">

A tabela ipblocks

$wgSharedTables[] = 'ipblocks';

Ao compartilhar a tabela ipblocks , você pode ter "blocos globais" para que um bloco em um wiki bloqueie o usuário ou IP em todos os outros wikis que usam o banco de dados compartilhado.

Ressalvas

Pode haver alguns pequenos problemas ao compartilhar a tabela de ipblocks:

  • O campo ipb_reason é definido como o "motivo" em Special:Block ao bloquear um usuário. Quando um usuário bloqueado vê a mensagem "Você está bloqueado", isso é analisado como wikitexto e os links são analisados ​​em Special:BlockList. Você precisará ter certeza, ao bloquear um usuário, de que a mensagem faz sentido em todos os wikis.
  • Os logs de bloco não serão compartilhados (compartilhar a tabela logging não é recomendado).

<span id="The_user_groups_table">

A tabela user_groups

$wgSharedTables[] = 'user_groups';

Compartilhar a tabela de user_groups permitirá que você tenha grupos de usuários globais.

Ressalvas

  • Assim como o log de blocos, o log de direitos do usuário não é compartilhado.
  • Todos os grupos de usuários serão globais. Você pode contornar isso personalizando seus grupos de usuários. Por exemplo, para que os administradores de um wiki sejam separados dos administradores de outro, você pode fazer algo como o seguinte:
Na configuração do 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
Na configuração do wiki 2:
$wgGroupPermissions['wiki2_admin'] = $wgGroupPermissions['sysop'];
unset($wgGroupPermissions['sysop']);
$wgGroupPermissions['wiki1_admin'] = array();
  • Para evitar empecilhos em um wiki que atribuam a si mesmos direitos em outros wikis que eles não deveriam ter, você pode fazer uma configuração semelhante à acima, mas remover o direito 'userrights' que permite que eles definam qualquer grupo e usar $wgAddGroups /$wgRemoveGroups em vez disso.

Outras tabelas

Esta seção aborda outras tabelas, com motivos menos comuns para compartilhar, bem como quais tabelas não compartilhar.

  • A tabela interwiki contém principalmente dados estáticos; pode ser útil compartilhá-la se você tiver muitos interwikis personalizados.
  • A tabela site_stats poderia ser compartilhada para agregar dados de todos os seus wikis.
  • Por padrão, a tabela user_properties é incluída na lista de tabelas compartilhadas. Se seus wikis foram iniciados usando o MediaWiki 1.15 ou anterior, você provavelmente deve mantê-lo para compatibilidade com versões anteriores, pois as preferências do usuário serão migradas automaticamente e silenciosamente da tabela user para a tabela user_properties. Caso contrário, você pode remover isso da matriz para permitir que os usuários tenham preferências diferentes em cada wiki (se desejar)

A maioria das outras tabelas não deve ser compartilhada, pois incluem dados específicos do wiki, normalmente conexões com páginas por meio de um ID de página ou uma combinação de nome/título. Isso inclui (mas não está limitado a):

  • Qualquer uma das tabelas de links (pagelinks, templatelinks, etc.)
  • A tabela page
  • A tabela revision
  • A tabela image (para ter um repositório de mídia compartilhado, veja $wgForeignFileRepos ).

Para mais detalhes, veja Manual:Suitability of tables for sharing

Veja também

  • Extensão:CentralAuth - Um método diferente para ter compartilhamento de tabelas user. Usado pela Wikimedia, e provavelmente a opção mais fácil para mesclar wikis já estabelecidos.
  • Extension:GlobalBlocking - Uma extensão que permite que endereços IP sejam bloqueados globalmente, sem compartilhar outros bancos de dados. O direito de bloquear usuários globalmente é separado do direito normal de "bloqueio".
  • Extension:GlobalUserrights - Uma extensão que habilita grupos de usuários globais e permite fácil gerenciamento deles via US$ 1.