Spis treści
Tym razem opiszemy jak skonfigurować replikację MySQL typu Master – Slave. Jest to typ jednokierunkowej synchronizacji danych, gdzie wszelkie zmiany wykonane na serwerze master będą widoczne także na serwerze slave.
Środowisko testowe
Do konfiguracji użyjemy 2 wirtualnych maszyn z zainstalowanym systemem CentOS 6.2. Załóżmy, że IP serwera master to 1.1.1.1, a serwera slave to 1.1.1.2:
- master => 1.1.1.1
- slave => 1.1.1.2
mysql -V mysql Ver 14.14 Distrib 5.5.25, for Linux (x86_64) using readline 5.1 uname -a Linux master 2.6.32-220.23.1.el6.x86_64 #1 SMP Mon Jun 18 18:58:52 BST 2012 x86_64 x86_64 x86_64 GNU/Linux
Konfiguracja
Każda z maszyn ma świeżo zainstalowany pakiet mysql i mysql-server. W pliku /etc/my.cnf
dodajemy następujące linie:
### replikacja MASTER server-id = 1 log-bin = /var/log/mysql/mysql-bin.log sync_binlog = 1
oraz na maszynie slave:
### replikacja SLAVE server-id = 2 log-bin = /var/log/mysql/mysql-bin.log sync_binlog=1
Pamiętajmy, że server-id
musi mieć unikalną wartość na każdym z serwerów oraz być różnym od 0. Chcemy też, żeby mysql
automatycznie usuwał pliki mysql-bin.log
starsze niż 10 dni, a maksymalna wielkość pojedynczego pliki to 500MB. Warto też się upewnić czy wartość opcji innodb_flush_log_at_trx_commit
jest równa 1.
expire_logs_days = 10 max_binlog_size = 500M innodb_flush_log_at_trx_commit = 1
Możemy teraz zrestartować proces mysqld
:
[root@master ~]# /etc/init.d/mysqld restart [root@slave ~]# /etc/init.d/mysqld restart
Na serwerze master dodamy nowego użytkownika z prawami do replikacji:
mysql> CREATE USER 'slaveuser'@'1.1.1.2' IDENTIFIED BY 'haslo'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'slaveuser'@'1.1.1.2'; mysql> flush privileges;
Możemy przetestować połączenie z serwera slave:
[root@slave ~]# mysql -u slaveuser -h 1.1.1.1 -p Enter password: ***** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 979 Server version: 5.5.25-log MySQL Community Server ...
Pobranie współrzędnych pliku replikacji
Wraz z włączeniem replikacji mysql tworzy pliki dziennika w katalogu /var/log/mysql
(dokładnie tak jak zdefiniowaliśmy w pliku /etc/my.cnf
). Do synchronizacji serwera slave z master, musimy znać aktualną pozycję tego pliku. Musimy też zablokować możliwość dodawania/edycji/usuwania danych z naszej bazy na pewien czas, ponieważ każda z tych operacji powoduje zmianę współrzędnych. Na serwerze master wpisujemy:
mysql> FLUSH TABLES WITH READ LOCK; mysql> show master status \G *************************** 1. row *************************** File: mysql-bin.000001 Position: 107 Binlog_Do_DB: Binlog_Ignore_DB:
Jak widzimy powyżej, aktualny plik dziennika to mysql-bin.000001
, a pozycja ma wartość = 107.
Eksport i import baz danych
Kolejnym krokiem jest eksport bazy z serwera master na slave.
[root@master ~]# mysqldump --add-drop-table --master-data --quick -u superroot -p --all-databases > /tmp/db-master.sql
Bo zrzuceniu bazy, możemy odblokować tabele:
mysql> UNLOCK TABLES;
Następnie kopiujemy plik db-master.sql
na serwer slave:
[root@master ~]# scp /tmp/db-maser.sql root@1.1.1.2:/tmp
oraz importujemy ją (przedtem musimy zatrzymac process slave):
mysql> STOP SLAVE: mysql> source /tmp/db-master.sql
Konfiguracja serwera Slave
Ostatnim krokiem jest „powiedzenie” serwerowi slave, gdzie jest znajduje się master:
mysql> CHANGE MASTER TO MASTER_HOST='1.1.1.1', MASTER_USER='slaveuser', MASTER_PASSWORD='haslo', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
Gdzie MASTER_LOG_FILE
i MASTER_LOG_POS
to współrzędne dziennika replikacji, które pobraliśmy wczesniej (show master status
). Teraz możemy ponownie uruchomić proces slave oraz sprawdzić jego status:
mysql> start slave; mysql> show slave status \G *************************** 1. row *************************** Slave_IO_Running: Yes Slave_SQL_Running: Yes
Jeżeli wartość Slave_IO_Running
oraz Slave_SQL_Running
jest ustawiona na Yes oznacza to, że wszystko działa. Możemy teraz przetestować replikację, zmieniając coś w bazie na serwerze master. Zmiana powina być natychmiast widoczna na serwerze slave. Należy też pamietać, że zmiany wykonane tylko na serwerze slave mogą prowadzić do błędów oraz zatrzymania replikacji.
1 Komentarze.