MySQL репликация Master-Slave на VirtualBox

Автор: | 14.07.2020

Репликация используется для повышения отказоустойчивости сервисов и служб, а также для распределения нагрузки на базу данных между серверами (масштабирование).

Мастер, в основном, используется для операций изменения данных (INSERT, UPDATE, DELETE), но может также использоваться и при чтении данных (SELECT). Все изменения постоянно копируются на слейв.

Слейв сервер обрабатывает все запросы на чтение дынных.

Поэтому в приложении должно быть два соединения с базой данных — для мастера, и для слейва.

При репликации можно использовать более одного слейва, но не рекомендуется использовать больее 20 слейв-серверов на один мастер-сервер. Выбор слейва будет происходить рандомным образом.

Из-за асинхронности репликации данные на слейве могут обновляться с небольшим запозданием. Поэтому при последовательных операциях (UPDATE, SELECT) рекомендуется использовать чтение с мастер-сервера.

Репликация настраивается в несколько этапов.

Для примера мы будем использовать мастер-сервер под Windows с MySQL версии 5.7, а для слейва возьмем сервер под Ubuntu 18.04 с MySQL версии 5.7 развернутый на VirtualBox. Настройка не будет отличаться если оба сервера будут на Ubuntu или Windows.

Итак, приступим, ip-адреса наших серверов:

  • Мастер-сервер 192.168.0.101
  • Слейв-сервер 192.168.0.102

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

Шаг 1.

На мастер-сервере необходимо внести изменения в конфигурационный файл my.ini. При установки по умолчанию для Windows этот файл находится по пути:

  • c:\ProgramData\MySQL\MySQL Server 5.7\my.ini

для Ubuntu это будет файл my.cnf по пути:

  • /etc/mysql/my.cnf

Перезагружаем наш сервер. В Windows это можно сделать через вызов служб:

  • win+R набираем services.msc

в Ubuntu

  • sudo systemctl restart mysql

Шаг 2.

Необходимо настроить права для репликации. Для этого создадим пользователя, в консоли mysql:

Затем блокируем все таблицы в базе:

Смотрим статус мастер-сервера:

значения из колонок File и Position мы будем использовать при запуске слейва (test — название реплицируемой БД, используйте вместо него свое)

Шаг 3.

Сделаем дамп нашей базы данных воспользовавшись утилитой mysqldump, в командной строке наберем:

Далее зайдем в консоль mysql мастер-сервера и разблокируем таблицы:

Шаг 4.

Зайдем в консоль mysql на слейв-сервере (Ubuntu) и создадим базу данных с таким же именем как и на мастере:

далее, там же в консоли mysql, загружаем дамп базы:

, также это можно сделать из командной строки bash:

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

Шаг 5.

Внесем изменения в my.cnf на слейв-сервере:

Перезагружаем слейв-сервер:

Шаг 6.

Теперь можно включить репликацию, указав параметры подключения к мастеру, в консоли mysql на слейве (значения master_log_file и master_log_pos берем у мастер-сервера, смотри выше):

Запускаем репликацию на слейве, в консоли mysql:

Проверяем работу репликации на слейв-сервере:

Смотрим, значения Slave_IO_Running и Slave_SQL_Running должны быть Yes:

Приостановить репликацию на слейв-сервере:

Забыть позицию репликации и очистить bin логи на слейве:

, для того чтобы запустить репликацию по новой указываем слейву откуда ему нужно ее начать, указываем позицию, на которой остановились:

Команда RESET SLAVE удаляет master.info, relay-log.info и все файлы relay логов.