Databasemigratie is het proces van het migreren van gegevens van een of meer brondatabases naar een of meer doeldatabases met behulp van een service of tool. Er zijn verschillende soorten migraties. U kunt migreren van een technologie naar een andere, naar een ander datacenter of naar de cloud, of zelfs op dezelfde plaats en dezelfde technologie naar een andere machine. De beste tool voor een PostgreSQL-migratie hangt af van het type migratie en vereisten zoals beschikbaarheid of downtimetolerantie, en soms is het moeilijk om de beste tool te vinden om de klus te klaren.
In deze blog zullen we enkele open-source tools voor PostgreSQL-migraties noemen met een kort overzicht van elke optie.
Maak een back-up en herstel migratietools
Dit zou de gemakkelijkste manier kunnen zijn om een gegevensmigratie uit te voeren, maar ook de langzaamste in termen van Recovery Time Objective (RTO). Als u deze methode gebruikt, betekent dit dat u een back-up maakt van uw huidige database, hoogstwaarschijnlijk een logische back-up als u deze in een andere versie of infrastructuur wilt herstellen, de dump kopieert en deze terugzet op de nieuwe server. Afhankelijk van de hoeveelheid gegevens kan het veel tijd kosten, maar het is de basismanier om uw database te migreren. Laten we een paar tools hiervoor bekijken.
pgdump/pgdumpall
pg_dump is een hulpprogramma voor het maken van back-ups van een enkele PostgreSQL-database. Het maakt consistente back-ups, zelfs als de database gelijktijdig wordt gebruikt, omdat het andere gebruikers niet blokkeert. Om een back-up te maken van een volledig cluster, of om een back-up te maken van globale objecten die gemeenschappelijk zijn voor alle databases in een cluster (zoals rollen en tabelruimten), moet u in plaats daarvan pg_dumpall gebruiken.
Dumps kunnen worden uitgevoerd in script- of archiefbestandsindelingen. Scriptdumps zijn platte-tekstbestanden die de SQL-opdrachten bevatten die nodig zijn om de database te reconstrueren in de staat waarin deze zich bevond op het moment dat deze werd opgeslagen. Het kan worden gebruikt om de database op andere machines, andere architecturen of zelfs op andere SQL-databaseproducten te reconstrueren.
pg_basebackup
pg_basebackup wordt gebruikt om een basisback-up te maken van een actief PostgreSQL-databasecluster. De back-up wordt gemaakt zonder andere databaseclients te beïnvloeden en kan zowel voor PITR (Point-In-Time-Recovery) als als startpunt van een Streaming Replication standby-server worden gebruikt. Het maakt een exacte kopie van de bestanden van het databasecluster en zorgt ervoor dat de server automatisch in en uit de back-upmodus wordt gezet. Er worden altijd back-ups gemaakt van het gehele databasecluster; het is niet mogelijk om een back-up te maken van individuele databases of database-objecten.
pgBackRest
pgBackRest is een open-source back-uptool die fysieke back-ups maakt met enkele verbeteringen in vergelijking met de klassieke pg_basebackup-tool. U kunt pgBackRest gebruiken om een eerste databasekopie voor streamingreplicatie uit te voeren met behulp van een bestaande back-up, of u kunt de delta-optie gebruiken om een oude stand-byserver opnieuw op te bouwen.
Enkele van de belangrijkste pgBackRest-functies zijn:
- Parallelle back-up en herstel
- Lokale of externe bediening
- Volledige, incrementele en differentiële back-ups
- Back-uprotatie en vervaldatum van archief
- Back-up integriteitscontrole
- Back-up hervatten
- Delta herstellen
- Encryptie
PostgreSQL-migratietools
In plaats van een back-uptool te gebruiken, zijn er verschillende hulpprogramma's om deze migratie op een snellere manier uit te voeren, met verschillende methoden. Het kan een ETL-aanpak gebruiken, of zelfs replicatie configureren tussen verschillende databasetechnologieën met hetzelfde concept over Extract - Transform - Load. Laten we eens kijken naar enkele van deze tools.
pg_chameleon
pg_chameleon is een MySQL naar PostgreSQL replicasysteem. Het kan verbinding maken met het MySQL-replicatieprotocol en de gegevenswijzigingen in PostgreSQL repliceren. Of de gebruiker nu een permanente replica tussen MySQL en PostgreSQL moet opzetten of een enginemigratie moet uitvoeren, pg_chameleon is een goede optie voor deze taak.
De belangrijkste kenmerken zijn:
- Lees van meerdere MySQL-schema's en herstel ze in een doel-PostgreSQL-database
- PostgreSQL instellen om als MySQL-slave te fungeren
- Basis DDL-ondersteuning (CREATE/DROP/ALTER TABLE, DROP PRIMARY KEY/TRUNCATE, RENAME)
- Tabellen die fouten genereren, worden automatisch uitgesloten van de replica
- Mogelijkheid om enkele tabellen of enkele schema's te vernieuwen
- Replica loskoppelen van MySQL voor ondersteuning bij migratie
- Gegevenstype overschrijven
- Gedaemoniseerd init_replica-proces
- Gedemoniseerd replicaproces met twee afzonderlijke subprocessen, één voor het lezen en één voor het opnieuw afspelen
pglader
pgloader laadt gegevens uit verschillende bronnen in PostgreSQL. Het kan de gegevens die het leest on-the-fly transformeren en onbewerkte SQL voor en na het laden indienen. Het gebruikt het COPY PostgreSQL-protocol om de gegevens naar de server te streamen en beheert fouten door een paar reject.dat- en reject.log-bestanden in te vullen.
Dankzij de mogelijkheid om gegevens rechtstreeks uit een databasebron te laden, ondersteunt pgloader ook migraties van andere producten naar PostgreSQL. In deze manier van werken verwerkt pgloader zowel het schema als de gegevens van de migratie, in een enkele onbemande opdracht, waardoor continue migratie kan worden geïmplementeerd.
De belangrijkste kenmerken zijn:
- Veel bronformaten ondersteund, zoals CSV-, db3- en IBM IXF-bestanden
- On-the-fly gegevenstransformatie
- Volledige veldprojecties
- Lezen uit gecomprimeerde bestanden (zip, tar en gzip)
- HTTP(S)-ondersteuning
- Ontdekking van doelschema
- Bij fout volgende opties stoppen/hervatten
- Pre/Post SQL-commando's
- Migratie met één commando
- Schema-ontdekking
- Door de gebruiker gedefinieerde castingregels
- Gedeeltelijke migraties inclusief/exclusief tabellen
- Alleen schema of gegevens
- Gematerialiseerde weergaven of schema herschrijven on-the-fly
- Continue migratie
Ora2Pg
Ora2Pg is een gratis tool die wordt gebruikt om een Oracle- of MySQL-database te migreren naar een PostgreSQL-compatibel schema. Het verbindt uw huidige database, scant deze en extraheert de structuur of gegevens, en genereert vervolgens SQL-scripts die u in uw PostgreSQL-database kunt laden.
De belangrijkste kenmerken zijn:
- Volledig databaseschema exporteren (tabellen, views, reeksen, indexen), met unieke, primaire, refererende sleutel en controlebeperkingen
- Exporteer subsidies/privileges voor gebruikers en groepen
- Bereik/lijstpartities en subpartities exporteren
- Een tabelselectie exporteren (door de tabelnamen op te geven).
- Vooraf gedefinieerde functies, triggers, procedures, pakketten en pakkethoofdstukken exporteren
- Volledige gegevens exporteren of een WHERE-clausule volgen
- Volledige ondersteuning van Oracle BLOB-object als PG BYTEA
- Oracle-weergaven exporteren als PG-tabellen
- Door de gebruiker gedefinieerde Oracle-typen exporteren
- Zorg voor een aantal automatische basisconversie van PLSQL-code naar PLPGSQL
- Oracle-tabellen exporteren als externe data-wrappertabellen
- Gerealiseerde weergave exporteren
- Toon een gedetailleerd rapport van de inhoud van een Oracle-database
- Migratiekostenbeoordeling van een Oracle-database
- Migratie moeilijkheidsgraad beoordeling van een Oracle-database
- Migratiekostenbeoordeling van PL/SQL-code uit een bestand
- Migratiekostenbeoordeling van Oracle SQL-query's opgeslagen in een bestand
- Genereer XML ktr-bestanden voor gebruik met Penthalo Data Integrator (Kettle)
- Oracle locator en ruimtelijke geometrieën exporteren naar PostGis
- DBLINK exporteren als Oracle FDW
- SYNONYMS exporteren als weergaven
- DIRECTORY exporteren als een externe tabel of map voor de extensie external_file
- Volledige MySQL-export net als Oracle-database
Er zijn meer ETL-opties beschikbaar, zoals Pentaho of Talen, maar die zijn meer gericht op data-integratie of databeheer dan op migratie, dus we zullen ze hier niet beschrijven om een uitgebreide blogpost te vermijden. Meer informatie vind je hier.
Logische PostgreSQL-replicatie voor migraties
Logische replicatie is een methode voor het repliceren van gegevensobjecten en hun wijzigingen op basis van hun replicatie-identiteit (meestal een primaire sleutel). Het is gebaseerd op een publicatie- en abonnementsmodus, waarbij een of meer abonnees zich abonneren op een of meer publicaties op een uitgeversknooppunt.
Een publicatie is een reeks wijzigingen die zijn gegenereerd op basis van een tabel of een groep tabellen (ook wel een replicatieset genoemd). Het knooppunt waar een publicatie is gedefinieerd, wordt uitgever genoemd. Een abonnement is de downstream-kant van logische replicatie. Het knooppunt waar een abonnement is gedefinieerd, wordt de abonnee genoemd en definieert de verbinding met een andere database en reeks publicaties (een of meer) waarop het zich wil abonneren. Abonnees halen gegevens uit de publicaties waarop ze geabonneerd zijn.
Deze methode kan worden gebruikt voor het migreren of upgraden van uw PostgreSQL-database.
Voor meer informatie kun je de corresponderende blogpost raadplegen over het upgraden van PostgreSQL zonder downtime.
Conclusie
Migraties zijn een moeilijke en risicovolle taak, aangezien u gegevens verplaatst of transformeert van een (of meer) bron naar een doel (of meer dan één), en het is nog erger als uw doel een andere motor. Je hebt dus een goed plan nodig, met gedetailleerde stappen, en natuurlijk een testomgeving om alle fasen van de migratie te testen. In deze blog hebben we enkele hulpmiddelen genoemd om u bij deze taak te helpen, en de beste keuze hangt af van uw vereisten met betrekking tot de beschikbaarheid van uw systeem.