Tło : Mam dwa serwery MySQL 5.1 skonfigurowane w replikacji opartej na wierszach Master-Master (RBR) zgodnie z tym doskonałym przewodnikiem . Chcę replikować wszystkie bazy danych i będę regularnie dodawać nowe bazy danych.
Cel : Chciałbym móc dodawać nowe bazy danych do replikacji, po prostu dodając bazę danych do jednego z serwerów; bez konieczności zatrzymywania obu urządzeń podrzędnych, zmiany plików konfiguracyjnych, restartowania serwerów MySQL i ponownego uruchamiania urządzeń podrzędnych.
Pytanie : Z tego co czytałem, ja myślę mogę to zrobić po prostu pomijając binlog-do-db
, binlog-ignore-db
, replicate-do-db
oraz replicate-ignore-db
ustawienia w konfiguracji każdego serwera, ale nie mogę być pewien. Dokumenty MySQL o tym, jak oceniane są opcje replikacji na poziomie bazy danych i tabeli, sprawiają, że myślę, że może to nie być w ogóle możliwe.
Odpowiednie części moich /etc/mysql/my.cnf
plików są kopiowane poniżej. Czy jestem na dobrej drodze? Czy to, czego chcę, jest w ogóle możliwe?
Mistrz 1 :
[mysqld]
binlog-format = row
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
master-host = <master2_ip>
master-user = slave_user
master-password = <password>
master-connect-retry = 60
log-bin = /var/log/mysql/mysql-bin.log
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
expire_logs_days = 14
max_binlog_size = 2048M
Mistrz 2 :
[mysqld]
binlog-format = row
server-id = 2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2
master-host = <master1_ip>
master-user = slave_user
master-password = <password>
master-connect-retry = 60
log-bin = /var/log/mysql/mysql-bin.log
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
expire_logs_days = 14
max_binlog_size = 2048M
źródło
Odpowiedzi:
Tak zrobiłem dla obu mistrzów
źródło
log-slave-updates
ustawienie, ponieważ nie widziałem potrzeby. Wszystko działa idealnie. Jestem w stanie dodawać i usuwać bazy danych, a zmiany są replikowane. Dziękuję Ci! Nagroda przyznana.Jeśli chodzi o tworzenie baz danych, nadal istnieją raporty o błędach dotyczące korzystania z funkcji UTWÓRZ BAZY DANYCH z replikacją opartą na wierszach.
Ten raport jest zamknięty, ale błąd pojawił się ponownie w MySQL 5.1.47.
Ten raport jest oparty na klastrze MySQL (silnik pamięci NDB).
Ten raport jest oparty na replikacji tabeli wild-ignore-ignore.
Replikacja oparta na wierszach powoduje, że dzienniki binarne rosną w niezwykłym tempie, co może zwiększyć ruch w sieci, wysyłając dane dziennika binarnego do dzienników przekaźników urządzenia podrzędnego.
@Mike mówi, że udało mu się stworzyć bazę danych i wykonać replikację. W ogóle w to nie wątpię. To, czym jestem, jest trochę obojętne na to, że MySQL (eh Oracle) nie ma problemów z replikacją opartą na wierszach po utworzeniu instancji bazy danych.
Możesz przełączyć na wiersz_format MIESZANY, jeśli nadal chcesz wpisy oparte na wierszach w dziennikach binarnych. Wewnętrzny format dziennika binarnego i tak ma tendencję do przemieszczania się między instrukcją a naprawiony: (Patrz http://bugs.mysql.com/bug.php?id=40146 ). Więcej raportów o błędach jest zamykanych przy użyciu mieszanych i unikających opartych na wierszach ( http://bugs.mysql.com/bug.php?id=39701 ), ale problemy nadal występują sporadycznie.
UWAGI KOŃCOWE
Dla własnego zdrowia powróć do replikacji opartej na instrukcjach i w ten sposób utwórz CREATE DATABASE (która jest instrukcją SQL) stabilną i spójną dla kolejnych instrukcji SQL względem utworzonej bazy danych. W rzeczywistości najnowszy raport o błędach pokazuje, że najlepiej jest korzystać z replikacji opartej na instrukcjach, niezależnie od tego, co dokumentacja mówi o opcjach na poziomie bazy danych i na poziomie tabeli.
źródło
Hmm ... Będziesz także musiał wymyślić sposób obsługi / różnicowania automatycznie zwiększanych klawiszy i pól. To wygląda interesująco .. http://mysql-mmm.org/
źródło
auto-increment-increment
iauto-increment-offset
w moich plikach konfiguracyjnych. Zobacz tę stronę: dev.mysql.com/doc/refman/5.1/en/…cmiiw pomyślałem, że powinieneś być w stanie utworzyć bazę danych na master1 i master2 bez zmiany conf lub zatrzymania slave, ale upewnij się, że replikacja master-master działa. ponieważ nie definiujesz bazy danych, która ma zostać zreplikowana, oznacza to, że cała baza danych zostanie zreplikowana, jeśli nie zdefiniujesz jej na my.cnf.
źródło