Как настроить репликацию MySQL (MariaDB) Master-Slave в Debian 10

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

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

В этом руководстве мы покажем вам, как настроить репликацию MariaDB Master / Slave с одним главным и одним подчиненным серверами в Debian 10. MariaDB — это реализация MySQL по умолчанию в Debian. Те же шаги применимы и для Oracle MySQL.

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

Подготовка

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

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

Master IP: 10.10.8.12
Slave IP:  10.10.8.164

Установка MariaDB

Репозитории Debian 10 по умолчанию включают MariaDB версии 10.3. Лучше всего установить одну и ту же версию MariaDB на оба сервера, чтобы избежать возможных проблем.

Установите MariaDB как на ведущем, так и на ведомом устройстве, выполнив следующие команды:

sudo apt-get updatesudo apt-get install mariadb-server

Настройка главного сервера

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

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

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

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

sudo systemctl restart mariadb

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

sudo mysql

Выполните следующие запросы SQL, чтобы создать пользователя с именем replica и предоставить пользователю привилегию REPLICATION SLAVE :

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

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

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

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

Настройка подчиненного сервера

Мы внесем те же изменения на подчиненном сервере, что и на главном:

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

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

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

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

sudo systemctl restart mariadb

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

sudo mysql

Начните с остановки подчиненных потоков:

STOP SLAVE;

Выполните следующий запрос, чтобы настроить репликацию Master / Slave:

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

Убедитесь, что вы используете правильный 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)

Выводы

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

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

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