Temat: Replikacja MySQL nie trywialnie
Piotr Rusoł:
Panowie mam ciekawe zadanko. Mam N serwerów MySQL (Master), gdzie na każdym serwerze żyje jedna baza transakcyjna (dla uproszczenia). Zadanie polega na tym by w trybie Master-Slave replikować te wszystkie bazy do jednego Slave. W obrębie Slave mogą to być różne bazy. Nie oczekuję gotowej odpowiedzi (jak ustawić - to sam muszę rozwiązać :) ), a raczej czy jest to możliwe i czy komuś się udało.
Z góry dzięki za pomoc.
Rozwiązanie, które podał Irek powinno zadziałać. Tylko trzeba uważać, aby dobrze zapisywać pozycje na każdym masterze i nie rozwalić replikacji pomiędzy poszczególnymi bazami.
Irek poruszył temat nazw baz na poszczególnych masterach. Ja powiem więcej: na żadnym z masterów nie mogą się znajdować bazy danych o takiej samej nazwie. W twoim przypadku jesteś akurat w dobrej sytuacji, bo na każdym masterze znajduje się jedna baza.
Gdybyś miał konflikt w nazwach, to da się go obejść przez restart slave z odpowiednimi parametrami replicate-* przy każdorazowej zmianie mastera.
Rozwiązanie ze zmianą mastera ma 1 wadę: trzeba w jakiś sposób decydować, kiedy przełączać na kolejnego mastera. Możesz mieć problemy z utrzymaniem lagu replikacji dla poszczególnych baz. Wszystko zależy od tego, ile operacji zapisu będziesz miał na masterach. Pamiętaj, że replikacja w MySQL wykorzystuje tylko 1 wątek do wykonywania query.
Jest jeszcze jedno rozwiązanie, wydaje mi się, że widziałem gdzieś na slajdach, że powinno umożliwić równoczesną replikację z kilku masterów. Nazywa się ono Tungsten Replicator. Pobrać można tutaj:
http://sourceforge.net/projects/tungsten/files/.
A teraz zapytam przewrotnie: jaki jest cel twojego działania? Dlaczego potrzebujesz X baz z X masterów na 1 slave?
Pamiętaj, że replikacja, podobnie jak RAID, to nie jest backup.