Настройка 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 на слейве соответствуют мастеру после тестовой операции.
Устранение неполадок — пошаговый чеклист
- Если Slave_IO_Running = No — проверьте доступ по сети к MASTER_HOST и правильность пользователя/пароля.
- Если Slave_SQL_Running = No — проверьте ошибки в Last_SQL_Error и логи (/var/log/syslog, mysql‑лог).
- Если позиция лога не совпадает — убедитесь, что вы импортировали дамп, соответствующий указанной позиции MASTER_LOG_FILE/MASTER_LOG_POS.
- При проблемах с SSL — проверьте права и корректность файлов MASTER_SSL_CA, MASTER_SSL_CERT, MASTER_SSL_KEY и что файлы читаются пользователем mysql.
- Посмотрите /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 — сервер, который воспроизводит изменения мастера.
Ссылки
- MySQL: http://www.mysql.com/
- Debian: http://www.debian.org/
Краткое резюме
- Настройте уникальный server-id и параметры реплики в /etc/mysql/my.cnf на слейве.
- Создайте пустую базу, импортируйте дамп и выполните CHANGE MASTER TO с точными значениями лога.
- Запустите START SLAVE и подтвердите, что оба процесса репликации работают.
Проведите тестовое изменение на мастере и убедитесь, что оно появилось на слейве. Если что‑то не так — проверьте логи и поля Last_IO_Error/Last_SQL_Error.
Похожие материалы
Добавить план питания в контекстное меню Windows

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

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

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