Репликация MySQL master -> slave

Установлено на сервере Debian 12, Hestia CP, mariadb -10.11.6 На второй сервер устанавливаем debian12 и mariadb 10.11.8 Выполняем на MASTER сервере:

запускаем mysql и выполняем след команды:
CREATE USER 'replication'@'%';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';

Редактируем конфиг

nano /etc/mysql/my.cnf
В файл my.cnf в секции [mysqld] необходимо добавить следующие параметры:

server_id = 1 # назначает серверу уникальный идентификатор
log_bin = mysql-bin # включает двоичный журнал

Перезапускаем службу

systemctl restart mariadb
Убедимся, что двоичный журнал включен. Конкретные значения могут отличаться.

mysql> SHOW MASTER STATUS;

Блокируем Мастер для копирования текущего состояния

mysql -u root -p -e FLUSH TABLES WITH READ LOCK;'
Выберите необходимые базы для копирования

mysql -u root -p -e 'SHOW DATABASES;' 


mysqldump --databases phpmyadmin roundcube > backup.sql
Разблокируем Мастер

mysql -u root -p -e ' UNLOCK TABLES;' 
Копируем бекап на Slave сервер

scp backup.sql  IPадрес_SLAVE:/root/

Добавляем порт в файрвол HestiaCP

v-add-firewall-rule ACCEPT IP_Адрес_SLAVE 3306
По умолчанию к MariaDB нельзя подключиться по сети, изменим это. Отредактируем файл /etc/mysql/mariadb.conf.d/50-server.cnf Исправим bind-address на 0.0.0.0

Перезапускаем службу

systemctl restart mariadb
Выполняем на SLAVE сервере: mysql < backup.sql Проверяем создались ли базы

mysql -u root -p -e 'SHOW DATABASES;'

Отредактируем файл /etc/mysql/mariadb.conf.d/50-server.cnf

[mysqld]
log_bin = mysql-bin  # указываем слейву вести собственный двоичный журнал
server_id = 2  # указываем идентификатор сервера
relay-log = /var/lib/mysql/mysql-relay-bin # указываем расположение журнала ретрансляции
relay-log-index = /var/lib/mysql/mysql-relay-bin.index  # этот файл служит перечнем всех имеющихся журналов ретрансляции
read_only = 1  # переводим слейв в режим “только чтение”
И теперь указываем слейву, какой сервер будет мастером, и откуда начинать реплицировать данные. В параметры MASTER_LOG_FILE и MASTER_LOG_POS необходимо подставить значения, полученные из SHOW MASTER STATUS на мастере.

mysql> CHANGE MASTER TO MASTER_HOST='172.20.220.62', MASTER_USER='replication', MASTER_LOG_FILE=' mysql-bin.000001 ', MASTER_LOG_POS=328;
Запустим воспроизведение журнала ретрансляции, и проверим статус репликации:

mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
Если все прошло успешно, ваш статус должен иметь аналогичный вид.

27.05.2024
Информация


OK