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

Введение

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

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

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

Основные требования

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

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

Master IP: 10.10.0.44
Slave IP:  10.10.0.20

Установите MySQL

Вы можете прочесть эту статью об установке MySQL на CentOS / Redhat 7/6 & Fedora 31/30.

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

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

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

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

$ sudo nano /etc/my.cnf
Главный сервер :/etc/my.cnf
bind-address           = 10.10.0.44
server-id              = 44
log_bin                = mysql-bin

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

$ sudo systemctl restart mysqld

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

$ mysql -uroot -p

Выполните следующие операторы SQL в приглашении MySQL, чтобы создать пользователя slave1 и предоставить ему права ВЕДОМОЕ УСТРОЙСТВО РЕПЛИКАЦИИ привилегия:

mysql> CREATE USER 'slave1'@'10.10.0.20' IDENTIFIED BY 'secret_password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'10.10.0.20';

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

mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 1714
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

Обратите внимание на имя файла «mysql-bin.000001» и позицию «1714». Эти значения понадобятся вам при настройке ведомого сервера. На вашем сервере эти значения могут быть другими.

Настройка ведомого сервера

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

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

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

$ sudo nano /etc/my.cnf
Slave Server:/etc/my.cnf
bind-address           = 10.10.0.20
server-id              = 20
log_bin                = mysql-bin

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

$ sudo systemctl restart mysqld

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

$ mysql -uroot -p

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

mysql> STOP SLAVE;

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

mysql> CHANGE MASTER TO
mysql> MASTER_HOST='10.10.0.44',
mysql> MASTER_USER='slave1',
mysql> MASTER_PASSWORD='secret_password',
mysql> MASTER_LOG_FILE='mysql-bin.000001',
mysql> MASTER_LOG_POS=1714;

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

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

mysql> START SLAVE;

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

Теперь у вас должна быть функциональная конфигурация репликации Master/Slave.

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

$ mysql -uroot -p
mysql> CREATE DATABASE test_db;

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

$ mysql -uroot -p

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

mysql> SHOW DATABASES;

Вывод:

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

Заключение

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

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

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

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