J'ai lu cette question La réplication maître / esclave MySQL ne fonctionne pas et sa réponse:
L'utilisation de bases de données esclaves est à peine implémentée dans le noyau Drupal. Si vous développez vos propres modules, les appels à db_query doivent spécifier qu'ils souhaitent utiliser la base de données esclave à l'aide du tableau $ options. Voir DatabaseConnection :: defaultOptions pour savoir comment définir ce tableau.
Existe-t-il un moyen sans tuer les chatons piratant le noyau pour obtenir db_query()
et db_select()
faire plus de requêtes SELECT esclaves?
Par défaut, ces fonctions interrogeront le maître, sauf indication contraire d'interroger l'esclave (voir leur API). Vous devez écrire db_query($query, $args, array('target' => 'slave'))
afin d'interroger l'esclave et le noyau (et tous les modules) ne sont pas écrits pour y parvenir.
Seuls la recherche (voir la partie esclave) et l'agrégateur semblent en tirer parti.
Edit: 25 octobre
J'ai vu que le pressflow 7 est sorti mais je ne sais pas si cela aide beaucoup en ce moment.
Je n'ai pas trouvé quelque chose de pertinent, alors essayons un peu de générosité pour aider à obtenir une réponse.
Edit: 31 octobre.
Je suis principalement préoccupé par les commentaires de Crell à ce sujet: Que faire des esclaves? .
Surtout, y a-t-il des problèmes si j'envoie des SELECT
requêtes à l'esclave, ce qui se passe avec des retards dans la réplication et le fait que je puisse vouloir faire node_load()
juste après avoir enregistré un nouveau nœud.
la source
SELECT
requêtes? Comment gérez-vous les retards dans la réplication et le fait que le chargement d'un nœud juste après l'avoir enregistré peut causer des problèmes?Le module AutoSlave redirige les
SELECT
requêtes vers des bases de données réplicantes en lecture seule, et il prend en compte le retard de réplication.Selon les documents du module, il utilise uniquement le réplicateur en lecture seule lorsque toutes les conditions suivantes sont remplies:
la source
de ce que j'ai entendu lors du récent Drupal BADcamp Pressflow est la voie à suivre si vous voulez des configurations maître / esclave. Vous serez limité à Mysql en tant que DB. Consultez également le " groupe haute performance " sur do
la source
Malgré tout le travail incroyable accompli sur la couche d'abstraction de la base de données dans Drupal 7, cela reste étonnamment difficile à faire avec Drupal core prêt à l'emploi. Comme d'autres l'ont mentionné, AutoSlave est une option, bien que je n'en ai pas essayé en raison de mon refus obstiné de croire qu'il devrait être si difficile de le faire.
Une solution plus simple que j'ai trouvée est la suivante. Pour acheminer tous les
SELECT
s vers le serveur esclave, vous créez un fichier intitulé à l'select.inc
intérieur duincludes/database/mysql
répertoire principal avec le contenu suivant:Il y a des risques avec cette méthode:
SELECT
s et les dirigera vers l'esclave, ce qui causera sans aucun doute des problèmes si vous avez un retard dans la réplication. Relisez cette phrase.includes/database/mysql/select.inc
, votre fichier serait écrasé lors de la mise à niveau, et vous devriez commencer à maintenir votre propre version corrigée du select.inc fourni avec le noyau Drupal.Si vous n'avez aucun serveur esclave spécifié dans settings.php, le code ci-dessus ne posera pas de problème. Il se dégradera toujours avec grâce en utilisant le serveur maître .
la source
target => 'slave'
option définie, elle s'exécutera toujours sur la connexion par défaut. Il est difficile de définir plus facilement la cible de connexion auquery_alter
niveau.