Replikacja MySQL

0

Szukam rozwiązania do replikacji bazy danych. Mam 3 serwery w trzech różnych lokalizacjach i dane w bazie danych muszą replikować się pomiędzy nimi. Pierwszą myślą była replikacja wbudowana w MySQL ale ona nie wspiera systemu multi-master.

Następnie testowaliśmy Galera cluster, który prawie spełnia wszystkie nasze oczekiwania – potrzebujemy jednak rozwiązania które pozwala na dalszą pracę na bazie danych nawet gdy serwer nie ma połączenia z klastrem.

Tak więc czy znacie jakieś rozwiązanie dla MySQL które:

  • Wspiera multi-master
  • Pozwala na działanie bazy pomimo odłączenia od reszty
  • Po przywróceniu połączenia scali różnice
0

Raczej bez przebudowy struktury bazy danych i indeksowania (klucze pierwotne) nie da się uniknąć replikacji.
Jeżeli chcesz, to można wykorzystać federatedx storage engine (mapując na drugim serwerze bazę danych z innego itd.) i przygotowując albo odpowiednie wyzwalacze, które zmodyfikują dane na zdalnych serwerach lub harmonogram zadań do wykonania skryptów aktualizujących dane. Problem pojawia się, gdy pole klucza pierwotnego są typu autoincrement - aktualizacja wg tego klucza nie ma wtedy sensu. Należałoby nadawać wartości klucza np. wykorzystyjąc w wyzwalaczu funcję UUID_Short (uwaga - jest typu bigint, a nie int). Jednocześnie na każdym z serwerów należy ustawić w pliku my.ini (my.cnf) unikalną wartość server_id.
Ewentualnie można zamiast tego zmodyfikować strukturę bzy danych (bez rezygonwania z pola id autoincrement) dodając w każej z tabel pole idserwera (o wartości domyślnej innej na każdym serwerze) i rozszerzając indeks pierwotny tak, aby zawierał odwołanie do id i identyfikatora serwera.
Generalnie, jeżeli chcesz uniknąć replikacji i zapewnić autonomiczną pracę serwerów, to w zależności od przyjętego rozwiązania musisz skupić się na oprogramowaniu bazy danych i/lub modyfikacji oprogramowania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1