La migrazione del database è il processo di migrazione dei dati da uno o più database di origine a uno o più database di destinazione utilizzando un servizio o uno strumento. Esistono diversi tipi di migrazione. Puoi migrare da una tecnologia a un'altra, a un data center diverso o al cloud, o anche nello stesso luogo e con la stessa tecnologia su un'altra macchina. Lo strumento migliore per una migrazione PostgreSQL dipende dal tipo di migrazione e da requisiti come disponibilità o tolleranza ai tempi di inattività, e talvolta è difficile trovare lo strumento migliore per svolgere il lavoro.
In questo blog menzioneremo alcuni strumenti open source per migrazioni PostgreSQL con una breve panoramica di ciascuna opzione.
Strumenti di migrazione di backup e ripristino
Questo potrebbe essere il modo più semplice per eseguire una migrazione dei dati, ma anche il più lento in termini di Recovery Time Objective (RTO). L'utilizzo di questo metodo significa che verrà eseguito un backup dal database corrente, molto probabilmente un backup logico se si desidera ripristinarlo in una versione o infrastruttura diversa, copiare il dump e ripristinarlo nel nuovo server. A seconda della quantità di dati, potrebbe essere necessario molto tempo, ma è il modo base per migrare il database. Vediamo alcuni strumenti per questo.
pgdump/pgdumpall
pg_dump è un'utilità per il backup di un singolo database PostgreSQL. Esegue backup coerenti anche se il database viene utilizzato contemporaneamente, poiché non blocca altri utenti. Per eseguire il backup di un intero cluster o per eseguire il backup di oggetti globali comuni a tutti i database in un cluster (come ruoli e tablespace), è necessario utilizzare invece pg_dumpall.
I dump possono essere emessi in formato script o file di archivio. I dump di script sono file di testo normale contenenti i comandi SQL necessari per ricostruire il database nello stato in cui si trovava al momento del salvataggio. Può essere utilizzato per ricostruire il database su altre macchine, altre architetture o anche su altri prodotti di database SQL.
pg_basebackup
pg_basebackup viene utilizzato per eseguire un backup di base di un cluster di database PostgreSQL in esecuzione. Il backup viene eseguito senza influenzare altri client di database e può essere utilizzato sia per PITR (Point-In-Time-Recovery) sia come punto di partenza di un server di standby di Streaming Replication. Esegue una copia esatta dei file del cluster di database assicurandosi che il server entri e esca automaticamente dalla modalità di backup. Vengono sempre eseguiti backup dell'intero cluster di database; non è possibile eseguire il backup di singoli database o oggetti di database.
pgBackRest
pgBackRest è uno strumento di backup open source che crea backup fisici con alcuni miglioramenti rispetto al classico strumento pg_basebackup. È possibile utilizzare pgBackRest per eseguire una copia iniziale del database per la replica in streaming utilizzando un backup esistente oppure è possibile utilizzare l'opzione delta per ricostruire un vecchio server di standby.
Alcune delle caratteristiche più importanti di pgBackRest sono:
- Backup e ripristino in parallelo
- Operazione locale o remota
- Backup completi, incrementali e differenziali
- Rotazione backup e scadenza archivio
- Verifica dell'integrità del backup
- Riprendi backup
- Ripristino Delta
- Crittografia
Strumenti di migrazione PostgreSQL
Invece di utilizzare uno strumento di backup, esistono diverse utilità per eseguire questa migrazione in modo più rapido, con metodi diversi. Può utilizzare un approccio ETL o persino configurare la replica tra diverse tecnologie di database utilizzando lo stesso concetto su Estrai - Trasforma - Carica. Vediamo alcuni di questi strumenti.
pg_camaleonte
pg_chameleon è un sistema di replica da MySQL a PostgreSQL. Può connettersi al protocollo di replica MySQL e replicare le modifiche ai dati in PostgreSQL. Sia che l'utente debba configurare una replica permanente tra MySQL e PostgreSQL o eseguire una migrazione del motore, pg_chameleon è una buona opzione per l'attività.
Le caratteristiche principali sono:
- Leggi da più schemi MySQL e ripristinali in un database PostgreSQL di destinazione
- Imposta PostgreSQL in modo che funga da slave MySQL
- Supporto DDL di base (CREATE/DROP/ALTER TABLE, DROP PRIMARY KEY/TRUNCATE, RENAME)
- Le tabelle che generano errori vengono automaticamente escluse dalla replica
- Possibilità di aggiornare singole tabelle o singoli schemi
- Stacca la replica da MySQL per il supporto della migrazione
- Sostituzione del tipo di dati
- Processo init_replica demonizzato
- Processo di replica daemonizzato con due sottoprocessi separati, uno per la lettura e uno per la riproduzione
pgloader
pgloader carica i dati da varie fonti in PostgreSQL. Può trasformare i dati che legge al volo e invia SQL grezzo prima e dopo il caricamento. Utilizza il protocollo COPY PostgreSQL per trasmettere i dati al server e gestisce gli errori compilando una coppia di file require.dat e require.log.
Grazie alla possibilità di caricare i dati direttamente da un'origine database, pgloader supporta anche le migrazioni da altri prodotti a PostgreSQL. In questa modalità operativa, pgloader gestisce sia lo schema che le parti di dati della migrazione, in un unico comando non presidiato, consentendo di implementare la migrazione continua.
Le caratteristiche principali sono:
- Molti formati di origine supportati, come file CSV, db3 e IBM IXF
- Trasformazione al volo dei dati
- Proiezioni Full Field
- Lettura da file compressi (zip, tar e gzip)
- Supporto HTTP(S)
- Scoperta dello schema di destinazione
- In caso di errore, interrompi/riprendi le opzioni successive
- Comandi pre/post SQL
- Migrazione con un comando
- Scoperta dello schema
- Regole di casting definite dall'utente
- Migrazioni parziali incluse/escluse tabelle
- Schema o solo dati
- Viste materializzate o riscrittura degli schemi al volo
- Migrazione continua
Ora2Pg
Ora2Pg è uno strumento gratuito utilizzato per migrare un database Oracle o MySQL su uno schema compatibile con PostgreSQL. Collega il tuo database corrente, lo scansiona ed estrae la sua struttura o dati, quindi genera script SQL che puoi caricare nel tuo database PostgreSQL.
Le caratteristiche principali sono:
- Esporta lo schema completo del database (tabelle, viste, sequenze, indici), con chiave esterna univoca, primaria, e vincoli di controllo
- Esporta sovvenzioni/privilegi per utenti e gruppi
- Esporta partizioni e sottopartizioni intervallo/elenco
- Esporta una selezione di tabelle (specificando i nomi delle tabelle).
- Esporta funzioni predefinite, trigger, procedure, pacchetti e corpi dei pacchetti
- Esporta i dati completi o segui una clausola WHERE
- Supporto completo dell'oggetto Oracle BLOB come PG BYTEA
- Esporta viste Oracle come tabelle PG
- Esporta tipi definiti dall'utente Oracle
- Fornire alcune conversioni automatiche di base del codice PLSQL in PLPGSQL
- Esporta le tabelle Oracle come tabelle del wrapper di dati esterni
- Esporta vista materializzata
- Mostra un report dettagliato del contenuto di un database Oracle
- Valutazione dei costi di migrazione di un database Oracle
- Valutazione del livello di difficoltà di migrazione di un database Oracle
- Valutazione dei costi di migrazione del codice PL/SQL da un file
- Valutazione dei costi di migrazione delle query Oracle SQL archiviate in un file
- Genera file XML ktr da utilizzare con Penthalo Data Integrator (Kettle)
- Esporta il localizzatore Oracle e le geometrie spaziali in PostGis
- Esporta DBLINK come Oracle FDW
- Esporta SINONIMI come viste
- Esporta DIRECTORY come tabella o directory esterna per estensione file_esterno
- Esportazione completa di MySQL proprio come il database Oracle
Ci sono più opzioni ETL disponibili, come Pentaho o Talen, ma quelle sono più orientate all'integrazione o alla gestione dei dati rispetto alla migrazione, quindi non le descriveremo qui per evitare un ampio post sul blog. Puoi trovare maggiori informazioni qui.
Replica logica PostgreSQL per migrazioni
La replica logica è un metodo per replicare gli oggetti dati e le relative modifiche, in base alla loro identità di replica (di solito una chiave primaria). Si basa su una modalità di pubblicazione e sottoscrizione, in cui uno o più abbonati si iscrivono a una o più pubblicazioni su un nodo editore.
Una pubblicazione è un insieme di modifiche generate da una tabella o da un gruppo di tabelle (denominato anche insieme di replica). Il nodo in cui è definita una pubblicazione è denominato editore. Una sottoscrizione è il lato a valle della replica logica. Il nodo in cui è definita una sottoscrizione è denominato abbonato e definisce la connessione a un altro database e insieme di pubblicazioni (una o più) a cui desidera iscriversi. Gli abbonati estraggono i dati dalle pubblicazioni a cui si iscrivono.
Questo metodo può essere utilizzato per migrare o aggiornare il tuo database PostgreSQL.
Per ulteriori informazioni, puoi fare riferimento al post del blog corrispondente sull'aggiornamento di PostgreSQL senza tempi di inattività.
Conclusione
Le migrazioni sono un compito difficile e rischioso, poiché stai spostando o trasformando dati da una (o più) origini a una destinazione (o più di una), ed è ancora peggio se la tua destinazione è un motore diverso. Quindi, dovrai avere un buon piano, con passaggi dettagliati e, naturalmente, un ambiente di test per testare tutte le fasi della migrazione. In questo blog abbiamo menzionato alcuni strumenti per aiutare con questa attività e la scelta migliore dipenderà dai tuoi requisiti sulla disponibilità del tuo sistema.