
Репликация MySQL — это процесс, позволяющий автоматически копировать данные с одного сервера базы данных на один или несколько серверов.
MySQL поддерживает ряд топологий репликации, среди которых топология Master/Slave — одна из самых распространённых, в которой один сервер базы данных выступает в роли ведущего, а один или несколько серверов — в роли ведомых. По умолчанию репликация асинхронная: ведущий сервер отправляет события, описывающие изменения базы данных, в свой двоичный журнал, а ведомые серверы запрашивают эти события по мере их готовности.
В этом руководстве рассматривается базовый пример репликации MySQL Master/Slave с одним ведущим и одним ведомым сервером в Ubuntu 18.04. Те же действия применимы и для MariaDB.
Этот тип топологии репликации лучше всего подходит для развертывания реплик чтения с целью масштабирования чтения, резервного копирования баз данных в режиме реального времени для аварийного восстановления и аналитических задач.
Предпосылки
В этом примере предполагается, что у вас есть два сервера под управлением Ubuntu 18.04, которые могут взаимодействовать друг с другом через частную сеть. Если ваш хостинг-провайдер не предоставляет частные IP-адреса, вы можете использовать публичные IP-адреса и настроить брандмауэр так, чтобы он разрешал трафик через порт 3306 только от доверенных источников.
Серверы в этом примере имеют следующие IP-адреса:
Master IP: 192.168.121.190 Slave IP: 192.168.121.236
Установить MySQL
В репозиториях Ubuntu 18.04 по умолчанию включена версия MySQL 5.7. Во избежание проблем рекомендуется установить на обоих серверах одну и ту же версию MySQL .
Установите MySQL на главный сервер:
sudo apt-get updatesudo apt-get install mysql-server
Установите MySQL на подчиненный сервер, используя те же команды:
sudo apt-get updatesudo apt-get install mysql-server
Настройте главный сервер
Первым шагом будет настройка главного сервера MySQL. Внесем следующие изменения:
- Настройте сервер MySQL на прослушивание частного IP-адреса .
- Установите уникальный идентификатор сервера.
- Включить двоичное ведение журнала
Для этого откройте файл конфигурации MySQL и раскомментируйте или установите следующее:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
мастер:/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.236' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.121.236';
Обязательно замените IP-адрес на IP-адрес вашего подчинённого устройства. Вы можете дать пользователю любое имя.
Не выходя из командной строки MySQL, выполните следующую команду, которая выведет на экран имя и положение двоичного файла.
SHOW MASTER STATUSG
*************************** 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» и позицию «629» . Эти значения понадобятся вам при настройке подчинённого сервера. На вашем сервере они, вероятно, будут другими.
Настройте подчиненный сервер
Как и в случае с главным сервером выше, мы внесем следующие изменения на подчиненный сервер:
- Настройте сервер MySQL на прослушивание частного IP-адреса.
- Установите уникальный идентификатор сервера
- Включить двоичное ведение журнала
Откройте файл конфигурации MySQL и отредактируйте следующие строки:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
подчиненный:/etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 192.168.121.236 server-id = 2 log_bin = /var/log/mysql/mysql-bin.log
Перезапустите службу MySQL:
sudo systemctl restart mysql
Следующий шаг — настроить параметры, которые подчинённый сервер будет использовать для подключения к главному серверу. Войдите в оболочку MySQL:
sudo mysql
Сначала остановим подчиненные потоки:
STOP SLAVE;
Выполните следующий запрос, который настроит подчиненный сервер на репликацию главного сервера:
CHANGE MASTER TOMASTER_HOST='192.168.121.190',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.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии.
ubuntu mysql mariadb Не используете Ubuntu 18.04?
Выберите другую ОС: центос 7 дебиан 10
Связанные руководства
- Как установить Joomla с Apache в Ubuntu 18.04
- Как установить MariaDB в Ubuntu 20.04
- Как установить WordPress с Apache в Ubuntu 18.04
- Как установить Magento 2 на Ubuntu 18.04
- Как установить phpMyAdmin с Nginx в Ubuntu 18.04
- Как установить и защитить phpMyAdmin с помощью Apache в Ubuntu 18.04
- Как установить WordPress с Nginx в Ubuntu 18.04