Datenbankmigration ist der Prozess der Migration von Daten aus einer oder mehreren Quelldatenbanken in eine oder mehrere Zieldatenbanken mithilfe eines Dienstes oder Tools. Es gibt verschiedene Arten von Migrationen. Sie können von einer Technologie zu einer anderen, zu einem anderen Rechenzentrum oder in die Cloud oder sogar am selben Ort und mit derselben Technologie auf eine andere Maschine migrieren. Das beste Tool für eine PostgreSQL-Migration hängt von der Art der Migration und Anforderungen wie Verfügbarkeit oder Ausfalltoleranz ab, und manchmal ist es schwierig, das beste Tool für die Aufgabe zu finden.
In diesem Blog werden wir einige Open-Source-Tools für PostgreSQL-Migrationen mit einem kurzen Überblick über jede Option erwähnen.
Migrationstools sichern und wiederherstellen
Dies könnte der einfachste Weg sein, eine Datenmigration durchzuführen, aber auch der langsamste in Bezug auf das Recovery Time Objective (RTO). Die Verwendung dieser Methode bedeutet, dass Sie ein Backup Ihrer aktuellen Datenbank erstellen, höchstwahrscheinlich ein logisches Backup, wenn Sie es in einer anderen Version oder Infrastruktur wiederherstellen möchten, den Dump kopieren und auf dem neuen Server wiederherstellen. Abhängig von der Datenmenge kann es viel Zeit in Anspruch nehmen, aber es ist die grundlegende Methode, um Ihre Datenbank zu migrieren. Sehen wir uns einige Tools dafür an.
pgdump/pgdumpall
pg_dump ist ein Dienstprogramm zum Sichern einer einzelnen PostgreSQL-Datenbank. Es erstellt konsistente Backups, auch wenn die Datenbank gleichzeitig verwendet wird, da es andere Benutzer nicht blockiert. Um einen ganzen Cluster zu sichern oder um globale Objekte zu sichern, die allen Datenbanken in einem Cluster gemeinsam sind (z. B. Rollen und Tablespaces), müssen Sie stattdessen pg_dumpall verwenden.
Dumps können in Skript- oder Archivdateiformaten ausgegeben werden. Skript-Dumps sind Klartextdateien, die die SQL-Befehle enthalten, die erforderlich sind, um die Datenbank in den Zustand zu versetzen, in dem sie sich zum Zeitpunkt der Speicherung befand. Es kann verwendet werden, um die Datenbank auf anderen Computern, anderen Architekturen oder sogar auf anderen SQL-Datenbankprodukten zu rekonstruieren.
pg_basebackup
pg_basebackup wird verwendet, um ein Basis-Backup eines laufenden PostgreSQL-Datenbank-Clusters zu erstellen. Die Sicherung erfolgt ohne Auswirkungen auf andere Datenbank-Clients und kann sowohl für PITR (Point-In-Time-Recovery) als auch als Startpunkt eines Streaming Replication-Standby-Servers verwendet werden. Es erstellt eine exakte Kopie der Dateien des Datenbank-Clusters und stellt gleichzeitig sicher, dass der Server automatisch in den Backup-Modus versetzt und wieder deaktiviert wird. Backups werden immer vom gesamten Datenbank-Cluster erstellt; Es ist nicht möglich, einzelne Datenbanken oder Datenbankobjekte zu sichern.
pgBackRest
pgBackRest ist ein Open-Source-Backup-Tool, das physische Backups mit einigen Verbesserungen im Vergleich zum klassischen pg_basebackup-Tool erstellt. Sie können pgBackRest verwenden, um eine anfängliche Datenbankkopie für die Streaming-Replikation durchzuführen, indem Sie eine vorhandene Sicherung verwenden, oder Sie können die Delta-Option verwenden, um einen alten Standby-Server neu zu erstellen.
Einige der wichtigsten Funktionen von pgBackRest sind:
- Parallele Sicherung und Wiederherstellung
- Lokaler oder entfernter Betrieb
- Vollständige, inkrementelle und differenzielle Sicherungen
- Backup-Rotation und Archivablauf
- Integritätsprüfung der Sicherung
- Wiederaufnahme der Sicherung
- Delta-Wiederherstellung
- Verschlüsselung
PostgreSQL-Migrationstools
Anstatt ein Backup-Tool zu verwenden, gibt es verschiedene Dienstprogramme, um diese Migration mit unterschiedlichen Methoden schneller durchzuführen. Es kann einen ETL-Ansatz verwenden oder sogar die Replikation zwischen verschiedenen Datenbanktechnologien konfigurieren, indem es dasselbe Konzept von Extrahieren - Transformieren - Laden verwendet. Sehen wir uns einige dieser Tools an.
pg_chamäleon
pg_chameleon ist ein Replikatsystem von MySQL zu PostgreSQL. Es kann eine Verbindung zum MySQL-Replikationsprotokoll herstellen und die Datenänderungen in PostgreSQL replizieren. Unabhängig davon, ob der Benutzer eine permanente Replikation zwischen MySQL und PostgreSQL einrichten oder eine Engine-Migration durchführen muss, ist pg_chameleon eine gute Option für diese Aufgabe.
Die Hauptmerkmale sind:
- Lesen Sie aus mehreren MySQL-Schemas und stellen Sie sie in einer PostgreSQL-Zieldatenbank wieder her
- Stellen Sie PostgreSQL so ein, dass es als MySQL-Slave fungiert
- Grundlegende DDL-Unterstützung (CREATE/DROP/ALTER TABLE, DROP PRIMARY KEY/TRUNCATE, RENAME)
- Tabellen, die Fehler generieren, werden automatisch von der Replikation ausgeschlossen
- Möglichkeit, einzelne Tabellen oder einzelne Schemas zu aktualisieren
- Trennen Sie das Replikat von MySQL für die Migrationsunterstützung
- Datentypüberschreibung
- Dämonisierter init_replica-Prozess
- Dämonisierter Reproduktionsprozess mit zwei separaten Unterprozessen, einer für das Lesen und einer für die Wiedergabe
pgloader
pgloader lädt Daten aus verschiedenen Quellen in PostgreSQL. Es kann die gelesenen Daten im laufenden Betrieb umwandeln und vor und nach dem Laden rohes SQL übermitteln. Es verwendet das COPY PostgreSQL-Protokoll, um die Daten in den Server zu streamen, und verwaltet Fehler, indem es ein Paar von "reject.dat"- und "reject.log"-Dateien füllt.
Da Daten direkt aus einer Datenbankquelle geladen werden können, unterstützt pgloader auch Migrationen von anderen Produkten zu PostgreSQL. In diesem Betriebsmodus verarbeitet pgloader sowohl die Schema- als auch die Datenteile der Migration in einem einzigen unbemannten Befehl, wodurch eine kontinuierliche Migration implementiert werden kann.
Die Hauptmerkmale sind:
- Viele unterstützte Quellformate wie CSV-, db3- und IBM IXF-Dateien
- On-the-fly-Datentransformation
- Vollfeldprojektionen
- Lesen aus komprimierten Dateien (zip, tar und gzip)
- HTTP(S)-Unterstützung
- Zielschemaerkennung
- Bei Fehler stoppen/nächste Optionen fortsetzen
- Pre/Post-SQL-Befehle
- Ein-Befehl-Migration
- Schemaerkennung
- Benutzerdefinierte Casting-Regeln
- Teilmigrationen mit/ohne Tabellen
- Nur Schema oder Daten
- Materialisierte Ansichten oder Schemaumschreibung on-the-fly
- Kontinuierliche Migration
Ora2Pg
Ora2Pg ist ein kostenloses Tool zum Migrieren einer Oracle- oder MySQL-Datenbank in ein PostgreSQL-kompatibles Schema. Es verbindet Ihre aktuelle Datenbank, scannt sie und extrahiert ihre Struktur oder Daten. Anschließend generiert es SQL-Skripte, die Sie in Ihre PostgreSQL-Datenbank laden können.
Die Hauptmerkmale sind:
- Exportieren Sie das vollständige Datenbankschema (Tabellen, Ansichten, Sequenzen, Indizes) mit Eindeutigkeit, Primärschlüssel, Fremdschlüssel und Prüfbeschränkungen
- Exportieren Sie Berechtigungen/Berechtigungen für Benutzer und Gruppen
- Bereichs-/Listenpartitionen und Unterpartitionen exportieren
- Exportiert eine Tabellenauswahl (durch Angabe der Tabellennamen).
- Vordefinierte Funktionen, Trigger, Prozeduren, Pakete und Paketkörper exportieren
- Vollständige Daten exportieren oder einer WHERE-Klausel folgen
- Volle Unterstützung des Oracle BLOB-Objekts als PG BYTEA
- Oracle-Ansichten als PG-Tabellen exportieren
- Exportieren Sie benutzerdefinierte Oracle-Typen
- Stellen Sie einige grundlegende automatische Konvertierungen von PLSQL-Code in PLPGSQL bereit
- Oracle-Tabellen als fremde Daten-Wrapper-Tabellen exportieren
- Materialisierte Ansicht exportieren
- Zeigen Sie einen detaillierten Bericht über den Inhalt einer Oracle-Datenbank
- Bewertung der Migrationskosten einer Oracle-Datenbank
- Bewertung des Migrationsschwierigkeitsgrads einer Oracle-Datenbank
- Bewertung der Migrationskosten von PL/SQL-Code aus einer Datei
- Bewertung der Migrationskosten von in einer Datei gespeicherten Oracle SQL-Abfragen
- Generieren Sie XML-ktr-Dateien zur Verwendung mit Penthalo Data Integrator (Kettle)
- Oracle-Locator und räumliche Geometrien in PostGis exportieren
- DBLINK als Oracle FDW exportieren
- SYNONYME als Ansichten exportieren
- DIRECTORY als externe Tabelle oder Verzeichnis für externe Dateierweiterung exportieren
- Vollständiger MySQL-Export genau wie die Oracle-Datenbank
Es gibt mehr verfügbare ETL-Optionen wie Pentaho oder Talen, aber diese sind eher auf Datenintegration oder Datenmanagement als auf Migration ausgerichtet, daher werden wir sie hier nicht beschreiben, um einen ausführlichen Blogbeitrag zu vermeiden. Weitere Informationen finden Sie hier.
Logische PostgreSQL-Replikation für Migrationen
Die logische Replikation ist eine Methode zum Replizieren von Datenobjekten und deren Änderungen, basierend auf ihrer Replikationsidentität (normalerweise ein Primärschlüssel). Es basiert auf einem Publish-and-Subscribe-Modus, bei dem ein oder mehrere Abonnenten eine oder mehrere Publikationen auf einem Publisher-Knoten abonnieren.
Eine Veröffentlichung ist ein Satz von Änderungen, der aus einer Tabelle oder einer Gruppe von Tabellen generiert wird (auch als Replikationssatz bezeichnet). Der Knoten, in dem eine Veröffentlichung definiert ist, wird als Herausgeber bezeichnet. Ein Abonnement ist die Downstream-Seite der logischen Replikation. Der Knoten, an dem ein Abonnement definiert ist, wird als Abonnent bezeichnet und definiert die Verbindung zu einer anderen Datenbank und einem Satz von Veröffentlichungen (einer oder mehreren), die er abonnieren möchte. Abonnenten beziehen Daten aus den von ihnen abonnierten Publikationen.
Diese Methode kann zum Migrieren oder Aktualisieren Ihrer PostgreSQL-Datenbank verwendet werden.
Weitere Informationen finden Sie im entsprechenden Blogbeitrag zum Upgrade von PostgreSQL ohne Ausfallzeit.
Fazit
Migrationen sind eine schwierige und riskante Aufgabe, da Sie Daten von einer (oder mehreren) Quelle zu einem Ziel (oder mehr als einem) verschieben oder umwandeln, und es ist noch schlimmer, wenn Ihr Ziel eine ist anderer Motor. Sie benötigen also einen guten Plan mit detaillierten Schritten und natürlich eine Testumgebung, um alle Phasen der Migration zu testen. In diesem Blog haben wir einige Tools erwähnt, die Ihnen bei dieser Aufgabe helfen, und die beste Wahl hängt von Ihren Anforderungen an die Verfügbarkeit Ihres Systems ab.