Реплікація mysql (mysql replication)

15 Березня, 2012 | Теґи: , , ,

Реплікація – це розповсюдження змін на головному сервер на один чи декілька інших. Головний сервер є мастером (master), інші – слейвами (slave).
Реплікація відбувається тільки в одному напрямі: master–>slave(s), а читати вже можна з будь-якого сервера.
Реалізується вона за допомогою бінарних логів, куди мастер записує всі запити, що приводять до зніни в БД(бінлог можна дивитися за допомогою утиліти mysqlbinlog ).

Це була “вода”, тепер можна почати веселитися 🙂

1) Вхідні дані.
Нехай ми маємо:
– мастер сервер – IP 192.168.0.126;
– слейв сервер – IP 192.168.0.127;
– “робочі” бази base1,base2.

2) Налаштування master сервера.
Налаштовуємо my.cnf, секція [mysqld] (варто вибрати розділ диску, на якому достатньо місця під логи)

#====== Replication =======
server-id = 1
log-bin=replcation-bin
expire_logs_days = 3
replicate-do-db = base1,base2
#===================

Додамо користувача, від імені якого буде проводитися реплікація:

mysql>GRANT replication slave ON *.* TO replication@192.168.0.127 IDENTIFIED BY 'password';

Ребутимо mysql для того, щоб застосувалися нові налаштування.

service mysql restart

3) Налаштування slave сервера.
Налаштовуємо my.cnf, секція [mysqld]

[mysqld]
#====== Replication =======
server-id = 2
expire_logs_days = 3
replicate-do-db = base1,base2 #можна й для кожної бази писати окрему стрічку
relay-log = server-relay-bin
#===================

Ребутимо mysql для того, щоб застосувалися нові налаштування.

service mysql restart

4) Дамп баз на мастері.
Для цього потрібно або ж зупинити тимчасово роботу додатків, що використовують БД, або ж заблокувати запис на мастері:

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SET GLOBAL read_only = ON;

Тепер можна дампити бази, і копіювати на слейв.

$ mysqldump -uUSER -pPASS base1 > base1.sql
$ mysqldump -uUSER -pPASS base2 > base2.sql

Заходимо в mysql і дивимося стартову позицію для реплікації:

mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
            File: replcation-bin.000004
        Position: 528

Вмикаємо назад можливість запису в БД:

mysql> SET GLOBAL read_only = OFF;

5) Відновлення з дампу на слейві.
Створюємо потрібні бази, користувачів, даємо права і робимо роздамп…
Запускаємо реплікацію:

mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.126', MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_LOG_FILE = "replcation-bin.000004", MASTER_LOG_POS = 528;
mysql> START SLAVE;

Перевіряємо результати:

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
...
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
        Seconds_Behind_Master: 0
...

Параметрів там багато, але головні ці:
— Slave_IO_Running, Slave_SQL_Running – статус реплікації;
— Seconds_Behind_Master – розсинхронізація між мастером та слейвом в секундах.

Ще немає коментарів.