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

Настройка slave-сервера MySQL для репликации

5 min read Базы данных Обновлено 14 Oct 2025
Настройка slave MySQL для репликации
Настройка slave MySQL для репликации

К чему это приводит

В этой инструкции описаны шаги по настройке slave‑узла MySQL, включая конфигурирование SSL‑подключения к мастеру и проверку статуса репликации. Подойдёт для классической асинхронной репликации с одной базой exampledb.

Что нужно иметь перед началом

  • Доступ root к обоим серверам (мастер и слейв).
  • Пользователь репликации на мастере с привилегией REPLICATION SLAVE.
  • SQL‑дамп актуального состояния базы (snapshot.sql) созданный на мастере.
  • Если используется шифрование: сертификаты на слейве и мастере (CA, client cert/key).
  • IP/hostname мастера и значения из SHOW MASTER STATUS; на мастере.

Шаг 1 — Редактирование конфигурации слейва

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

server2:

vi /etc/mysql/my.cnf

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

Важно: значение server-id должно быть уникальным и отличаться от server-id мастера.

Для наглядности вы можете иметь конфигурацию вида:

[mysqld]
server-id=2
master-connect-retry=60
replicate-do-db=exampledb
# другие параметры по необходимости

Шаг 2 — Перезапуск MySQL

После правки конфигурации перезапустите службу MySQL:

/etc/init.d/mysql restart

Шаг 3 — Создание пустой базы на слейве

Перед импортом дампа создайте пустую базу exampledb на server2:

mysql -u root -p
CREATE DATABASE exampledb;  
quit;

Шаг 4 — Импорт дампа на слейв

Остановите слейв‑процессы локально, поместите дамп в /tmp и импортируйте:

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

(Замените yourrootsqlpassword на реальный пароль root. Если вы используете socket‑аутентификацию или другой метод — подставьте корректную команду.)

Шаг 5 — Настройка связи со свежими значениями мастера

Подключитесь к MySQL на слейве снова:

mysql -u root -p

Выполните команду CHANGE MASTER TO, обязательно подставьте значения 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=106, 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 или hostname мастера.
  • MASTER_USER — пользователь с правами репликации на мастере.
  • MASTER_PASSWORD — его пароль.
  • MASTER_LOG_FILE и MASTER_LOG_POS — значения из SHOW MASTER STATUS; на мастере.
  • MASTERSSL и параметры MASTER_SSL* — включают SSL и указывают пути к сертификатам на слейве.

Если вы не используете SSL, опустите параметры MASTER_SSL, MASTER_SSL_CA, MASTER_SSL_CERT, MASTER_SSL_KEY и укажите только хост/пользователя/пароль/лог-позицию.

Шаг 6 — Запуск слейва и проверка статуса

Запустите процессы репликации:

START SLAVE;

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

SHOW SLAVE STATUS \G

Ожидаемый ключевой вывод (фрагмент):

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: 106  
               Relay_Log_File: mysqld-relay-bin.000002  
                Relay_Log_Pos: 251  
        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: 106  
              Relay_Log_Space: 407  
              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  
Master_SSL_Verify_Server_Cert: No  
                Last_IO_Errno: 0  
                Last_IO_Error:  
               Last_SQL_Errno: 0  
               Last_SQL_Error:  
1 row in set (0.00 sec)  
  
mysql>

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

После проверки выйдите из оболочки:

quit;

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

Тестирование и критерии приёмки

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

  • Slave_IO_Running = Yes и Slave_SQL_Running = Yes.
  • Read_Master_Log_Pos и Exec_Master_Log_Pos соотносятся (Seconds_Behind_Master близко к 0 для тестового обновления).
  • Данные в exampledb на слейве соответствуют мастеру после тестовой операции.

Устранение неполадок — пошаговый чеклист

  1. Если Slave_IO_Running = No — проверьте доступ по сети к MASTER_HOST и правильность пользователя/пароля.
  2. Если Slave_SQL_Running = No — проверьте ошибки в Last_SQL_Error и логи (/var/log/syslog, mysql‑лог).
  3. Если позиция лога не совпадает — убедитесь, что вы импортировали дамп, соответствующий указанной позиции MASTER_LOG_FILE/MASTER_LOG_POS.
  4. При проблемах с SSL — проверьте права и корректность файлов MASTER_SSL_CA, MASTER_SSL_CERT, MASTER_SSL_KEY и что файлы читаются пользователем mysql.
  5. Посмотрите /var/log/syslog и mysql‑логи для подробностей ошибок.

Important: если вы видите ошибки авторизации, временно используйте SHOW SLAVE STATUS \G и попробуйте подключиться к мастеру с теми же учётными данными через mysql client с той же машины.

Когда репликация не подойдёт или даст сбой (когда это не работает)

  • Если на мастере выполняются операции, несовместимые с binlog_format (например, некоторые операции в STATEMENT режиме могут приводить к конфликтам) — рассмотрите использование ROW формата binlog.
  • При репликации между разными версиями MySQL/MariaDB возможны несовместимости; проверьте совместимость версий перед настройкой.
  • Если база очень большая и сеть нестабильна, асинхронная репликация может иметь значительную задержку — используйте специальные инструменты (pt‑table‑sync, логическую репликацию) для синхронизации.

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

  • Ограничьте доступ к порту 3306 на мастере по IP (только доверенные слейвы).
  • Для шифрования трафика включите SSL и используйте проверку сертификата, установив Master_SSL_Verify_Server_Cert=Yes на слейве и корректно настроив CA.
  • Не храните пароли в скриптах в открытом виде; используйте .my.cnf с ограниченным доступом или менеджер секретов.

Факто‑бокс — ключевые значения

  • Порт MySQL: 3306
  • Пример server-id для слейва в инструкции: 2 (должен отличаться от мастера)
  • master-connect-retry: 60 (секунд)
  • Ключевые команды: START SLAVE, SHOW SLAVE STATUS \G, CHANGE MASTER TO

Роли и чеклист для команды (коротко)

  • Администратор БД: проверить server-id, создать пользователя slave_user и предоставить REPLICATION SLAVE.
  • Системный администратор: обеспечить доступ по сети и правильные права на сертификаты.
  • Девопс/разработчик: создать и проверить дамп snapshot.sql, выполнить тестовую запись и сверку данных.

Короткий глоссарий (1 строка)

  • master — сервер, от которого идут все изменения; slave — сервер, который воспроизводит изменения мастера.

Ссылки

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

  1. Настройте уникальный server-id и параметры реплики в /etc/mysql/my.cnf на слейве.
  2. Создайте пустую базу, импортируйте дамп и выполните CHANGE MASTER TO с точными значениями лога.
  3. Запустите START SLAVE и подтвердите, что оба процесса репликации работают.

Проведите тестовое изменение на мастере и убедитесь, что оно появилось на слейве. Если что‑то не так — проверьте логи и поля Last_IO_Error/Last_SQL_Error.

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

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

Добавить план питания в контекстное меню Windows
Windows

Добавить план питания в контекстное меню Windows

Потеря пакетов в Fallout 76 — как исправить
Игры

Потеря пакетов в Fallout 76 — как исправить

Восстановление данных Android: контакты и настройки
Android.

Восстановление данных Android: контакты и настройки

Скачать приватные Reels в Instagram
Инструкции

Скачать приватные Reels в Instagram

Как исправить ошибки WatchGuard VPN в Windows
VPN

Как исправить ошибки WatchGuard VPN в Windows

Как открыть файл M3U8 на любом устройстве
Мультимедиа

Как открыть файл M3U8 на любом устройстве