
Введение
Репликация 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.
Если у вас возникли вопросы, пожалуйста, оставьте комментарий.