Przeczytałem to pytanie replikacja master / slave MySQL nie działa i jego odpowiedź:
Korzystanie z baz danych slave jest ledwo zaimplementowane w rdzeniu Drupala. Jeśli opracowujesz własne moduły, wówczas wywołania db_query muszą określić, że chcą używać bazy danych slave za pomocą tablicy $ options. Zobacz DatabaseConnection :: defaultOptions, aby dowiedzieć się, jak ustawić tę tablicę.
Czy istnieje sposób bez zabijania kociąt hakujących rdzeń, aby uzyskać db_query()
i db_select()
wykonać więcej niewolniczych zapytań SELECT?
Domyślnie funkcje te będą odpytywały master, chyba że otrzymają specjalne polecenie, aby zapytać slave (zobacz ich API). Musisz napisać db_query($query, $args, array('target' => 'slave'))
, aby wysłać zapytanie do urządzenia podrzędnego, a rdzeń (i wszystkie moduły) nie są napisane, aby to osiągnąć.
Wydaje się, że wykorzystują to tylko wyszukiwanie (patrz część podrzędna) i agregator.
Edycja: 25 października.
Widziałem, że nie ma już przepływu 7, ale nie jestem pewien, czy to teraz bardzo pomaga.
Nie znalazłem czegoś istotnego, więc spróbujmy dostać małą nagrodę, aby pomóc w uzyskaniu odpowiedzi.
Edycja: 31 października 31.
Martwię się głównie o komentarze Crella dotyczące tego tematu: Co zrobić z niewolnikami? .
Głównie występują problemy, gdy wysyłam SELECT
zapytania do urządzenia podrzędnego, co dzieje się z opóźnieniami w replikacji i faktem, że mogę chcieć zrobić to node_load()
zaraz po zapisaniu nowego węzła.
źródło
SELECT
zapytania? Jak radzisz sobie z opóźnieniami w replikacji i faktem, że ładowanie węzła zaraz po zapisaniu może powodować problemy?W AutoSlave przekierowuje Moduł
SELECT
zapytań tylko do odczytu Replicant baz danych, a to uwzględnia replikacji lag.Zgodnie z dokumentacją modułu używa replikatora tylko do odczytu, gdy spełnione są wszystkie następujące warunki:
źródło
z tego, co usłyszałem podczas ostatniego Drupal BADcamp Pressflow jest właściwą drogą, jeśli chcesz konfiguracji master / slave. Będziesz ograniczony do MySQL jako DB. Sprawdź także „ grupę wysokiej wydajności ” na do
źródło
Pomimo wszystkich niesamowitych prac wykonanych na warstwie abstrakcji bazy danych w Drupal 7, nadal jest to zaskakująco trudne do zrobienia z rdzeniem Drupal po wyjęciu z pudełka. Jak wspomnieli inni, AutoSlave jest opcją, chociaż nie próbowałem tego z powodu mojej upartej odmowy uwierzenia, że powinno to być tak trudne.
Znalazłem prostsze rozwiązanie: Aby skierować wszystkie
SELECT
s do serwera podrzędnego, należy utworzyć plik zatytułowanyselect.inc
wincludes/database/mysql
katalogu głównym z następującą zawartością:Ta metoda wiąże się z pewnym ryzykiem:
SELECT
s i skieruje je do niewolnika, co niewątpliwie spowoduje problemy, jeśli wystąpi opóźnienie w replikacji. Przeczytaj to zdanie jeszcze raz.includes/database/mysql/select.inc
, plik zostanie nadpisany podczas aktualizacji i będziesz musiał zacząć utrzymywać własną poprawioną wersję pliku select.inc dostarczanego z rdzeniem Drupal.Jeśli nie masz żadnych serwerów podrzędnych określonych w pliku settings.php, powyższy kod nie spowoduje problemu. Nadal z wdziękiem obniży się do korzystania z serwera głównego .
źródło
target => 'slave'
ustawionej opcji, nadal będzie działać na połączeniu domyślnym. Boli, nie jest łatwiej ustawić cel połączenia naquery_alter
poziomie.