Faça dual-write no antigo e no novo, faça backfill do histórico em background, use CDC para alcançar o tail, verifique com shadow reads, depois vire as leituras atomicamente — com um caminho de rollback em cada passo. Você nunca derruba o app; roda ambos os bancos em paralelo até que o novo seja comprovadamente idêntico, então faz o cutover.
Arquitetura
┌── write ──▶ OLD DB (source of truth) ──CDC (Debezium)──┐
App ───┤ ▼
└── write ──▶ NEW DB ◀──── backfill job (historical rows)
│
shadow reads (compare OLD vs NEW) ─▶ diff metrics ─▶ atomic cutover ─▶ NEW is truth
(flip flag; rollback = flip back)
