Настройка Mysql репликации Master — Master
Рассмотрим настройку репликации Mysql.
Обновляем пакеты на каждом из серверов:
1 |
apt-get update |
1 |
apt-get upgrade |
Установим Mysql сервер и клиент, сделать это нужно на двух серверах.
1 |
apt-get install mysql-server mysql-client |
Открываем файл /etc/mysql/my.cnf
Изменяем в конфиге следующие строки:
1 2 3 4 |
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 сервер
1 |
service mysql restart |
Перейдем к настройке репликации.
Подключаемся к Mysql.
1 |
mysql -u root -p |
Создадим пользователя replicator
1 |
create user 'replicator'@'%' identified by 'password'; |
Создаем базу данных, которую мы будем реплицировать.
1 |
create database example_DB; |
Назначим права пользователю
1 |
grant replication slave on *.* to 'replicator'@'%'; |
Проверить статус репликации можно командой:
1 |
show master status; |
Запоминаем параметры File (mysql-bin.000001) и Position (107). Эти параметры нам понадобятся на втором сервере.
Отключаемся от консоли mysql
1 |
exit |
Переходим на второй mysql сервер и правим конфиг файл /etc/mysql/my.cnf
Конфиг файл второго сервера будет отличаться только id
1 2 3 4 |
server-id = 2 log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = example_DB # bind-address = 127.0.0.1 |
Перезапускаем mysql на втором сервере
1 |
service mysql restart |
Повторяем операцию по созданию пользователя.
1 |
mysql -u root –p |
1 |
create user 'replicator'@'%' identified by 'password'; |
Создаем базу данных, которую мы будем реплицировать.
1 |
create database example_DB; |
Назначим права пользователю.
1 |
grant replication slave on *.* to 'replicator'@'%'; |
Запускаем процесс репликации
1 |
slave stop; |
Параметры MASTER_LOG_FILE и MASTER_LOG_POS берем с первого сервера (вывод команды show master status;)
1 |
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; |
1 |
slave start; |
Теперь посмотрим статус репликации:
1 |
SHOW MASTER STATUS; |
1 2 3 4 5 6 |
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000004 | 107 | example_DB | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) |
Запоминаем название файла и параметр позиции, эти данные понадобятся нам при включении репликации на первом сервере.
Теперь вернемся на первый сервер и включим репликацию на нем:
1 |
slave stop; |
Меняем параметры MASTER_LOG_FILE и MASTER_LOG_POS полученные ранее из команды SHOW MASTER STATUS;
1 |
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; |
1 |
slave start; |
Теперь репликация работает на двух серверах.
Проведем тестирование, выполним на первом сервере команду в консоли mysql:
1 |
create table example_DB.test_table2 (`id` varchar(10)); |
Теперь выполним команду на втором сервере:
1 |
show tables in example_DB; |
Вывод должен быть с созданной таблицей
1 2 3 4 5 6 |
+----------------------+ | Tables_in_example_DB | +----------------------+ | test_table | +----------------------+ 1 row in set (0.00 sec) |
Как видите репликация работает, таблица создалась.
Добавить комментарий