Как настроить репликацию MySQL Master-Slave на CentOS 7

Репликация MySQL Master-Slave

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

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

В этом руководстве мы объясним, как настроить репликацию MySQL Master/Slave с одним ведущим и одним ведомым сервером в CentOS 7. Те же шаги применимы и для MariaDB.

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

Предпосылки

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

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

 Master IP: 192.168.121.59 Slave IP: 192.168.121.14

Установить MySQL

В репозиториях CentOS 7 по умолчанию нет пакетов MySQL, поэтому мы установим MySQL из официального репозитория Yum. Во избежание проблем мы установим на оба сервера одну и ту же версию MySQL 5.7.

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

 sudo yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm sudo yum install mysql-community-server

После завершения установки запустите службу MySQL и включите ее автоматический запуск при загрузке системы с помощью:

 sudo systemctl enable mysqld sudo systemctl start mysqld

При первом запуске сервера MySQL для пользователя root генерируется временный пароль. Чтобы узнать пароль, используйте следующую команду grep :

 sudo grep 'temporary password' /var/log/mysqld.log

Выполните команду mysql_secure_installation , чтобы установить новый пароль root и повысить безопасность экземпляра MySQL:

 mysql_secure_installation

Введите временный пароль root и ответьте Y (да) на все вопросы.

Новый пароль должен быть длиной не менее 8 символов и содержать как минимум одну заглавную букву, одну строчную букву, одну цифру и один специальный символ.

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

Сначала мы настроим главный сервер MySQL и внесем следующие изменения:

Для этого откройте файл конфигурации MySQL и добавьте следующие строки в раздел [mysqld] :

 sudo nano /etc/my.cnf

мастер:/etc/my.cnf

 bind-address = 192.168.121.59 server-id = 1 log_bin = mysql-bin

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

 sudo systemctl restart mysqld

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

 mysql -uroot -p

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

 CREATE USER 'replica'@'192.168.121.14' IDENTIFIED BY 'strong_password';
 GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.121.14';

Обязательно замените IP-адрес на IP-адрес вашего подчинённого устройства. Вы можете дать пользователю любое имя.

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

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

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

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

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

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

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

 sudo nano /etc/my.cnf

подчиненный:/etc/my.cnf

 bind-address = 192.168.121.14 server-id = 2 log_bin = mysql-bin

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

 sudo systemctl restart mysqld

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

 mysql -uroot -p

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

 STOP SLAVE;

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

 CHANGE MASTER TO MASTER_HOST='192.168.121.59', MASTER_USER='replica', MASTER_PASSWORD='strong_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1427;

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

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

 START SLAVE;

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

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

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

 mysql -uroot -p
 CREATE DATABASE replicatest;

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

 mysql -uroot -p

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

 SHOW DATABASES;

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

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

Заключение

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

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

centos mysql mariadb Не используете CentOS 7?
Выберите другую ОС:
дебиан 10 убунту 18.04

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *