Настройка ведомого сервера 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 restart2. Создание пустой базы и импорт дампа
На сервере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 -p3. Выполнение 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, содержащий изменения данных.
Ресурсы
- MySQL: http://www.mysql.com/
- Debian: http://www.debian.org/
Короткое резюме
Следуйте шагам: правка my.cnf, создание пустой базы, импорт дампа, CHANGE MASTER TO с параметрами из SHOW MASTER STATUS, START SLAVE, проверка статуса. Если что-то идёт не так — смотрите Last_Error и /var/log/syslog.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента