Rozwijam aplikację do uruchomienia na komputerze klienckim (Win), który jest skonfigurowany z instancją serwera MySQL 5.1, która będzie działać jako slave tylko do odczytu dla zdalnego urządzenia nadrzędnego. Zdalny wzorzec ma dziesiątki schematów, ale potrzebuję tylko jednego na klienta, więc podaję ustawienie replikacja-do-db w pliku my.ini, aby replikować tylko schemat, którego potrzebuje klient. Replikacja działa, ale kiedy nasi klienci docierają do regionów świata, w których dostęp do Internetu jest dostępny tylko przez sieć bezprzewodową 3G, która pobiera opłaty za wykorzystanie danych, szybko przekraczają limity swojego planu danych i napotykają na drogie problemy.
Jak rozumiem, MySQL zapisuje wszystkie transakcje dla wszystkich schematów w jednym pliku binlog, co oznacza, że każdy klient musi pobrać wszystkie transakcje, które są wykonywane na każdym schemacie w systemie głównym, a następnie po pobraniu zastosować filtr bazy danych dla replikacji ustawienia do-db w pliku my.ini klienta.
Aby zminimalizować tę nieefektywność, zastosowałem ustawienie slave_compressed_protocol = 1 , które wydaje się zmniejszać przesyłane dane o 50%, ale nadal powoduje, że nasi klienci szybko przekraczają limit danych, podnosząc rachunek 3G.
Nie mogę sobie wyobrazić, że jestem jedynym, z którym mam do czynienia, więc jestem pewien, że otrzymam mnóstwo odpowiedzi na pytanie, jak to osiągnąć, ustawiając x = y. Nie mogę jednak znaleźć żadnej dokumentacji takiego ustawienia ani zalecanego podejścia.
Jak dotąd, oto moja myśl na temat możliwego rozwiązania, proszę o opinię lub alternatywne trasy:
- Skonfiguruj urządzenie podrzędne „proxy” dla każdego schematu (w innym pudełku lub w tym samym pudełku z inną instancją / portem MySQL)
- Skonfiguruj serwer proxy slave, aby replikował-do-db tylko jedną bazę danych, którą klienci chcą replikować.
- Skonfiguruj instancję MySQL klienta jako slave dla odpowiedniego proxy slave.
To powinno spowodować pociągnięcie klient tylko dane binlog ich schematu. Minusem (o ile mogę stwierdzić) jest to, że dramatycznie zwiększa złożoność naszej konfiguracji, prawdopodobnie czyniąc ją bardziej kruchą.
Myśli? Czy to podejście w ogóle zadziała?
Uwaga: na serwerze RedHat działamy na serwerze MySQL 5.0, ale możemy go zaktualizować do wersji 5.5, jeśli da to rozwiązanie.