Введение
Репликация MySQL — это процесс копирования данных с сервера базы данных (главного) на один или несколько серверов (подчиненных).
MySQL поддерживает несколько топологий репликации, причем топология Master/Slave является одной из наиболее известных топологий, в которой сервер базы данных выступает в роли главного, а один или несколько серверов выступают в роли подчиненных. По умолчанию репликация является асинхронной, когда мастер отправляет события, описывающие изменения в базе данных, в своем двоичном журнале, а подчиненные устройства запрашивают события, когда они готовы.
В этом руководстве мы покажем вам, как настроить репликацию MariaDB Master/Slave с одним главным и одним подчиненным сервером в Debian 10. MariaDB — это реализация MySQL по умолчанию в Debian. То же самое касается Oracle MySQL.
Этот тип топологии репликации лучше всего подходит для развертывания реплик чтения для масштабирования чтения, оперативного резервного копирования базы данных для аварийного восстановления и для заданий сканирования.
Предпосылки
Допустим, у вас есть два сервера под управлением Debian 10, которые обмениваются данными друг с другом через частную сеть. Если ваш хостинг-провайдер не поддерживает частные IP-адреса, вы можете использовать общедоступные IP-адреса и настроить брандмауэр, чтобы разрешить трафик на порт 3306 только из надежных источников.
Серверы, используемые в этом примере, имеют следующие IP-адреса:
Master IP: 192.168.333.333
Slave IP: 192.168.444.444
Установить MariaDB
Репозиторий Debian 10 по умолчанию включает MariaDB. Лучше всего установить одну и ту же версию MariaDB на оба сервера, чтобы избежать возможных проблем.
Установите MariaDB на Master, выполнив следующие команды:
sudo apt-get update
sudo apt-get install mariadb-server
Установите MariaDB на Slave -сервер (сервер, на котором находится вторая база данных) с помощью тех же команд:
sudo apt-get update
sudo apt-get install mariadb-server
Настроить основной сервер
Первым шагом является настройка основного сервера. Мы внесем следующие изменения:
- Настройте сервер MariaDB для прослушивания частного IP-адреса.
- Установите уникальный идентификатор сервера.
- Включите двоичное ведение журнала.
Откройте файл конфигурации MariaDB и раскомментируйте или установите следующие строки:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address = 192.168.333.333
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
После этого сохраните файл и перезапустите службу MySQL, чтобы изменения вступили в силу:
sudo systemctl restart mariadb
Следующим шагом является создание нового пользователя репликации. Войдите на сервер MariaDB как root:
sudo mysql
Или, если вы установили пароль для пользователя root, используйте следующую команду для входа на сервер MySQL:
sudo mysql -u root -p
Выполните следующие SQL-запросы, чтобы создать replica
пользователя с именем и предоставить пользователю привилегию REPLICATION SLAVE
:
CREATE USER 'replica'@'192.168.444.444' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.444.444';
Убедитесь, что вы изменили IP-адрес на подчиненный IP-адрес. Вы можете назвать пользователя как хотите.
Находясь в командной строке MySQL, выполните следующую команду, которая напечатает имя и местоположение двоичного файла.
SHOW MASTER STATUS\G
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 679
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.000 sec)
Запишите имя файла «mysql-bin.000001» и местоположение « 679 ». Эти значения требуются при настройке подчиненного сервера и, скорее всего, на вашем сервере они будут другими.
Настроить подчиненный сервер
Мы сделаем те же настройки, что и на главном сервере, на подчиненном сервере:
- Настройте сервер MySQL для прослушивания частного IP-адреса.
- Установите уникальный идентификатор сервера.
- Включите двоичное ведение журнала.
Откройте файл конфигурации MariaDB и отредактируйте следующие строки:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address = 192.168.444.444
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
Перезапустите службу MariaDB:
sudo systemctl restart mariadb
Следующим шагом является настройка параметров, которые подчиненный сервер будет использовать для подключения к главному серверу. Войдите в оболочку MariaDB:
sudo mysql
Или, если вы установили пароль для пользователя root, используйте следующую команду для входа на сервер MySQL:
sudo mysql -u root -p
Начните с остановки подчиненных потоков:
STOP SLAVE;
Запустите следующий запрос, чтобы настроить репликацию master/slave:
CHANGE MASTER TO
MASTER_HOST='192.168.333.333',
MASTER_USER='replica',
MASTER_PASSWORD='replica_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=679;
Убедитесь, что вы используете правильный 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)
Вывод
В этом руководстве мы показали вам, как создать реплику Master-Slave MariaDB в Debian 10.