Репликация MySQL — это процесс, который позволяет автоматически копировать данные с одного сервера базы данных на один или несколько серверов.
MySQL поддерживает несколько топологий репликации, причем топология «главный / подчиненный» является одной из наиболее известных топологий, в которой один сервер базы данных действует как главный, а один или несколько серверов действуют как подчиненные. По умолчанию репликация является асинхронной, когда ведущее устройство отправляет события, описывающие изменения базы данных, в свой двоичный журнал, а ведомые устройства запрашивают события, когда они готовы.
В этом руководстве мы объясним, как настроить репликацию 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 MySQL создается временный пароль. Чтобы найти пароль, используйте следующую команду grep :
sudo grep 'temporary password' /var/log/mysqld.log
Запустите команду mysql_secure_installation
чтобы установить новый пароль root и повысить безопасность экземпляра MySQL:
mysql_secure_installation
Введите временный пароль root и ответьте Y
(да) на все вопросы.
Настроить главный сервер
Сначала мы настроим главный сервер MySQL и внесем следующие изменения:
- Настройте сервер MySQL на прослушивание частного IP-адреса .
- Установите уникальный идентификатор сервера.
- Включите двоичное ведение журнала.
Для этого откройте файл конфигурации MySQL и добавьте следующие строки в раздел [mysqld]
:
sudo nano /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';
Находясь в командной строке 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
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.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.