Как настроить MySQL Master-Master репликацию

Как настроить MySQL Master-Master репликацию

Roman Bogachev VMware Specialist | Drone Pilot | Traveler

Master-Master репликация в MySQL используется для распределения нагрузки на базу данных между несколькими серверами.

Хотя Master-Slave репликация намного популярнее и проще, Master-Master репликация может быть полезной.

mysql_master_master

Настройка Master-Master репликации — это настройка обычной Master-Slave репликации, только в обе стороны (каждый сервер является и Master и Slave одновременно). Мы будем использовать два сервера с адресами:

Master сервер 1, 10.10.0.1
Master сервер 2, 10.10.0.2

Шаг 1. Настройка Master-1

На Master-1 необходимо внести такие изменения в конфигурацию my.cnf:
(ID сервера выбираем произвольно начиная с 1)

1
2
3
4
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = example
bind-address = 10.10.0.1

Перезапускаем MySQL:

1
/etc/init.d/mysql restart

Шаг 2. Пользователь для репликации

Теперь необходимо создать пользователя, из-под которого будет происходить репликация:
(Создаем пользователя replicator с паролем password)

1
2
create user 'replicator'@'%' identified by 'password';
grant replication slave on *.* to 'replicator'@'%';

Шаг 3. Статус репликации

Проверим статус репликации:

1
show master status; 

Далее мы будем использовать некоторые из этих данных:

1
2
3
4
5
6
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 107 | example | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

Шаг 4. Настройка Master-2

На Master-2 необходимо внести такие изменения в конфигурацию my.cnf:
(ID сервера выбираем следующим за первым и указываем нужный IP-адрес)

1
2
3
4
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = example
bind-address = 10.10.0.2

Перезапускаем MySQL:

1
/etc/init.d/mysql restart

Шаг 5. Создание базы и пользователя

На Master-2 необходимо создать такого же пользователя и базу данных, как и Master-1:

1
2
3
create user 'replicator'@'%' identified by 'password'; 
create database example;
grant replication slave on *.* to 'replicator'@'%';

Шаг 6. Включение репликации на Master-2

Теперь на Master-2 нам необходимо запустить репликацию с Master-1. Для этого мы используем информацию о позиции и названии лога, которую запомнили на Шаге 3:

1
2
3
slave stop; 
CHANGE MASTER TO MASTER_HOST = '10.10.0.1', MASTER_USER = 'replicator', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 107;
slave start;

Шаг 7. Включение репликации на Master-1

Теперь необходимо выполнить то же самое для Master-1. На Master-2 запомним статус:

1
SHOW MASTER STATUS; 
1
2
3
4
5
6
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 107 | example | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

После этого на Master-1 запустим репликацию:

1
2
3
slave stop;
CHANGE MASTER TO MASTER_HOST = '10.10.0.2', MASTER_USER = 'replicator', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000004', MASTER_LOG_POS = 107;
slave start;

Тестирование

Для проверки репликации достаточно создать таблицу на любом из серверов и убедиться, что она стала доступна на втором.