DBAtlas · Атлас эксплуатации баз данных

Настроить непрерывную репликацию / CDC (переключение без простоя)

Oracle

# CDC-based replication with Oracle GoldenGate (outline)
# 1) Enable supplemental logging on the source:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
# 2) Extract (capture changes from redo) and Replicat (apply to the target) processes:
#   GGSCI> ADD EXTRACT ext1, INTEGRATED TRANLOG, BEGIN NOW
#   GGSCI> ADD REPLICAT rep1, INTEGRATED
# Alternative: initial load with Data Pump + incremental capture with GoldenGate

В Oracle стандартный инструмент CDC без простоя/гетерогенного CDC — Oracle GoldenGate: процесс Extract захватывает изменения из журналов повторного выполнения (redo log), а Replicat применяет их к цели; должно быть включено supplemental logging. Типичная миграция: начальная загрузка через Data Pump, далее GoldenGate передаёт изменения в цель, что позволяет переключиться почти без простоя.

PostgreSQL

-- Source (publisher): create a publication (wal_level must be logical)
CREATE PUBLICATION migration_pub FOR ALL TABLES;

-- Target (subscriber): create a subscription (initial copy + continuous stream)
CREATE SUBSCRIPTION migration_sub
  CONNECTION 'host=source dbname=shop user=repl password=***'
  PUBLICATION migration_pub;

PostgreSQL обеспечивает CDC встроенной логической репликацией: CREATE PUBLICATION на источнике, CREATE SUBSCRIPTION на цели. При запуске подписка копирует существующие данные (initial copy), затем непрерывно передаёт изменения из WAL; требуется wal_level=logical. Для больших/сложных сценариев предпочтительны pglogical или Debezium.

MySQL

-- Source: binlog must be enabled and in ROW format (log_bin, binlog_format=ROW)
-- Grant a replication user: GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

-- Define the source on the target (start from the binlog position of the initial load):
CHANGE REPLICATION SOURCE TO
  SOURCE_HOST='source', SOURCE_USER='repl', SOURCE_PASSWORD='***',
  SOURCE_LOG_FILE='binlog.000001', SOURCE_LOG_POS=1547;
START REPLICA;

В MySQL переключение без простоя выполняется через репликацию на основе binlog. Начальная загрузка снимается через mysqldump --source-data, и фиксируется позиция binlog/GTID; на цели репликация запускается с этой позиции через CHANGE REPLICATION SOURCE TO (синтаксис 8.0.23+; ранее CHANGE MASTER TO). START REPLICA непрерывно применяет изменения. Настройка на основе GTID надёжнее.

SQL Server

-- Option A: Transactional Replication (publisher->distributor->subscriber) — SSMS wizard

-- Option B: Change Data Capture (track changes as tables)
EXEC sys.sp_cdc_enable_db;              -- enable CDC at database level
EXEC sys.sp_cdc_enable_table
  @source_schema = N'dbo', @source_name = N'customer',
  @role_name = NULL;                    -- enable CDC at table level
-- Changes are read from the cdc.dbo_customer_CT table and moved to the target.

В SQL Server два основных пути непрерывной репликации: если нужен прямой поток в цель, настройте Transactional Replication (publisher/subscriber); если изменения будут переноситься собственным ETL, включите Change Data Capture (sp_cdc_enable_db + sp_cdc_enable_table) и читайте из таблиц _CT. Для гетерогенных целей CDC комбинируется с AWS DMS/Debezium.

MongoDB

// Watch changes live with Change Streams (requires a replica set/sharded cluster)
const cs = db.customer.watch([], { fullDocument: "updateLookup" });
while (cs.hasNext()) { printjson(cs.next()); }  // apply to the target

// Official tool for managed cluster-to-cluster replication/migration: mongosync
// mongosync --cluster0 "mongodb://source" --cluster1 "mongodb://target"

В MongoDB для CDC используются Change Streams: db.collection.watch() передаёт события insert/update/delete из oplog в реальном времени для применения к цели (требуется набор реплик). Для полной непрерывной миграции/репликации между кластерами официальный инструмент MongoDB Cluster-to-Cluster Sync — mongosync (не только для Atlas; работает и с самостоятельно управляемыми кластерами) — управляет начальной загрузкой + непрерывной синхронизацией.

Redis

# Make the target instance a replica of the source (live synchronization)
# On the target Redis:
REPLICAOF source_host 6379
# Monitor sync status:
INFO replication   # master_link_status must be up

# Once the cutover is complete, make the target standalone:
REPLICAOF NO ONE

В Redis переключение без простоя выполняется встроенной репликацией: выполните REPLICAOF <source host port> (ранее SLAVEOF) на целевом сервере; цель сначала получает полный RDB, затем постоянно синхронизируется потоком команд. Проверьте master_link_status:up через INFO replication, а после завершения переключения сделайте цель standalone через REPLICAOF NO ONE.

Elasticsearch

# Incremental reindex from the old cluster to the new one within the same version family
POST _reindex?wait_for_completion=false
{ "source": { "remote": { "host": "http://old:9200" }, "index": "customer",
    "query": { "range": { "updated_at": { "gt": "<last-cursor>" } } } },
  "dest": { "index": "customer" } }

# Licensed feature: Cross-Cluster Replication (CCR) — continuous following
# On the target (follower) cluster: PUT /customer/_ccr/follow { "remote_cluster": "old", "leader_index": "customer" }

Настоящая функция непрерывной репликации в Elasticsearch — Cross-Cluster Replication (CCR): целевой кластер следует за leader-индексом на источнике и непрерывно получает изменения (требуется коммерческая/Platinum-лицензия). Без лицензии почти непрерывная синхронизация достигается периодическим remote reindex (инкрементально, по полю времени/последовательности).

Открыть в DBAtlas →