Как настроить реплику базы данных MySQL в Ubuntu 18.04

12 set 2022 3 min di lettura
Как настроить реплику базы данных MySQL в Ubuntu 18.04
Indice dei contenuti

Введение

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

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

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

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

Предпосылки

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

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

Master IP: 192.168.333.333
Slave IP: 192.168.444.444

Установить MySQL

Репозитории Ubuntu 18.04 по умолчанию включают MySQL версии 5.7. Во избежание проблем лучше всего установить на оба сервера одну и ту же версию MySQL.

Если вы хотите установить пароль для входа на сервер MySQL, а затем изменить метод аутентификации, прочитайте это руководство: Как установить MySQL на Ubuntu 18.04, в противном случае читайте дальше, чтобы установить MySQL с конфигурациями по умолчанию.

Установите MySQL на главный сервер (сервер, на котором расположена первая база данных):

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

Установите MySQL на Slave -сервер (сервер, на котором находится вторая база данных) с помощью тех же команд:

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

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

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

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

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

Найдите строку bind-address = 127.0.0.1 и измените ее, введя IP-адрес Мастер -сервера. Также добавьте строки server-id и log_bin. В нашем примере:

bind-address = 192.168.333.333
 server-id = 1
 log_bin = /var/log/mysql/mysql-bin.log

Сохраните и закройте файл.

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

sudo systemctl restart mysql

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

sudo mysql

Или, если вы установили пароль для пользователя root, используйте следующую команду для входа на сервер MySQL:

sudo mysql -u root -p

Из командной строки MySQL выполните следующие 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.000002
 Position: 625
 Binlog_Do_DB:
 Binlog_Ignore_DB:
 Executed_Gtid_Set:
 1 row in set (0.00 sec)

Обратите внимание на имя файла «mysql-bin.000002» и расположение «625». Эти значения понадобятся при настройке ведомого сервера. Эти значения, скорее всего, будут другими на вашем сервере.

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

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

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

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

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

Найдите строку bind-address = 127.0.0.1 и измените ее, введя IP-адрес Slave -сервера. Также добавьте строки server-id и log_bin. В нашем примере:

bind-address = 192.168.444.444
 server-id = 2
 log_bin = /var/log/mysql/mysql-bin.log

Сохраните и закройте файл.

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

sudo systemctl restart mysql

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

sudo mysql

Или, если вы установили пароль для пользователя root, используйте следующую команду для входа на сервер MySQL:

sudo mysql -u root -p

Во-первых, остановите подчиненные потоки:

STOP 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=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.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.