Manual: Banco de dados Compartilhado
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: | 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: | 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
.
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 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. Otherwise, the shared tables are not touched at all (neither tables with $wgSharedPrefix, nor those with $wgDBprefix), which may lead to a failed upgrade.
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
You can share tables other than the user
table, but be careful when doing so.
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 tabelauser_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 - An extension that enables global user groups and allows easy management of them via Special:GlobalUserrights.