Гид по технологиям

Настройка ведомого сервера MySQL

• 5 min read • Базы данных • Обновлено 23 Nov 2025
Настройка ведомого MySQL: шаги и проверка
Настройка ведомого MySQL: шаги и проверка

Введение

Этот документ описывает, как настроить ведомый (slave) MySQL-сервер (server2), чтобы он реплицировал базу exampledb с мастер-сервера. Подходит для классической файловой репликации MySQL с SSL-соединением между серверами.

Важно: все команды и пути сохранены в исходном виде. Конфигурационные ключи и имена файлов не переводятся.

Требования и понятия в одну строку

  • Master — главный сервер, источник изменений.
  • Slave (ведомый) — сервер, принимающий и воспроизводящий изменения.
  • SHOW MASTER STATUS — выдаёт имя binlog-файла и позицию, которые нужны для настройки слейва.

1. Редактирование конфигурации на сервере2

Откройте файл /etc/mysql/my.cnf и в секции [mysqld] убедитесь, что присутствуют следующие параметры.

server2:

vi /etc/mysql/my.cnf

| [...] server-id=2 master-connect-retry=60 replicate-do-db=exampledb [...] |

Заметки:

  • server-id должен быть уникальным и отличаться от server-id на мастере.
  • replicate-do-db ограничивает репликацию только базой exampledb.

Важно: после изменения конфигурации перезапустите MySQL.

/etc/init.d/mysql restart

2. Создание пустой базы и импорт дампа

На сервере2 создайте пустую базу данных с тем же именем, что и на мастере, перед импортом дампа:

mysql -u root -p

Введите пароль root и выполните:

CREATE DATABASE exampledb;
quit;

Остановите slave (если он был запущен), перейдите в /tmp и импортируйте SQL-дамп snapshot.sql:

/usr/bin/mysqladmin –user=root –password=yourrootsqlpassword stop-slave
cd /tmp
mysql -u root -pyourrootsqlpassword exampledb < snapshot.sql

Теперь снова подключитесь к MySQL для окончательной настройки:

mysql -u root -p

3. Выполнение CHANGE MASTER TO

Запустите команду CHANGE MASTER TO на server2, заменив значения MASTER_LOG_FILE и MASTER_LOG_POS значениями из команды SHOW MASTER STATUS на мастере. Пример:

CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98, MASTER_SSL=1, MASTER_SSL_CA = '/etc/mysql/newcerts/ca-cert.pem', MASTER_SSL_CERT = '/etc/mysql/newcerts/client-cert.pem', MASTER_SSL_KEY = '/etc/mysql/newcerts/client-key.pem';

Пояснения параметров:

  • MASTER_HOST — IP или имя хоста мастера (пример: 192.168.0.100).
  • MASTER_USER — пользователь, которому на мастере выдали привилегии репликации.
  • MASTER_PASSWORD — пароль этого пользователя на мастере.
  • MASTER_LOG_FILE и MASTER_LOG_POS — значения из SHOW MASTER STATUS на мастере.
  • MASTER_SSL, MASTER_SSL_CA, MASTER_SSL_CERT, MASTER_SSL_KEY — опции для SSL-соединения.

4. Запуск и проверка работоспособности

Запустите слейв на server2:

START SLAVE;

Проверить статус:

SHOW SLAVE STATUS \G

Ожидаемый результат: поля Slave_IO_Running и Slave_SQL_Running должны быть равны Yes. Поскольку используется SSL, также должны быть заполнены поля Master_SSL_Allowed, Master_SSL_CA_File, Master_SSL_Cert и Master_SSL_Key.

Пример вывода:

mysql> SHOW SLAVE STATUS \G
* 1. row *
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.100
Master_User: slave_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 98
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 235
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: exampledb
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 98
Relay_Log_Space: 235
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: Yes
Master_SSL_CA_File: /etc/mysql/newcerts/ca-cert.pem
Master_SSL_CA_Path:
Master_SSL_Cert: /etc/mysql/newcerts/client-cert.pem
Master_SSL_Cipher:
Master_SSL_Key: /etc/mysql/newcerts/client-key.pem
Seconds_Behind_Master: 0
1 row in set (0.00 sec)

mysql>

Завершите сеанс MySQL:

quit;

Теперь при изменении exampledb на мастере изменения будут реплицироваться на server2.

Отладка и типичные ошибки

  • Slave_IO_Running = No или Slave_SQL_Running = No — проверьте /var/log/syslog, ошибки в поле Last_Error в SHOW SLAVE STATUS, сетевую доступность MASTER_HOST и корректность учётных данных MASTER_USER/MASTER_PASSWORD.
  • Ошибки SSL — проверьте пути к сертификатам на слейве и права доступа к файлам (чтение для mysql-юзера).
  • Несовпадение позиций — убедитесь, что дамп snapshot.sql был снят с мастера в том же положении binlog, от которого вы начали репликацию.
  • Права пользователя — MASTER_USER должен иметь REPLICATION SLAVE (и/или REPLICATION CLIENT) на мастере.

Когда это не сработает

  • Если вы не взяли снимок (дамп) синхронно с SHOW MASTER STATUS, возможно несоответствие binlog-позиций.
  • Если в дампе присутствуют команды, запрещающие записываемость на слейве (например, explicit USE/LOCK), импорт может привести к расхождению.

Чек-листы и роли

DBA

  • Проверить server-id на мастере и слейве.
  • Удостовериться, что MASTER_USER имеет привилегии для репликации.
  • Снять дамп с мастера и зафиксировать SHOW MASTER STATUS.
  • Подготовить и проверить сертификаты SSL.

DevOps/Системный администратор

  • Открыть порт 3306 между машинами или настроить туннель.
  • Настроить мониторинг доступности MySQL и метрики Seconds_Behind_Master.
  • Настроить логирование и ротацию логов.

Критерии приёмки

  • Slave_IO_Running = Yes и Slave_SQL_Running = Yes.
  • Seconds_Behind_Master стабильно близко к 0 после начала репликации.
  • Данные в exampledb на слейве соответствуют данным на мастере в тестовом наборе.

Альтернативные подходы

  • Полная резервная копия + восстановление вместо импорта дампа, если база очень большая.
  • Использование semi-synchronous репликации для уменьшения риска потерянных транзакций.
  • Логическая репликация на уровне приложений (если требуется фильтрация/фрагментация таблиц).

Безопасность и рекомендации

  • Используйте SSL для шифрования трафика между мастером и слейвом.
  • Храните приватные ключи с минимальными правами доступа и в безопасном каталоге.
  • Регулярно проверяйте Last_Error и настраивайте оповещения.

Быстрый справочник команд

  • Редактирование конфига: vi /etc/mysql/my.cnf
  • Перезапуск: /etc/init.d/mysql restart
  • Создать базу: CREATE DATABASE exampledb;
  • Импорт дампа: mysql -u root -pyourrootsqlpassword exampledb < snapshot.sql
  • Настроить мастера: CHANGE MASTER TO …;
  • Запустить слейв: START SLAVE;
  • Проверить статус: SHOW SLAVE STATUS \G

Мини-глоссарий

  • master — главный сервер, источник binlog.
  • slave — ведомый сервер, повторяющий операции из binlog.
  • binlog — бинарный журнал MySQL, содержащий изменения данных.

Ресурсы

Короткое резюме

Следуйте шагам: правка my.cnf, создание пустой базы, импорт дампа, CHANGE MASTER TO с параметрами из SHOW MASTER STATUS, START SLAVE, проверка статуса. Если что-то идёт не так — смотрите Last_Error и /var/log/syslog.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро