Что такое репликация в базах данных и какие задачи она решает?

«Что такое репликация в базах данных и какие задачи она решает?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Основные задачи, решаемые репликацией:

Задача Описание
Повышение доступности и отказоустойчивости При сбое мастера одна из реплик может быть быстро назначена новой основной БД (failover).
Масштабирование чтения Запросы на чтение (SELECT) распределяются по репликам, разгружая мастер для операций записи.
Географическое распределение Размещение реплик ближе к пользователям в разных регионах снижает сетевую задержку (latency).
Аналитика и бэкапы Резервные копии и тяжелые аналитические запросы выполняются на репликах, не влияя на основную OLTP-нагрузку.

Типы репликации:

  • Синхронная: Мастер ждет подтверждения записи от всех реплик перед ответом клиенту. Гарантирует консистентность, но снижает производительность.
  • Асинхронная: Мастер не ждет реплик. Выше производительность, но возможна потеря данных при сбое мастера (окно расхождения).

Базовый принцип (на примере логической репликации):

  1. Мастер записывает каждое изменение данных в бинарный лог (binlog, WAL).
  2. Реплика подключается к мастеру и запрашивает копию бинарного лога.
  3. Реплика применяет полученные изменения (SQL-запросы или операции с данными) локально в том же порядке.

Пример команды для инициирования репликации в MySQL:

-- На реплике
CHANGE REPLICATION SOURCE TO
  SOURCE_HOST='master_host',
  SOURCE_USER='replica_user',
  SOURCE_PASSWORD='password',
  SOURCE_LOG_FILE='binlog.000002',
  SOURCE_LOG_POS=856;

START REPLICA;