Eu li esta pergunta A replicação master / slave do MySQL não está funcionando e sua resposta:
O uso de bancos de dados escravos mal é implementado no núcleo do Drupal. Se você estiver desenvolvendo seus próprios módulos, as chamadas para db_query precisam especificar que eles desejam usar o banco de dados escravo usando a matriz $ options. Consulte DatabaseConnection :: defaultOptions para saber como definir essa matriz.
Existe uma maneira de matar gatinhos que invadiram o núcleo para obter db_query()
e db_select()
fazer mais consultas SELECT de escravos?
Por padrão, essas funções consultam o mestre, a menos que seja especificamente solicitado a consultar o escravo (consulte sua API). Você precisa escrever db_query($query, $args, array('target' => 'slave'))
para consultar o escravo e o núcleo (e todos os módulos) não foram gravados para conseguir isso.
Somente a pesquisa (veja a parte escrava) e o agregador parecem alavancar isso.
Edit: 25 de outubro
Vi o pressflow 7 sair, mas não tenho certeza se isso ajuda muito agora.
Eu não encontrei algo relevante, então vamos tentar um pouco de recompensa para ajudar a obter uma resposta.
Edit: 31 de outubro.
Estou preocupado principalmente com os comentários de Crell sobre este tópico: O que fazer com os escravos? .
Principalmente, existem problemas se eu enviar SELECT
consultas para o escravo, o que acontece com os atrasos na replicação e o fato de que talvez eu queira fazer isso node_load()
logo após salvar um novo nó.
fonte
SELECT
consultas? Como você lida com os atrasos na replicação e o fato de carregar um nó logo depois de salvo pode causar problemas?O módulo AutoSlave redireciona
SELECT
consultas para bancos de dados replicantes somente leitura e leva em consideração o atraso na replicação.De acordo com os documentos do módulo, ele usa apenas o replicante somente leitura quando todas as seguintes condições forem verdadeiras:
fonte
pelo que ouvi no recente Drupal BADcamp Pressflow, é o caminho a percorrer, se você deseja configurações mestre / escravo. Você ficará limitado ao Mysql como o banco de dados. Além disso, confira o " grupo de alto desempenho " em
fonte
Apesar de todo o incrível trabalho realizado na camada de abstração do banco de dados no Drupal 7, isso ainda é surpreendentemente difícil de ser feito com o núcleo do Drupal pronto para uso. Como outros já mencionaram, o AutoSlave é uma opção, embora não tenha tentado devido à minha teimosa recusa em acreditar que deveria ser tão difícil fazer isso.
Uma solução mais simples que encontrei é a seguinte. Para rotear todos os
SELECT
s para o servidor escravo, crie um arquivo intituladoselect.inc
dentro doincludes/database/mysql
diretório principal com o seguinte conteúdo:Existem alguns riscos com este método:
SELECT
direcionará ao escravo, o que sem dúvida causará problemas se houver algum atraso na replicação. Leia essa frase novamente.includes/database/mysql/select.inc
, seu arquivo será substituído durante a atualização e você terá que começar a manter sua própria versão corrigida do select.inc que acompanha o núcleo do Drupal.Se você não possui nenhum servidor escravo especificado em settings.php, o código acima não causará problemas. Ainda será degradado normalmente para o uso do servidor mestre .
fonte
target => 'slave'
opção definida, ela ainda será executada na conexão padrão. É uma dor, não é mais fácil definir o destino da conexão mais facilmente noquery_alter
nível.