
Репликация MySQL — это процесс копирования данных с одного сервера базы данных (главного) на один или несколько серверов (подчиненных).
MySQL поддерживает несколько топологий репликации. Топология Master/Slave — одна из самых распространённых, в которой один сервер базы данных выступает в роли ведущего, а один или несколько серверов — в роли ведомых. По умолчанию репликация асинхронная: ведущий сервер отправляет события, описывающие изменения базы данных, в свой двоичный журнал, а ведомые серверы запрашивают эти события по мере их готовности.
В этом руководстве мы покажем вам, как настроить репликацию 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 на прослушивание частного IP-адреса .
- Установите уникальный идентификатор сервера.
- Включить двоичное ведение журнала.
Откройте файл конфигурации MariaDB и раскомментируйте или измените следующие строки:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
мастер:/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
подчиненный:/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.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии.
debian mysql mariadb Не используете Debian 10?
Выберите другую ОС: центос 7 убунту 18.04
Связанные руководства
- Как установить MariaDB на Debian 10
- Как установить и защитить phpMyAdmin с помощью Apache в Debian 9
- Как установить MariaDB на Debian 9
- Как установить MariaDB на CentOS 8
- Вывести список (показать) таблиц в базе данных MySQL
- Как подключиться к MySQL через SSH-туннель
- Как разрешить удаленные подключения к серверу базы данных MySQL