Ustawienia mistrza
Obowiązkowo podajemy unikalny identyfikator serwera, ścieżkę do logów binarnych oraz nazwę bazy danych do replikacji w sekcji [mysqld]:
server-id = 1
log-bin = /var/lib/mysql/mysql-bin
replicate-do-db = testdb
Upewnij się, że masz wystarczająco miejsca na dysku dla logów binarnych.
Dodajemy użytkownika replication, na prawach którego będzie przeprowadzana replikacja. Wystarczy przywilej "replication slave ":
mysql@master> GRANT replication slave ON "testdb".* TO "replication"@"192.168.1.102" IDENTIFIED BY "password";
Restartujemy MySQL, aby zmiany w konfiguracji przyniosły skutek:
root@master# service mysqld restart
Jeśli wszystko przebiegło pomyślnie, polecenie "show master status " powinno wyświetlić mniej więcej następujące dane:
mysql@master> SHOW MASTER STATUS\G
File: mysql-bin.000003
Position: 98
Binlog_Do_DB:
Binlog_Ignore_DB:
Wartość position powinna rosnąć wraz z wprowadzaniem zmian w bazie danych na serwerze mistrza.
Ustawienia repliki
Podajemy identyfikator serwera, nazwę bazy danych do replikacji oraz ścieżkę do plików relay-binlog w sekcji [mysqld] konfiguracji, a następnie restartujemy MySQL:
server-id = 2
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
replicate-do-db = testdb
root@replica# service mysqld restart
Przenoszenie danych
Tutaj będziemy musieli zablokować bazę danych do zapisu. Można to zrobić albo zatrzymując działanie aplikacji, albo ustawiając flagę read_only na serwerze mistrza (uwaga: flaga ta nie działa na użytkowników z przywilejem SUPER). Jeśli posiadamy tabele MyISAM, wykonujemy również "flush tables":
mysql@master> FLUSH TABLES WITH READ LOCK;
mysql@master> SET GLOBAL read_only = ON;
Sprawdzamy stan serwera mistrza poleceniem „show master status” i zapamiętujemy wartości File oraz Position (po pomyślnej blokadzie serwera mistrza nie powinny się one zmieniać):
File: mysql-bin.000003
Position: 98
Tworzymy dump bazy danych, a po zakończeniu operacji zdejmujemy blokadę serwera mistrza:
mysql@master> SET GLOBAL read_only = OFF;
Przenosimy dump na replikę i przywracamy z niego dane.
Na koniec uruchamiamy replikację poleceniami "change master to" i "start slave" oraz sprawdzamy, czy wszystko przebiegło pomyślnie:
mysql@replica> CHANGE MASTER TO MASTER_HOST = "192.168.1.101 ", MASTER_USER = "replication ", MASTER_PASSWORD = "password ", MASTER_LOG_FILE = "mysql-bin.000003 ", MASTER_LOG_POS = 98;
mysql@replica> start slave;
Wartości MASTER_LOG_FILE i MASTER_LOG_POS pobieramy z serwera mistrza.
Sprawdzamy postęp replikacji poleceniem "show slave status ":
mysql@replica> SHOW SLAVE STATUS\G
Artykuł pochodzi z habra i został sprawdzony w praktyce.
Stknąłem z błędem [ERROR] Failed to initialize the master info structure
Rozwiązanie: RESET SLAVE;
Drugi problem – (nie tworzyły się tabele InnoDB) – rozwiązało się usunięciem logów .. 0 ..01
Jeśli trzeba wykluczyć niektóre tabele z replikacji, wpisujemy je do konfiguracji:
replicate-wild-ignore-table=base.mw_words_positions
replicate-wild-ignore-table=base.mw_sotrudniki_log
Pomijanie błędów:
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; nie pomogło mi,
za to dodanie do my.cnf
slave-skip-errors= <kod błędu albo all>
rozwiązał problem.
