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

  1. 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
  1. 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;
  1. Przydatne komendy:
mysql> show master statusG;
mysql> show slave statusG;
mysql> show VARIABLES;

II. Zamiana serwera slava na master

  1. 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.

  1. 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.
  2. slave:
    Standardowo procedura jak I.1 oraz I.3 a pozycje wpisujemy jaka była mastera po świeżej instalacji.