Jak zrobić replikacje baz danych pomiędzy hostami ?
Jeżeli chcemy kopiować (w locie) bazy danych/tabele na innego hosta to do tego możemy użyć replikacji. Replikacja to jak by aktualny backup naszej bazy na innym hoscie.
W przypadku updatu tabeli na masterze wszystkie komendy wykonują się również na slave.(uwaga z funkcjami do generowania liczb)
I. Podstawowa instalacja serwera mysql
- Konfiguracja serwera mysqld (master,slave):
# /usr/bin/mysql_install_db # /etc/init.d/mysql start # /usr/bin/mysqladmin -u root password 'naszehaslo'
Łączymy się do serwera i zmieniamy ustawienia dot. połączenia (umożliwiamy łączenie się wszystkich hostów do naszego serwera)
# mysql -u root -p mysql> update mysql.user set host='%' where host='localhost'; mysql> FLUSH PRIVILEGES; mysql> quit
- na serwerze master:
Założenia: używamy silnika MyISAM
Zmieniamy parametry pliku /etc/mysql/my.cnf na:
bind-address = 0.0.0.0 log-bin = mysql-bin max_binlog_size = 40M server-id = 1
Po zmianach w my.cnf robimy restart mysqld
# /etc/init.d/mysql restart # mysql -u root -p mysql> GRANT REPLICATION SLAVE ON *.* TO 'user-do-replikacji'@'%' IDENTIFIED BY 'nasze_haslo_do replikacji'; mysql> show master status;
Zapamiętujemy: File oraz Position
3) konfiguracja na serwerze slave:
Zmieniamy parametry pliku /etc/mysql/my.cnf na:
bind-address = 0.0.0.0 log-bin server-id = 2
Po zmianach w my.cnf robimy restart mysqld
mysql> CHANGE MASTER TO MASTER_HOST='host-mysql-master.example.net.pl', MASTER_USER='user-do-replikacji', MASTER_PASSWORD='nasze_haslo_do replikacji', MASTER_LOG_FILE='nazwa-plik-bin-log', MASTER_LOG_POS=numer-pozycji; mysql> START SLAVE;
- Przydatne komendy:
mysql> show master statusG; mysql> show slave statusG; mysql> show VARIABLES;
II. Zamiana serwera slava na master
- na serwerze slave wykonujemy:
# /etc/init.d/mysql stop # rm -r /var/lib/mysql/
Potem czynności z Pkt. I Podpunkt 1 oraz 2.
UWAGA: „server-id” na każdym serwerze muszą być unikatowe !!
III. Połączanie kolejnego Slave:
Metoda ta jest w 1 kroku skomplikowana (chodzi o mastera) ale potem połączenie kolejnych slave’ów jest bardzo proste.
- Master:
Trzeba do bin-loga zapisać wszystkie dane po swirzej instalacji mysql. Zapamiętać pozycje po czystej instalacji(podstawowe rzeczy jak w I.1 oraz I.2)
Wgrać dane z wcześniej zrobionego mysqldump’a. - slave:
Standardowo procedura jak I.1 oraz I.3 a pozycje wpisujemy jaka była mastera po świeżej instalacji.