Репликация MySQL – это процесс, который позволяет автоматически копировать данные с одного сервера базы данных на один или несколько серверов.
MySQL поддерживает ряд топологий репликации, при этом топология Master/Slave является одной из наиболее известных топологий, в которой один сервер базы данных выступает в качестве главного, а один или несколько серверов выступают в качестве ведомых. По умолчанию репликация является асинхронной, когда ведущий отправляет события, описывающие изменения базы данных, в свой двоичный журнал, а ведомые запрашивают события, когда они готовы.
В этой статье рассматривается базовый пример репликации Master/Slave в MySQL с одним главным и одним подчиненным сервером в Ubuntu 18.04. Те же самые шаги применяются для MariaDB.
Этот тип топологии репликации лучше всего подходит для развертывания реплик чтения для масштабирования чтения, оперативного резервного копирования баз данных для аварийного восстановления и для аналитических заданий.
Предпосылки
В этом примере предполагается, что у вас есть два сервера под управлением Ubuntu 18.04, которые могут взаимодействовать друг с другом через частную сеть. Если ваш хостинг-провайдер не предлагает частные IP-адреса, вы можете использовать общедоступные IP-адреса и настроить брандмауэр так, чтобы трафик на порт 3306 передавался только из надежных источников.
Серверы в этом примере имеют следующие IP-адреса:
Master IP: 192.168.121.125 Slave IP: 192.168.121.122
Установите MySQL
Стандартные репозитории Ubuntu 18.04 включают MySQL версии 5.7. Чтобы избежать каких-либо проблем, лучше установить одну и ту же версию MySQL на обоих серверах.
Установите MySQL на Мастер-сервер:
sudo apt-get update sudo apt-get install mysql-server
Установите MySQL на подчиненный сервер, используя те же команды:
sudo apt-get update sudo apt-get install mysql-server
Настройте главный сервер
Первым шагом является настройка главного сервера MySQL. Мы внесем следующие изменения:
- Настройте сервер MySQL для прослушивания частного IP
- Установите уникальный идентификатор сервера
- Включить бинарное ведение журнала
Для этого откройте файл конфигурации MySQL и раскомментируйте или установите следующее:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 192.168.121.190 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log
После этого перезапустите службу MySQL, чтобы изменения вступили в силу.
sudo systemctl restart mysql
Следующим шагом является создание нового пользователя репликации. Войдите на сервер MySQL от имени пользователя root, введя:
sudo mysql
В командной строке MySQL выполните следующие SQL-запросы, которые создадут пользователя replica и предоставят пользователю привилегию REPLICATION SLAVE:
CREATE USER 'replica'@'192.168.121.122' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.121.122';
Убедитесь, что вы изменили IP-адрес с вашего ведомого IP-адреса. Вы можете назвать пользователя, как вы хотите.
Находясь в приглашении MySQL, выполните следующую команду, которая выведет двоичное имя файла и положение.
SHOW MASTER STATUS\G
*************************** 1. row *************************** File: mysql-bin.000001 Position: 629 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.00 sec)
Запомните имя файла «mysql-bin.000001» и «Position 629». Эти значения понадобятся вам при настройке подчиненного сервера. Эти значения, вероятно, будут отличаться на вашем сервере.
Настройте подчиненный сервер
Как и в случае с главным сервером, мы внесем следующие изменения в подчиненный сервер:
- Настройте сервер MySQL для прослушивания частного IP
- Установите уникальный идентификатор сервера
- Включить бинарное ведение журнала
Откройте файл конфигурации MySQL и отредактируйте следующие строки:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 192.168.121.190 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log
Перезапустите службу MySQL:
sudo systemctl restart mysql
Следующим шагом является настройка параметров, которые подчиненный сервер будет использовать для подключения к главному серверу. Войдите в оболочку MySQL:
sudo mysql
Сначала остановите подчиненные темы:
STOP SLAVE;
Выполните следующий запрос, который настроит подчиненное устройство для репликации мастера:
CHANGE MASTER TO MASTER_HOST='192.168.121.125',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)
Заключение
В этой статье мы показали, как создать репликацию Master/Slave в MySQL.
Не стесняйтесь оставлять комментарии, если у вас есть какие-либо вопросы.