Cygal.net.pl

Systemy, Sieci i takie tam :)

Replikacja Master Master w mysql 5.5

Proces konfiguracji replikacji master master w mysqlu jest dość prosty i szybki. Poniżej przedstawię ten proces krok po kroku.

Załóżmy ze nasze bazy mysql działają na poniższych adresach ip:
Master-1: 192.168.1.140
Master-2: 192.168.1.141

Baza danych, która będziemy replikować nazywa sie:
testdb1

definicja tabeli testowej może wyglądać np tak:
[bash]
CREATE TABLE test_tbl(
id INT NOT NULL AUTO_INCREMENT,
imie VARCHAR(100) NOT NULL,
nazwisko VARCHAR(100) NOT NULL,
submission_date DATE,
PRIMARY KEY ( id )
);
[/bash]

stwórzmy zatem bazę danych testdb1 na Master-1
mysql -u root -p
[bash]
CREATE DATABASE testdb1;

CREATE TABLE test_tbl(
id INT NOT NULL AUTO_INCREMENT,
imie VARCHAR(100) NOT NULL,
nazwisko VARCHAR(100) NOT NULL,
submission_date DATE,
PRIMARY KEY ( id )
);
[/bash]

teraz dodajmy do niej kilka rekordów
[bash]
insert into test_tbl (imie, nazwisko) values (‘jan’,’kowalski’);
insert into test_tbl (imie, nazwisko) values (‘piotr’,’nowak’);
insert into test_tbl (imie, nazwisko) values (‘patryk’,’jakistam’);
insert into test_tbl (imie, nazwisko) values (‘karol’,’motyka’);
insert into test_tbl (imie, nazwisko) values (‘pawel’,’jakistamkolejny’);
insert into test_tbl (imie, nazwisko) values (‘przemek’,’zwykly’);
[/bash]

w ten sposób mamy już stworzona bazę testowa. Możemy przystąpić do konfiguracji replikacji.
na Master-1:

vim /etc/mysql/my.cnf

[bash]
#bind-address = 127.0.0.1
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = testdb1
[/bash]

service mysqld restart

logujemy sie do mysql na użytkownika root i tworzymy użytkownika do replikacji.

mysql -u root -p
[bash]
create user ‘replicator’@’%’ identified by ‘password’;
grant replication slave on *.* to ‘replicator’@’%’;
FLUSH PRIVILEGES;
[/bash]

sprawdzamy teraz status replikacji:

SHOW MASTER STATUS;
mysql> show MASTER status;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000001 | 2711 | testdb1 | |
+——————+———-+————–+——————+
1 row in set (0.00 sec)

musimy sobie gdzieś zanotować nazwę pliku oraz pozycje (mysql-bin.000001,2711), gdyż będą one nam potrzebne podczas konfiguracji Master-2

zróbmy teraz backup naszej bazy testowej i przegrajmy ja na Master-2

mysqldump -u root -p testdb1 > testdb1.sql
scp testdb1.sql 192.168.1.141:/tmp

Przejdźmy teraz do konfiguracji Master-2
vim /etc/mysql/my.cnf
[bash]
#bind-address = 127.0.0.1
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = testdb1
[/bash]

service mysqld restart

wczytajmy nasza baze z backupu
mysql -u root -p testdb1 < /tmp/testdb1.sql stwórzmy użytkownika do replikacji na Master-2 mysql -u root -p
[bash]
create user ‘replicator’@’%’ identified by ‘password’;
grant replication slave on *.* to ‘replicator’@’%’;
FLUSH PRIVILEGES;
[/bash]

sprawdzmy status replikacji

mysql> show master status ;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000001 | 1867 | testdb1 | |
+——————+———-+————–+——————+
1 row in set (0.00 sec)

podobnie jak poprzednio nazwa pliku i pozycja będą nam potrzebne do konfiguracji na Master-1

Ustawmy teraz replikacje z Master1 na Master2

na Master2 wykonujemy.
[bash]
slave stop;

CHANGE MASTER to MASTER_HOST = ‘192.168.1.140’, MASTER_USER=’replicator’, MASTER_PASSWORD =’password’, MASTER_LOG_FILE = ‘mysql-bin.000001’, MASTER_LOG_POS =2711;

slave start;
[/bash]

Teraz przejdźmy na Master-1 i ustawmy preplikacje z Master-2 na Master-1

mysql -u root -p
[bash]
slave stop;

CHANGE MASTER to MASTER_HOST = ‘192.168.1.141’, MASTER_USER=’replicator’, MASTER_PASSWORD =’password’, MASTER_LOG_FILE = ‘mysql-bin.000001’, MASTER_LOG_POS =1867 ;

slave start;
[/bash]

Nasza replikacja master master powinni teraz działać poprawnie. W celu przetestowania możemy dodać rekord do test_tbl na Master-1
[bash]
insert into test_tbl (title, author) values (‘janusz’,’replicator’);
[/bash]

a nastepnie sprawdzić czy nowy wpis jest widziany zarowno na Master-1 jak i Master-2
[bash]
select * from test_tbl;
[/bash]

następnie możemy spróbować usunąć nowo dodany rekord na Master-2
[bash]
delete from test_table where name=’janusz’ and surname=’replicator;’
[/bash]

teraz sprawdzmy na Master-1 i Master-2
[bash]
select * from test_tbl;
[/bash]

Jeżeli usunięty rekord nie znajduje sie na żadnej z maszyn mozemy uznać ze nasza replikacja Master Master działa poprawnie.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *


Time limit is exhausted. Please reload CAPTCHA.