Databasemigrering er processen med at migrere data fra en eller flere kildedatabaser til en eller flere måldatabaser ved at bruge en tjeneste eller et værktøj. Der er forskellige typer migrationer. Du kan migrere fra en teknologi til en anden, til et andet datacenter eller til skyen, eller endda på samme sted og samme teknologi til en anden maskine. Det bedste værktøj til en PostgreSQL-migrering afhænger af typen af migrering og krav som tilgængelighed eller nedetidstolerance, og nogle gange er det svært at finde det bedste værktøj til at udføre jobbet.
I denne blog vil vi nævne nogle open source-værktøjer til PostgreSQL-migrering med en kort oversigt over hver mulighed.
Migreringsværktøjer til sikkerhedskopiering og gendannelse
Dette kunne være den nemmeste måde at udføre en datamigrering på, men også den langsomste med hensyn til Recovery Time Objective (RTO). Brug af denne metode betyder, at du tager en sikkerhedskopi fra din nuværende database, sandsynligvis en logisk sikkerhedskopi, hvis du vil gendanne den i en anden version eller infrastruktur, kopiere dumpet og gendanne den på den nye server. Afhængigt af mængden af data kan det tage meget tid, men det er den grundlæggende måde at migrere din database på. Lad os se nogle værktøjer til dette.
pgdump/pgdumpall
pg_dump er et værktøj til sikkerhedskopiering af en enkelt PostgreSQL-database. Det laver konsekvente sikkerhedskopier, selvom databasen bruges samtidigt, da det ikke blokerer andre brugere. For at tage backup af en hel klynge eller for at sikkerhedskopiere globale objekter, der er fælles for alle databaser i en klynge (såsom roller og tablespaces), skal du bruge pg_dumpall i stedet.
Dumps kan udskrives i script- eller arkivfilformater. Script-dumps er almindelige tekstfiler, der indeholder de SQL-kommandoer, der kræves for at rekonstruere databasen til den tilstand, den var i, da den blev gemt. Det kan bruges til at rekonstruere databasen på andre maskiner, andre arkitekturer eller endda på andre SQL-databaseprodukter.
pg_basebackup
pg_basebackup bruges til at tage en basis backup af en kørende PostgreSQL databaseklynge. Sikkerhedskopien tages uden at påvirke andre databaseklienter og kan bruges til både PITR (Point-In-Time-Recovery) og som udgangspunkt for en Streaming Replication-standbyserver. Den laver en nøjagtig kopi af databaseklyngens filer, mens den sørger for, at serveren automatisk sættes i og ud af backuptilstand. Der tages altid sikkerhedskopier af hele databaseklyngen; det er ikke muligt at sikkerhedskopiere individuelle databaser eller databaseobjekter.
pgBackRest
pgBackRest er et open source-sikkerhedskopieringsværktøj, der laver fysiske sikkerhedskopier med nogle forbedringer sammenlignet med det klassiske pg_basebackup-værktøj. Du kan bruge pgBackRest til at udføre en indledende databasekopi til streaming-replikering ved at bruge en eksisterende backup, eller du kan bruge delta-indstillingen til at genopbygge en gammel standby-server.
Nogle af de vigtigste pgBackRest-funktioner er:
- Parallel sikkerhedskopiering og gendannelse
- Lokal eller fjernbetjening
- Fuld, inkrementel og differentiel sikkerhedskopiering
- Sikkerhedskopieringsrotation og arkivudløb
- Tjek af sikkerhedskopieringsintegritet
- Backup-CV
- Delta-gendannelse
- Kryptering
PostgreSQL-migreringsværktøjer
I stedet for at bruge et sikkerhedskopieringsværktøj er der forskellige værktøjer til at udføre denne migrering på en hurtigere måde med forskellige metoder. Det kan bruge en ETL-tilgang eller endda konfigurere replikering mellem forskellige databaseteknologier ved hjælp af det samme koncept om Udtræk - Transform - Indlæs. Lad os se nogle af disse værktøjer.
pg_chameleon
pg_chameleon er et MySQL til PostgreSQL replika-system. Den kan oprette forbindelse til MySQL-replikeringsprotokollen og replikere dataændringerne i PostgreSQL. Uanset om brugeren skal konfigurere en permanent replika mellem MySQL og PostgreSQL eller udføre en motormigrering, er pg_chameleon en god mulighed for opgaven.
De vigtigste funktioner er:
- Læs fra flere MySQL-skemaer og gendan dem i en mål-PostgreSQL-database
- Konfigurer PostgreSQL til at fungere som MySQL-slave
- Grundlæggende DDL-understøttelse (CREATE/DROP/ALTER TABLE, DROP PRIMARY KEY/TRUNCATE, RENAME)
- Tabeller, der genererer fejl, udelukkes automatisk fra replikaen
- Mulighed for at opdatere enkelte tabeller eller enkelte skemaer
- Afmonter replika fra MySQL til migreringsunderstøttelse
- Tilsidesættelse af datatype
- Dæmoniseret init_replica-proces
- Dæmoniseret replikaproces med to separate underprocesser, én til læsning og én til genafspilning
pgloader
pgloader indlæser data fra forskellige kilder til PostgreSQL. Den kan transformere de data, den læser på farten og indsender rå SQL før og efter indlæsningen. Den bruger COPY PostgreSQL-protokollen til at streame data til serveren og håndterer fejl ved at udfylde et par reject.dat- og reject.log-filer.
Takket være at kunne indlæse data direkte fra en databasekilde, understøtter pgloader også migreringer fra andre produkter til PostgreSQL. I denne driftstilstand håndterer pgloader både skema- og datadelen af migreringen i en enkelt ubemandet kommando, hvilket gør det muligt at implementere Kontinuerlig Migration.
De vigtigste funktioner er:
- Mange understøttede kildeformater, såsom CSV-, db3- og IBM IXF-filer
- On the fly datatransformation
- Fuld feltprojektioner
- Læsning fra komprimerede filer (zip, tar og gzip)
- HTTP(S)-understøttelse
- Opdagelse af målskema
- Ved fejl stop/genoptag næste muligheder
- Pre/Post SQL-kommandoer
- én-kommando migrering
- Skemaopdagelse
- Brugerdefinerede castingregler
- Delvise migreringer inklusive/ekskluderer tabeller
- Kun skema eller data
- Materialiserede visninger, eller omskrivning af skemaet på farten
- Kontinuerlig migration
Ora2Pg
Ora2Pg er et gratis værktøj, der bruges til at migrere en Oracle- eller MySQL-database til et PostgreSQL-kompatibelt skema. Den forbinder din nuværende database, scanner den og udtrækker dens struktur eller data, den genererer derefter SQL-scripts, som du kan indlæse i din PostgreSQL-database.
De vigtigste funktioner er:
- Eksporter komplet databaseskema (tabeller, visninger, sekvenser, indekser) med unikke, primære, fremmednøgle- og kontrolbegrænsninger
- Eksportér bevillinger/privilegier til brugere og grupper
- Eksporter område-/listepartitioner og underpartitioner
- Eksporter et tabelvalg (ved at angive tabelnavnene).
- Eksportér foruddefinerede funktioner, triggere, procedurer, pakker og pakkelegemer
- Eksporter alle data, eller følg en WHERE-klausul
- Fuld understøttelse af Oracle BLOB-objekt som PG BYTEA
- Eksporter Oracle-visninger som PG-tabeller
- Eksportér Oracle brugerdefinerede typer
- Giv en grundlæggende automatisk konvertering af PLSQL-kode til PLPGSQL
- Eksporter Oracle-tabeller som udenlandske dataindpakningstabeller
- Eksportér materialiseret visning
- Vis en detaljeret rapport over et Oracle-databaseindhold
- Migrationsomkostningsvurdering af en Oracle-database
- Migrationssværhedsgradsvurdering af en Oracle-database
- Migrationsomkostningsvurdering af PL/SQL-kode fra en fil
- Evaluering af migrationsomkostninger af Oracle SQL-forespørgsler gemt i en fil
- Generer XML ktr-filer, der skal bruges med Penthalo Data Integrator (Kettle)
- Eksporter Oracle locator og rumlige geometrier til PostGis
- Eksporter DBLINK som Oracle FDW
- Eksporter SYNONYMER som visninger
- Eksportér DIRECTORY som en ekstern tabel eller mappe til ekstern_filtype
- Fuld MySQL-eksport ligesom Oracle-database
Der er flere ETL tilgængelige muligheder, som Pentaho eller Talen, men de er mere orienteret mod dataintegration eller datastyring end migrering, så vi vil ikke beskrive dem her for at undgå et omfattende blogindlæg. Du kan finde mere information her.
Logisk PostgreSQL-replikering til migrering
Logisk replikering er en metode til at replikere dataobjekter og deres ændringer baseret på deres replikeringsidentitet (normalt en primær nøgle). Den er baseret på en udgivelses- og abonnenttilstand, hvor en eller flere abonnenter abonnerer på en eller flere publikationer på en udgivernode.
En publikation er et sæt ændringer genereret fra en tabel eller en gruppe af tabeller (også kaldet et replikeringssæt). Noden, hvor en publikation er defineret, omtales som udgiver. Et abonnement er downstream-siden af logisk replikering. Noden, hvor et abonnement er defineret, omtales som abonnenten, og det definerer forbindelsen til en anden database og et sæt publikationer (en eller flere), som den ønsker at abonnere på. Abonnenter henter data fra de publikationer, de abonnerer på.
Denne metode kan bruges til at migrere eller opgradere din PostgreSQL-database.
For mere information kan du henvise til det tilsvarende blogindlæg om opgradering af PostgreSQL uden nedetid.
Konklusion
Migreringer er en vanskelig og risikabel opgave, da du flytter eller transformerer data fra en (eller flere) kilder til et mål (eller mere end én), og det er endnu værre, hvis dit mål er en anderledes motor. Så du skal have en god plan med detaljerede trin og selvfølgelig et testmiljø for at teste alle stadier af migreringen. I denne blog nævnte vi nogle værktøjer til at hjælpe med denne opgave, og det bedste valg vil afhænge af dine krav om tilgængeligheden af dit system.