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

Репликация MySQL — это процесс, который позволяет автоматически копировать данные с одного сервера базы данных на один или несколько серверов.

MySQL поддерживает несколько топологий репликации, причем топология «главный / подчиненный» является одной из наиболее известных топологий, в которой один сервер базы данных действует как главный, а один или несколько серверов действуют как подчиненные. По умолчанию репликация является асинхронной, когда ведущее устройство отправляет события, описывающие изменения базы данных, в свой двоичный журнал, а ведомые устройства запрашивают события, когда они готовы.

В этом руководстве рассматривается базовый пример репликации MySQL Master / Slave с одним главным и одним подчиненным серверами в Ubuntu 18.04. Те же шаги применяются для MariaDB.

Этот тип топологии репликации лучше всего подходит для развертывания реплик чтения для масштабирования чтения, резервного копирования баз данных в реальном времени для аварийного восстановления и для задач аналитики.

Подготовка

В этом примере предполагается, что у вас есть два сервера под управлением Ubuntu 18.04, которые могут связываться друг с другом по частной сети. Если ваш хостинг-провайдер не предлагает частные IP-адреса, вы можете использовать общедоступные IP-адреса и настроить брандмауэр, чтобы разрешить трафик на порт 3306 только из надежных источников.

Серверы в этом примере имеют следующие IP-адреса:

Master IP: 192.168.121.190
Slave IP:  192.168.121.236

Установить MySQL

По умолчанию репозитории Ubuntu 18.04 включают MySQL версии 5.7. Чтобы избежать каких-либо проблем, лучше всего установить одну и ту же версию MySQL на оба сервера.

Установите MySQL на главный сервер:

sudo apt-get updatesudo apt-get install mysql-server

Установите MySQL на подчиненный сервер, используя те же команды:

sudo apt-get updatesudo apt-get install mysql-server

Настроить главный сервер

Первый шаг — настроить главный сервер MySQL. Внесем следующие изменения:

Для этого откройте файл конфигурации MySQL и раскомментируйте или установите следующее:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
master:/etc/mysql/mysql.conf.d/mysqld.cnf
bind-address           = 192.168.121.190
server-id              = 1
log_bin                = /var/log/mysql/mysql-bin.log

После этого перезапустите службу MySQL, чтобы изменения вступили в силу:

sudo systemctl restart mysql

Следующим шагом будет создание нового пользователя репликации. Войдите на сервер MySQL как пользователь root, набрав:

sudo mysql

Изнутри командной строки MySQL выполните следующие SQL-запросы, которые создадут пользователя replica и предоставят пользователю привилегию REPLICATION SLAVE :

CREATE USER 'replica'@'192.168.121.236' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.121.236';
Убедитесь, что вы изменили IP-адрес на свой подчиненный IP-адрес. Вы можете назвать пользователя как хотите.

Находясь в командной строке MySQL, выполните следующую команду, которая выведет двоичное имя файла и позицию.

SHOW MASTER STATUSG
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 629
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

Обратите внимание на имя файла mysql-bin.000001 и позицию 629 . Эти значения понадобятся вам при настройке подчиненного сервера. Эти значения, вероятно, будут другими на вашем сервере.

Настроить подчиненный сервер

Как и для главного сервера выше, мы внесем следующие изменения в подчиненный сервер:

  • Настройте сервер MySQL для прослушивания частного IP-адреса
  • Установите уникальный идентификатор сервера
  • Включите двоичное ведение журнала

Откройте файл конфигурации MySQL и отредактируйте следующие строки:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
slave:/etc/mysql/mysql.conf.d/mysqld.cnf
bind-address           = 192.168.121.236
server-id              = 2
log_bin                = /var/log/mysql/mysql-bin.log

Перезапустите службу MySQL:

sudo systemctl restart mysql

Следующим шагом является настройка параметров, которые подчиненный сервер будет использовать для подключения к главному серверу. Войдите в оболочку MySQL:

sudo mysql

Сначала остановите подчиненные потоки:

STOP SLAVE;

Выполните следующий запрос, который настроит подчиненное устройство для репликации главного устройства:

CHANGE MASTER TOMASTER_HOST='192.168.121.190',MASTER_USER='replica',MASTER_PASSWORD='replica_password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=629;

Убедитесь, что вы используете правильный IP-адрес, имя пользователя и пароль. Имя и позиция файла журнала должны совпадать со значениями, полученными от главного сервера.

После этого запустите подчиненные потоки.

START SLAVE;

Проверить конфигурацию

На этом этапе у вас должна быть работающая настройка репликации Master / Slave.

Чтобы убедиться, что все работает должным образом, мы создадим новую базу данных на главном сервере:

sudo mysql
CREATE DATABASE replicatest;

Войдите в подчиненную оболочку MySQL:

sudo mysql

Выполните следующую команду, чтобы вывести список всех баз данных :

SHOW DATABASES;

Вы заметите, что база данных, созданная на главном сервере, реплицируется на подчиненный:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| replicatest        |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

Выводы

В этом руководстве мы показали, как создать репликацию MySQL Master / Slave.

Не стесняйтесь оставлять комментарии, если у вас есть вопросы.

Оставьте комментарий