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

How to Configure MySQL Master-Slave Replication on Ubuntu 18.04

27 Февраля 2021 | Ubuntu

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

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

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

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

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


Прежде чем вы приступите

В этом примере предполагается, что у вас есть два сервера под управлением 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 update sudo apt-get install mysql-server 


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

sudo apt-get update sudo apt-get install mysql-server 


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

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

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

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf 

мастер: /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 STATUS\G 
*************************** 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 

подчиненный: /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 TO MASTER_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.


    Комментарии

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

Загрузка комментариев...