Настройка Mysql репликации Master — Master

Дата: 23.06.2015 Автор Admin

Рассмотрим настройку репликации Mysql.

Обновляем пакеты на каждом из серверов:

apt-get update
apt-get upgrade

Установим Mysql сервер и клиент, сделать это нужно на двух серверах.

apt-get install mysql-server mysql-client

Открываем файл /etc/mysql/my.cnf

Изменяем в конфиге следующие строки:

server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = example_DB
# bind-address = 127.0.0.1

В данном конфиге:

server-id — номер id mysql сервера

log_bin — путь к бинарному логу, в него пишутся изменения

binlog_do_db — название БД, которую мы будем реплицировать

# bind-address — строка закоментирована, т.к. сервер должен работать не только на localhost

Перезапускаем mysql сервер

service mysql restart

Перейдем к настройке репликации.

Подключаемся к Mysql.

mysql -u root -p

Создадим пользователя replicator

create user 'replicator'@'%' identified by 'password';

Создаем базу данных, которую мы будем реплицировать.

create database example_DB;

Назначим права пользователю

grant replication slave on *.* to 'replicator'@'%';

Проверить статус репликации можно командой:

show master status;

Запоминаем параметры File (mysql-bin.000001) и Position (107). Эти параметры нам понадобятся на втором сервере.

Отключаемся от консоли mysql

exit

Переходим на второй mysql сервер и правим конфиг файл /etc/mysql/my.cnf

Конфиг файл второго сервера будет отличаться только id

server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = example_DB
# bind-address = 127.0.0.1

Перезапускаем mysql на втором сервере

service mysql restart

Повторяем операцию по созданию пользователя.

mysql -u root –p
create user 'replicator'@'%' identified by 'password';

Создаем базу данных, которую мы будем реплицировать.

create database example_DB;

Назначим права пользователю.

grant replication slave on *.* to 'replicator'@'%';

Запускаем процесс репликации

slave stop;

Параметры MASTER_LOG_FILE и MASTER_LOG_POS берем с первого сервера (вывод команды show master status;)

CHANGE MASTER TO MASTER_HOST = 'ip address first mysql server', MASTER_USER = 'replicator', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 107;
slave start;

Теперь посмотрим статус репликации:

SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 107      | example_DB   |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

Запоминаем название файла и параметр позиции, эти данные понадобятся нам при включении репликации на первом сервере.

Теперь вернемся на первый сервер и включим репликацию на нем:

slave stop;

Меняем параметры MASTER_LOG_FILE и MASTER_LOG_POS полученные ранее из команды SHOW MASTER STATUS;

CHANGE MASTER TO MASTER_HOST = 'ip address second mysql server', MASTER_USER = 'replicator', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000004', MASTER_LOG_POS = 107;
slave start;

Теперь репликация работает на двух серверах.

Проведем тестирование, выполним на первом сервере команду в консоли mysql:

create table example_DB.test_table2 (`id` varchar(10));

Теперь выполним команду на втором сервере:

show tables in example_DB;

Вывод должен быть с созданной таблицей

+----------------------+
| Tables_in_example_DB |
+----------------------+
| test_table           |
+----------------------+
1 row in set (0.00 sec)

Как видите репликация работает, таблица создалась.


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *