MySQL репликация Master-Slave: настройка и мониторинг

MySQL / MariaDB · 19.04.2026
MySQL репликация Master-Slave: настройка и мониторинг

Зачем нужна репликация MySQL

Репликация MySQL позволяет поддерживать точную копию базы данных на втором сервере в реальном времени. Используется для: читающей нагрузки (read replicas), аварийного восстановления (failover), бэкапов без нагрузки на master.

Архитектура Master-Slave

Master записывает все изменения в Binary Log (binlog). Slave читает binlog и применяет те же изменения у себя. Репликация асинхронная — небольшая задержка (lag) нормальна.

Настройка Master-сервера

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
binlog_expire_logs_seconds = 604800
max_binlog_size = 100M
sudo systemctl restart mysql

# Создать пользователя для репликации
mysql -u root -p -e "
CREATE USER 'replicator'@'%' IDENTIFIED BY 'ReplPass123!';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;"
# Узнать позицию binlog (запомните File и Position)
mysql -u root -p -e "SHOW MASTER STATUS\G"

Настройка Slave-сервера

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay.log
read_only = 1
log_slave_updates = 1
sudo systemctl restart mysql

# Подключить к master
mysql -u root -p -e "
CHANGE MASTER TO
    MASTER_HOST='192.168.1.10',
    MASTER_USER='replicator',
    MASTER_PASSWORD='ReplPass123!',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=154;
START SLAVE;"

Мониторинг репликации

mysql -u root -p -e "SHOW SLAVE STATUS\G"

-- Ключевые параметры:
-- Slave_IO_Running: Yes  (должно быть Yes)
-- Slave_SQL_Running: Yes  (должно быть Yes)
-- Seconds_Behind_Master: 0  (задержка репликации)
Если Slave_IO_Running: No или Slave_SQL_Running: No — репликация сломана. Проверьте Last_Error в выводе SHOW SLAVE STATUS для диагностики.

GTID-репликация (MySQL 5.6+ рекомендуется)

[mysqld]
gtid_mode = ON
enforce_gtid_consistency = ON
log_bin = ON

# На slave вместо MASTER_LOG_FILE/POS:
CHANGE MASTER TO
    MASTER_HOST='192.168.1.10',
    MASTER_USER='replicator',
    MASTER_PASSWORD='ReplPass123!',
    MASTER_AUTO_POSITION=1;
GTID-репликация предпочтительнее традиционной binlog-репликации: автоматически определяет позицию, легче управлять failover и не нужно вручную отслеживать File/Position.
← Назад в базу знаний Задать вопрос поддержке