Миграция на другую СУБД (гетерогенная)
Oracle
# Oracle -> PostgreSQL: Ora2Pg (schema + data + PL/SQL conversion)
ora2pg -c ora2pg.conf -t TABLE -o schema.sql
ora2pg -c ora2pg.conf -t COPY -o data.sql # data in COPY format
ora2pg -t SHOW_REPORT --estimate_cost # migration cost estimate
# Oracle -> (multiple targets) managed/online: AWS DMS or Oracle GoldenGateДля гетерогенной миграции с Oracle (особенно на PostgreSQL) самый распространённый открытый инструмент — Ora2Pg: он преобразует таблицы, ограничения, PL/SQL и данные в целевой диалект; --estimate_cost оценивает трудоёмкость миграции. Для онлайн-миграции/миграции с малым простоем используются AWS DMS или Oracle GoldenGate (с CDC).
PostgreSQL
# MySQL -> PostgreSQL: pgloader (schema+data+type conversion in one command)
pgloader mysql://app_user:password@source/shop \
postgresql://app_user:password@target/shop
# Also from SQLite/MSSQL sources: with a pgloader ./migration.load script
# For a managed/online PostgreSQL target: AWS DMSpgloader — стандартный инструмент миграции на PostgreSQL с других движков (MySQL, SQLite, MS SQL): по строкам подключения одной командой создаёт схему, сопоставляет типы и быстро копирует данные; свои преобразования/сопоставления типов задаются в скрипте .load. Если источник — Oracle, предпочтителен Ora2Pg; для онлайн-миграции — AWS DMS.
MySQL
# PostgreSQL/Oracle/MSSQL -> MySQL: AWS DMS (managed) is the most common path
# or adapt the source-specific export for MySQL:
# pg_dump --inserts ... | (type/syntax fixes) | mysql shop
# MySQL <-> MariaDB (compatible): mysqldump output loads directly
mysqldump --single-transaction shop | mysql -h target_mariadb shopДля миграции на MySQL с других движков нет одного доминирующего открытого инструмента; самое распространённое решение — AWS DMS (управляемый, с поддержкой CDC) или адаптация дампа источника по синтаксису/типам и загрузка через клиент mysql. MySQL и MariaDB в основном совместимы; вывод mysqldump обычно переносится напрямую.
SQL Server
# SQL Server -> PostgreSQL: with pgloader
pgloader mssql://app_user:password@source/shop \
postgresql://app_user:password@target/shop
# SQL Server -> PostgreSQL compatibility layer: Babelfish for Aurora PostgreSQL
# (runs T-SQL and the TDS protocol on top of PostgreSQL)
# To other targets: SSMA (SQL Server Migration Assistant) or AWS DMSДля миграции с SQL Server на PostgreSQL используется pgloader (источник mssql://); если нужно сохранить T-SQL без изменения приложения, Babelfish for Aurora PostgreSQL предлагает слой совместимости. Инструмент Microsoft SSMA автоматизирует миграцию с других движков (Oracle, MySQL, DB2) на SQL Server. Для онлайн-миграции — AWS DMS.
MongoDB
# Relational <-> MongoDB conversion requires schema mapping (ETL):
# - Relational Migrator (official MongoDB tool): maps tables to the document model
# - or generate JSON from the source -> load with mongoimport
mongoexport --db=shop --collection=customer --type=csv --fields=id,name > c.csv
# (To an SQL target: mongoexport CSV -> relational COPY/LOAD DATA)Миграция между MongoDB и SQL-движками требует преобразования модели строка<->документ (ETL); автоматической единой команды нет. Из SQL в MongoDB MongoDB Relational Migrator сопоставляет таблицы со схемой документов; в простых случаях сгенерируйте CSV/JSON из источника и загрузите через mongoimport. В обратном направлении вывод mongoexport загружается в целевую реляционную таблицу через COPY/LOAD DATA.
Redis
# With RIOT (Redis Input/Output Tools), to/from Redis from other sources:
# Relational -> Redis:
riot db-import --jdbc-url "jdbc:postgresql://host/shop" \
--sql "SELECT * FROM customer" hset --keyspace customer --keys id
# Redis -> another Redis / file: riot replicate / riot file-exportВ гетерогенной миграции Redis обычно выступает слоем кэша как цель/источник; для загрузки данных в Redis из реляционных или файловых источников используется официальный инструмент Redis RIOT (db-import сопоставляет результат SQL со структурами HSET/SET). Для Redis -> Redis или в файл есть команды riot replicate / file-export.
Elasticsearch
# Relational/other source -> Elasticsearch: Logstash (JDBC input)
# logstash.conf: input { jdbc { statement => "SELECT * FROM customer" } }
# output { elasticsearch { index => "customer" } }
# ES -> ES (version/cluster upgrade): reindex from a remote source
POST _reindex
{ "source": { "remote": { "host": "http://old:9200" }, "index": "customer" },
"dest": { "index": "customer" } }Самый распространённый инструмент миграции из других БД в Elasticsearch — Logstash (вход JDBC/file -> выход elasticsearch); используются также собственные коннекторы/Beats Elastic. При переходе со старого кластера Elasticsearch на новый обычен remote reindex (_reindex с источником 'remote'); на цели должен быть задан reindex.remote.whitelist.