Migrieren einer MySQL-Datenbank nach PostgreSQL mit pgLoader

Einführung

PostgreSQL, auch bekannt als "Postgres", ist ein relationales Open-Source-Datenbankverwaltungssystem (RDBMS). Es gab in den letzten Jahren einen https://db-engines.com/en/ranking_trend/system/PostgreSQL mit drastischer Zunahme der Popularität, wobei viele Entwickler und Unternehmen ihre Daten von anderen Datenbanklösungen auf Postgres migrierten.

Die Aussicht auf die Migration einer Datenbank kann einschüchternd sein, insbesondere bei der Migration von einem Datenbankverwaltungssystem auf ein anderes. pgLoader ist ein Open-Source-Tool zur Datenbankmigration, mit dem der Migrationsprozess zu PostgreSQL vereinfacht werden soll. Es unterstützt Migrationen von verschiedenen Dateitypen und RBDMS - einschließlich MySQL und SQLite - zu PostgreSQL.

Dieses Tutorial enthält Anweisungen zum Installieren von pgLoader und zum Migrieren einer entfernten MySQL-Datenbank nach PostgreSQL über eine SSL-Verbindung. Gegen Ende des Tutorials werden wir auch einige verschiedene Migrationsszenarien kurz ansprechen, in denen pgLoader nützlich sein kann.

Voraussetzungen

Um dieses Lernprogramm abzuschließen, benötigen Sie Folgendes:

Bitte beachten Sie, dass in diesem Handbuch der Server, auf dem Sie MySQL installiert haben, als "* MySQL-Server *" bezeichnet wird und alle Befehle, die auf diesem Computer ausgeführt werden sollen, mit einem blauen Hintergrund angezeigt werden.

In diesem Handbuch wird auf den anderen Server als "* PostgreSQL " - oder " Postgres" -Server * verwiesen. Alle Befehle, die auf diesem Computer ausgeführt werden müssen, werden mit einem roten Hintergrund angezeigt:

Bitte denken Sie daran, wenn Sie diesem Tutorial folgen, um Verwirrung zu vermeiden.

Schritt 1 - (Optional) Erstellen einer Beispieldatenbank und -tabelle in MySQL

In diesem Schritt wird beschrieben, wie eine Testdatenbank erstellt und mit Dummy-Daten gefüllt wird. Wir empfehlen Ihnen, die Verwendung von pgLoader in diesem Testfall zu üben. Wenn Sie jedoch bereits über eine zu migrierende Datenbank verfügen, können Sie mit https://www.digitalocean.com/community/tutorials/how-to-migrate- fortfahren. Mysql-Datenbank-zu-Postgres-mit-Pgloader # Schritt-2-% E2% 80% 94-Installation-Pgloader [nächster Schritt].

Öffnen Sie zunächst die MySQL-Eingabeaufforderung auf Ihrem MySQL-Server:

mysql -u root -p

Nachdem Sie das Passwort Ihres * root * MySQL-Benutzers eingegeben haben, erscheint die MySQL-Eingabeaufforderung.

Erstellen Sie von dort aus eine neue Datenbank, indem Sie den folgenden Befehl ausführen. Sie können Ihrer Datenbank einen beliebigen Namen geben, aber in diesem Handbuch werden wir den Namen "++" geben:

CREATE DATABASE ;

Wechseln Sie dann mit dem Befehl + USE + zu dieser Datenbank:

USE ;
OutputDatabase changed

Verwenden Sie in dieser Datenbank den folgenden Befehl, um eine Beispieltabelle zu erstellen. Hier benennen wir diese Tabelle "++", können sie aber auch anders benennen:

CREATE TABLE  (
   employee_id INT PRIMARY KEY,
   first_name VARCHAR(50),
   last_name VARCHAR(50),
   start_date DATE,
   salary VARCHAR(50)
);

Füllen Sie diese Tabelle dann mit einigen Beispieldaten für Mitarbeiter mit dem folgenden Befehl:

INSERT INTO  (employee_id, first_name, last_name, start_date, salary)
VALUES (1, 'Elizabeth', 'Cotten', '2007-11-11', '$105433.18'),
(2, 'Yanka', 'Dyagileva', '2017-10-30', '$107540.67'),
(3, 'Lee', 'Dorsey', '2013-06-04', '$118024.04'),
(4, 'Kasey', 'Chambers', '2010-08-18', '$116456.98'),
(5, 'Bram', 'Tchaikovsky', '2018-09-16', '$61989.50');

Anschließend können Sie die MySQL-Eingabeaufforderung schließen:

exit

Nachdem Sie eine Beispieldatenbank mit Dummy-Daten geladen haben, können Sie mit dem nächsten Schritt fortfahren, in dem Sie pgLoader auf Ihrem PostgreSQL-Server installieren.

Schritt 2 - Installation von pgLoader

pgLoader ist ein Programm, das Daten aus verschiedenen Quellen in eine PostgreSQL-Datenbank laden kann. Es verwendet PostgreSQLs Befehl + COPY +, um Daten aus einer Quelldatenbank oder -datei zu kopieren, z. B. https: // de. wikipedia.org/wiki/Comma-separated_values[comma-separated values ​​(CSV)] Datei - in eine PostgreSQL Zieldatenbank.

pgLoader ist in den standardmäßigen Ubuntu APT-Repositorys verfügbar und kann mit dem Befehl + apt + installiert werden. In diesem Handbuch werden wir jedoch die Option + useSSL + von pgLoader nutzen, eine Funktion, die Migrationen von MySQL über eine SSL-Verbindung ermöglicht. Diese Funktion ist nur in der neuesten Version von pgLoader verfügbar, die zum jetzigen Zeitpunkt nur mit dem Quellcode aus dem GitHub-Repository installiert werden kann.

Vor der Installation von pgLoader müssen Sie dessen Abhängigkeiten installieren. Wenn Sie dies noch nicht getan haben, aktualisieren Sie * den * Paketindex Ihres Postgres-Servers:

sudo apt update

Dann installieren Sie die folgenden Pakete:

  • + sbcl +: Ein Common Lisp -Compiler

  • + unzip +: Ein Dearchivierer für + .zip + Dateien

  • + libsqlite3-dev +: Eine Sammlung von Entwicklungsdateien für SQLite 3

  • + gawk +: Abkürzung für „GNU awk“, eine Programmiersprache zum Scannen und Verarbeiten von Mustern

  • + curl +: Ein Befehlszeilenprogramm zum Übertragen von Daten von einer URL

  • + make +: Ein Dienstprogramm zum Verwalten der Paketkompilierung

  • + freetds-dev +: Eine Client-Bibliothek für MS SQL- und Sybase-Datenbanken

  • + libzip-dev +: Eine Bibliothek zum Lesen, Erstellen und Ändern von Zip-Archiven

Verwenden Sie den folgenden Befehl, um diese Abhängigkeiten zu installieren:

sudo apt install sbcl unzip libsqlite3-dev gawk curl make freetds-dev libzip-dev

Wenn Sie dazu aufgefordert werden, bestätigen Sie, dass Sie diese Pakete installieren möchten, indem Sie "+ ENTER" drücken.

Navigieren Sie als Nächstes zur Releases page des pgLoader GitHub-Projekts und suchen Sie die neueste Version. Für dieses Handbuch verwenden wir die neueste Version zum Zeitpunkt des Schreibens: version 3.6.1. Scrollen Sie zu seinem Menü * Assets * und kopieren Sie den Link für die Datei + tar.gz + mit der Bezeichnung * Source code *. Fügen Sie dann den Link in den folgenden Befehl ein: "+ wget +". Dadurch wird der Tarball auf Ihren Server heruntergeladen:

wget

Extrahieren Sie den Tarball:

tar xvf

Dadurch werden eine Reihe neuer Verzeichnisse und Dateien auf Ihrem Server erstellt. Navigieren Sie in das neue übergeordnete Verzeichnis von pgLoader:

cd pgloader-/

Verwenden Sie dann das Dienstprogramm + make +, um die Binärdatei + pgloader + zu kompilieren:

make pgloader

Dieser Befehl benötigt einige Zeit, um die Binärdatei + pgloader + zu erstellen.

Verschieben Sie die Binärdatei in das Verzeichnis + / usr / local / bin +, in dem Ubuntu nach ausführbaren Dateien sucht:

sudo mv ./build/bin/pgloader /usr/local/bin/

Sie können testen, ob pgLoader korrekt installiert wurde, indem Sie die Version wie folgt überprüfen:

pgloader --version
Outputpgloader version ""
compiled with SBCL 1.4.5.debian

pgLoader ist jetzt installiert, aber bevor Sie mit der Migration beginnen können, müssen Sie einige Konfigurationsänderungen an Ihren PostgreSQL- und MySQL-Instanzen vornehmen. Wir werden uns zuerst auf den PostgreSQL-Server konzentrieren.

Schritt 3 - Erstellen einer PostgreSQL-Rolle und -Datenbank

Der Befehl + pgloader + kopiert Quelldaten entweder aus einer Datei oder direkt aus einer Datenbank und fügt sie in eine PostgreSQL-Datenbank ein. Aus diesem Grund müssen Sie entweder pgLoader als Linux-Benutzer ausführen, der Zugriff auf Ihre Postgres-Datenbank hat, oder Sie müssen eine PostgreSQL-Rolle mit den entsprechenden Berechtigungen in Ihrem Ladebefehl angeben.

PostgreSQL verwaltet den Datenbankzugriff über roles. Je nachdem, wie die Rolle konfiguriert ist, kann sie als Datenbankbenutzer oder als Gruppe von Datenbankbenutzern betrachtet werden. In den meisten RDBMS erstellen Sie einen Benutzer mit dem SQL-Befehl + CREATE USER. Postgres wird jedoch mit einem praktischen Skript namens "+ createuser " geliefert. Dieses Skript dient als Wrapper für den SQL-Befehl ` CREATE USER +`, den Sie direkt über die Befehlszeile ausführen können.

Führen Sie den folgenden Befehl auf Ihrem Postgres-Server aus, um eine neue Rolle zu erstellen. Beachten Sie das Flag "+ -P ", das " createuser +" auffordert, ein Kennwort für die neue Rolle einzugeben:

sudo -u postgres createuser --interactive -P

Möglicherweise werden Sie zuerst zur Eingabe Ihres "+ sudo +" - Kennworts aufgefordert. Das Skript fordert Sie dann auf, einen Namen für die neue Rolle einzugeben. In diesem Handbuch nennen wir diese Rolle * pgloader_pg *:

OutputEnter name of role to add:

Anschließend werden Sie mit "+ createuser +" aufgefordert, ein Kennwort für diese Rolle einzugeben und zu bestätigen. Notieren Sie sich dieses Kennwort, da Sie es für die Migration in Schritt 5 benötigen:

OutputEnter password for new role:
Enter it again:

Zuletzt werden Sie gefragt, ob die neue Rolle als Superuser klassifiziert werden soll. In PostgreSQL können Sie durch Herstellen einer Verbindung zur Datenbank mit einer Superuser-Rolle alle Berechtigungsprüfungen der Datenbank umgehen, mit Ausnahme des Anmelderechts. Aus diesem Grund sollte das Superuser-Privileg nicht leichtfertig verwendet werden, und die PostgreSQL-Dokumentation empfiehlt, dass Sie den größten Teil Ihrer Datenbankarbeit als Nicht-Benutzer ausführen -Superuser-Rolle. Da pgLoader jedoch umfassende Berechtigungen für den Zugriff auf und das Laden von Daten in Tabellen benötigt, können Sie diese neuen Rollen-Superuser-Berechtigungen sicher erteilen. Geben Sie dazu "+ y " ein und drücken Sie " ENTER":

Output. . .
Shall the new role be a superuser? (y/n)

PostgreSQL wird mit einem weiteren nützlichen Skript geliefert, mit dem Sie eine Datenbank über die Befehlszeile erstellen können. Da pgLoader auch eine Zieldatenbank benötigt, in die es die Quelldaten laden kann, führen Sie den folgenden Befehl aus, um eine zu erstellen. Wir nennen diese Datenbank "++", können dies aber jederzeit ändern, wenn Sie möchten:

sudo -u postgres createdb

Wenn keine Fehler vorliegen, wird dieser Befehl ohne Ausgabe ausgeführt.

Nachdem Sie einen dedizierten PostgreSQL-Benutzer und eine leere Datenbank haben, in die Sie Ihre MySQL-Daten laden können, müssen Sie nur noch ein paar Änderungen vornehmen, bevor Sie eine Migration durchführen. Sie müssen einen dedizierten MySQL-Benutzer mit Zugriff auf Ihre Quellendatenbank erstellen und Ihre clientseitigen Zertifikate zum vertrauenswürdigen Zertifikatspeicher von Ubuntu hinzufügen.

Schritt 4 - Erstellen eines dedizierten Benutzers in MySQL und Verwalten von Zertifikaten

Der Schutz von Daten vor Snoopern ist einer der wichtigsten Aufgaben eines Datenbankadministrators. Durch das Migrieren von Daten von einem Computer auf einen anderen haben böswillige Akteure die Möglichkeit, die Pakete, die über die Netzwerkverbindung übertragen werden, unter sniff abzuspeichern, wenn sie nicht verschlüsselt sind. In diesem Schritt erstellen Sie einen dedizierten MySQL-Benutzer, mit dem pgLoader die Migration über eine SSL-Verbindung durchführt.

Beginnen Sie, indem Sie Ihre MySQL-Eingabeaufforderung öffnen:

mysql -u root -p

Verwenden Sie an der MySQL-Eingabeaufforderung den folgenden Befehl + CREATE USER +, um einen neuen MySQL-Benutzer zu erstellen. Wir werden diesen Benutzer * pgloader_my * nennen. Da dieser Benutzer nur von Ihrem PostgreSQL-Server auf MySQL zugreift, müssen Sie "" durch die öffentliche IP-Adresse Ihres PostgreSQL-Servers ersetzen. Ersetzen Sie `` zusätzlich durch ein sicheres Passwort oder eine Passphrase:

CREATE USER ''@'' IDENTIFIED BY '' REQUIRE SSL;

Beachten Sie die Klausel "+ REQUIRE SSL +" am Ende dieses Befehls. Dies schränkt den Benutzer * pgloader_my * ein, nur über eine sichere SSL-Verbindung auf die Datenbank zuzugreifen.

Als Nächstes gewähren Sie dem Benutzer * pgloader_my * Zugriff auf die Zieldatenbank und alle ihre Tabellen. Hier geben wir die Datenbank an, die wir im optionalen Schritt 1 erstellt haben. Wenn Sie jedoch eine eigene Datenbank haben, die Sie migrieren möchten, verwenden Sie deren Namen anstelle von "++":

GRANT ALL ON .* TO ''@'';

Führen Sie dann den Befehl + FLUSH PRIVILEGES + aus, um die Grant-Tabellen neu zu laden und die Berechtigungsänderungen zu aktivieren:

FLUSH PRIVILEGES;

Danach können Sie die MySQL-Eingabeaufforderung schließen:

exit

Kehren Sie nun zu Ihrem Postgres-Server-Terminal zurück und versuchen Sie, sich als neuer * pgloader_my * -Benutzer beim MySQL-Server anzumelden. Wenn Sie den Leitfaden zu den Voraussetzungen unter https://www.digitalocean.com/community/tutorials/how-to-configure-ssl-tls-for-mysql-on-ubuntu-18-04 [Konfigurieren von SSL / TLS für MySQL] befolgt haben Dann haben Sie bereits "+ mysql-client +" auf Ihrem PostgreSQL-Server installiert und sollten in der Lage sein, eine Verbindung mit dem folgenden Befehl herzustellen:

mysql -u  -p -h

Wenn der Befehl erfolgreich ist, sehen Sie die MySQL-Eingabeaufforderung:

Nachdem Sie bestätigt haben, dass Ihr * pgloader_my * Benutzer erfolgreich eine Verbindung herstellen kann, fahren Sie fort und schließen Sie die Eingabeaufforderung:

exit

Zu diesem Zeitpunkt haben Sie einen dedizierten MySQL-Benutzer, der von Ihrem Postgres-Computer aus auf die Quellendatenbank zugreifen kann. Wenn Sie jedoch versuchen, Ihre MySQL-Datenbank mit SSL zu migrieren, schlägt der Versuch fehl.

Der Grund dafür ist, dass pgLoader die Konfigurationsdateien von MySQL nicht lesen kann und daher nicht weiß, wo Sie nach dem CA-Zertifikat oder Client-Zertifikat suchen sollen, das Sie unter der Voraussetzung https: //www.digitalocean auf Ihren PostgreSQL-Server kopiert haben .com / community / tutorials / ssl-tls-für-mysql-on-ubuntu-18-04 konfigurieren [SSL / TLS-Konfigurationsanleitung]. Anstatt die SSL-Anforderungen zu ignorieren, erfordert pgLoader die Verwendung vertrauenswürdiger Zertifikate in Fällen, in denen SSL für die Verbindung mit MySQL erforderlich ist. Dementsprechend können Sie dieses Problem beheben, indem Sie die Dateien + ca.pem + und + client-cert.pem + zu https://help.ubuntu.com/lts/serverguide/certificates-and-security.html.en hinzufügen [Ubuntus vertrauenswürdiger Zertifikatspeicher].

Kopieren Sie dazu die Dateien "+ ca.pem " und " client-cert.pem " in das Verzeichnis " / usr / local / share / ca-certificates / ". Beachten Sie, dass Sie diese Dateien auch umbenennen müssen, damit sie die Dateierweiterung " .crt +" haben. Wenn Sie sie nicht umbenennen, kann Ihr System nicht erkennen, dass Sie diese neuen Zertifikate hinzugefügt haben:

sudo cp ~/client-ssl/ca.pem /usr/local/share/ca-certificates/ca.pem.crt
sudo cp ~/client-ssl/client-cert.pem /usr/local/share/ca-certificates/client-cert.pem.crt

Führen Sie anschließend den Befehl + update-ca-certificates + aus. Dieses Programm sucht nach Zertifikaten in + / usr / local / share / ca-certificates +, fügt dem Verzeichnis + / etc / ssl / certs / + neue hinzu und generiert eine Liste vertrauenswürdiger SSL-Zertifikate - + ca-certificates.crt + `- basierend auf dem Inhalt des Verzeichnisses + / etc / ssl / certs / + `:

sudo update-ca-certificates
OutputUpdating certificates in /etc/ssl/certs...
2 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

Damit sind Sie bereit, Ihre MySQL-Datenbank auf PostgreSQL zu migrieren.

Schritt 5 - Migrieren der Daten

Nachdem Sie den Remotezugriff von Ihrem PostgreSQL-Server auf Ihren MySQL-Server konfiguriert haben, können Sie mit der Migration beginnen.

Mit pgLoader können Benutzer eine gesamte Datenbank mit einem einzigen Befehl migrieren. Für eine Migration von einer MySQL-Datenbank zu einer PostgreSQL-Datenbank auf einem separaten Server hätte der Befehl die folgende Syntax:

pgloader mysql://:@/?=&= postgresql://:@/?=&=

Dazu gehören der Befehl "+ pgloader +" und zwei connection-Zeichenfolgen, die erste für die Quellendatenbank und die zweite für die Zieldatenbank. Diese beiden Verbindungszeichenfolgen beginnen mit der Angabe des DBMS-Typs, auf den die Verbindungszeichenfolge verweist, gefolgt von dem Benutzernamen und dem Kennwort, die Zugriff auf die Datenbank haben (durch einen Doppelpunkt getrennt), der Hostadresse des Servers, auf dem die Datenbank installiert ist Name der Datenbank, auf die pgLoader abzielen soll, und various options, die sich auf das Verhalten von pgLoader auswirken.

Mithilfe der zuvor in diesem Lernprogramm definierten Parameter können Sie Ihre MySQL-Datenbank mithilfe eines Befehls mit der folgenden Struktur migrieren. Achten Sie darauf, alle hervorgehobenen Werte zu ersetzen, um sie an Ihrem eigenen Setup auszurichten:

pgloader mysql://:@/?useSSL=true postgresql://:@localhost/

Beachten Sie, dass dieser Befehl die Option + useSSL + in der MySQL-Verbindungszeichenfolge enthält. Wenn Sie diese Option auf "+ true +" setzen, stellt pgLoader über SSL eine Verbindung zu MySQL her. Dies ist erforderlich, da Sie Ihren MySQL-Server so konfiguriert haben, dass nur sichere Verbindungen akzeptiert werden.

Wenn dieser Befehl erfolgreich ausgeführt wurde, wird eine Ausgabetabelle angezeigt, in der der Ablauf der Migration beschrieben wird:

Output             table name     errors       rows      bytes      total time
-----------------------  ---------  ---------  ---------  --------------
       fetch meta data          0          2                     0.111s
        Create Schemas          0          0                     0.001s
      Create SQL Types          0          0                     0.005s
         Create tables          0          2                     0.017s
        Set Table OIDs          0          1                     0.010s
-----------------------  ---------  ---------  ---------  --------------
source_db.sample_table          0          5     0.2 kB          0.048s
-----------------------  ---------  ---------  ---------  --------------
COPY Threads Completion          0          4                     0.052s
Index Build Completion          0          1                     0.011s
        Create Indexes          0          1                     0.006s
       Reset Sequences          0          0                     0.014s
          Primary Keys          0          1                     0.001s
   Create Foreign Keys          0          0                     0.000s
       Create Triggers          0          0                     0.000s
      Install Comments          0          0                     0.000s
-----------------------  ---------  ---------  ---------  --------------
     Total import time          ✓          5     0.2 kB          0.084s

Um zu überprüfen, ob die Daten korrekt migriert wurden, öffnen Sie die PostgreSQL-Eingabeaufforderung:

sudo -i -u postgres psql

Stellen Sie von dort aus eine Verbindung zu der Datenbank her, in die Sie die Daten geladen haben:

\c

Führen Sie dann die folgende Abfrage aus, um zu testen, ob die migrierten Daten in Ihrer PostgreSQL-Datenbank gespeichert sind:

SELECT * FROM .;

Wenn die Daten tatsächlich korrekt geladen wurden, wird in der Ausgabe der Abfrage die folgende Tabelle angezeigt:

Output employee_id | first_name |  last_name  | start_date |   salary
-------------+------------+-------------+------------+------------
          1 | Elizabeth  | Cotten      | 2007-11-11 | $105433.18
          2 | Yanka      | Dyagileva   | 2017-10-30 | $107540.67
          3 | Lee        | Dorsey      | 2013-06-04 | $118024.04
          4 | Kasey      | Chambers    | 2010-08-18 | $116456.98
          5 | Bram       | Tchaikovsky | 2018-09-16 | $61989.50
(5 rows)

Führen Sie den folgenden Befehl aus, um die Postgres-Eingabeaufforderung zu schließen:

\q

Nachdem wir uns nun mit der Migration einer MySQL-Datenbank über ein Netzwerk und dem Laden in eine PostgreSQL-Datenbank befasst haben, werden wir uns mit einigen anderen gängigen Migrationsszenarien befassen, in denen pgLoader hilfreich sein kann.

Schritt 6 - Weitere Migrationsoptionen

pgLoader ist ein hochflexibles Tool, das in einer Vielzahl von Situationen nützlich sein kann. Im Folgenden werden einige weitere Möglichkeiten vorgestellt, wie Sie mit pgLoader eine MySQL-Datenbank nach PostgreSQL migrieren können.

Migrieren mit einer pgLoader-Ladedatei

Im Kontext von pgLoader ist eine Ladedatei oder Befehlsdatei eine Datei, die pgLoader mitteilt, wie eine Migration durchgeführt werden soll. Diese Datei kann Befehle und Optionen enthalten, die sich auf das Verhalten von pgLoader auswirken. Auf diese Weise können Sie viel genauer steuern, wie Ihre Daten in PostgreSQL geladen werden, und komplexe Migrationen durchführen.

pgLoader’s documentation enthält umfassende Anweisungen zur Verwendung und Erweiterung dieser Dateien, um eine Reihe von Migrationstypen zu unterstützen ein vergleichsweise rudimentäres Beispiel durcharbeiten. Wir werden die gleiche Migration durchführen, die wir in Schritt 5 ausgeführt haben, aber auch den Befehl "+ ALTER SCHEMA " einschließen, um das Schema der Datenbank " new_db " von " source_db " in " public +" zu ändern.

Erstellen Sie zunächst eine neue Ladedatei auf dem Postgres-Server mit Ihrem bevorzugten Texteditor:

nano pgload_test.load

Fügen Sie dann den folgenden Inhalt hinzu und achten Sie darauf, die hervorgehobenen Werte entsprechend Ihrer eigenen Konfiguration zu aktualisieren:

pgload_test.load

LOAD DATABASE
    FROM      mysql://:@/?useSSL=true
    INTO pgsql://:@localhost/

WITH include drop, create tables

ALTER SCHEMA 'source_db' RENAME TO 'public'
;

Hier ist, was jede dieser Klauseln tut:

  • + LOAD DATABASE +: Diese Zeile weist pgLoader an, Daten aus einer separaten Datenbank anstatt aus einer Datei oder einem Datenarchiv zu laden.

  • + FROM +: Diese Klausel gibt die Quellendatenbank an. In diesem Fall verweist es auf die Verbindungszeichenfolge für die MySQL-Datenbank, die wir in https://www.digitalocean.com/community/tutorials/how-to-migrate-mysql-database-to-postgres-using-pgloader#step erstellt haben -1-% E2% 80% 94- (optional) -Erstellen-einer-Beispieldatenbank-und-Tabelle-in-MySQL [Schritt 1].

  • + INTO +: Diese Zeile gibt ebenfalls die PostgreSQL-Datenbank an, in die pgLoader die Daten laden soll.

  • + WITH +: Mit dieser Klausel können Sie bestimmte Verhaltensweisen für pgLoader definieren. Die vollständige Liste der mit MySQL-Migrationen kompatiblen Optionen "+ WITH +" finden Sie hier. . In diesem Beispiel enthalten wir nur zwei Optionen:

  • + include drop +: Wenn diese Option verwendet wird, löscht pgLoader alle Tabellen in der PostgreSQL-Zieldatenbank, die auch in der MySQL-Quellendatenbank enthalten sind. Wenn Sie diese Option beim Migrieren von Daten in eine vorhandene PostgreSQL-Datenbank verwenden, sollten Sie die gesamte Datenbank sichern, um Datenverluste zu vermeiden.

  • + create tables +: Diese Option weist pgLoader an, basierend auf den in der MySQL-Datenbank enthaltenen Metadaten neue Tabellen in der PostgreSQL-Zieldatenbank zu erstellen. Wenn die entgegengesetzte Option "+ keine Tabellen erstellen +" verwendet wird, müssen die Zieltabellen vor der Migration bereits in der Postgres-Zieldatenbank vorhanden sein.

  • + ALTER SCHEMA: Nach der Klausel` + WITH` können Sie bestimmte SQL-Befehle wie diesen hinzufügen, um pgLoader anzuweisen, zusätzliche Aktionen auszuführen. Hier weisen wir pgLoader an, das Schema der neuen Postgres-Datenbank von "+ source_db " in " public " zu ändern, jedoch erst, nachdem das Schema erstellt wurde. Beachten Sie, dass Sie solche Befehle auch in andere Klauseln einbetten können, z. B. ` BEFORE LOAD DO +`, um pgLoader anzuweisen, diese Befehle an bestimmten Stellen im Migrationsprozess auszuführen.

Dies ist ein anschauliches Beispiel dafür, was Sie in eine Ladedatei einfügen können, um das Verhalten von pgLoader zu ändern. Die vollständige Liste der Klauseln, die zu einer Ladedatei hinzugefügt werden können, und ihre Funktionsweise finden Sie unter the official pgLoader documentation.

Speichern und schließen Sie die Ladedatei, nachdem Sie diesen Inhalt hinzugefügt haben. Um es zu verwenden, geben Sie den Namen der Datei als Argument für den Befehl + pgloader + an:

pgloader pgload_test.load

Um zu testen, ob die Migration erfolgreich war, öffnen Sie die Eingabeaufforderung von Postgres:

sudo -u postgres psql

Stellen Sie dann eine Verbindung zur Datenbank her:

\c

Führen Sie die folgende Abfrage aus:

SELECT * FROM sample_table;
Output employee_id | first_name |  last_name  | start_date |   salary
-------------+------------+-------------+------------+------------
          1 | Elizabeth  | Cotten      | 2007-11-11 | $105433.18
          2 | Yanka      | Dyagileva   | 2017-10-30 | $107540.67
          3 | Lee        | Dorsey      | 2013-06-04 | $118024.04
          4 | Kasey      | Chambers    | 2010-08-18 | $116456.98
          5 | Bram       | Tchaikovsky | 2018-09-16 | $61989.50
(5 rows)

Diese Ausgabe bestätigt, dass pgLoader die Daten erfolgreich migriert hat und dass der Befehl "+ ALTER SCHEMA ", den wir zur Ladedatei hinzugefügt haben, wie erwartet funktioniert hat, da wir das Schema " source_db +" in der Abfrage nicht angeben mussten, um das anzuzeigen Daten.

Beachten Sie, dass Sie, wenn Sie eine Ladedatei zum Migrieren von Daten aus einer Datenbank in eine andere auf einem separaten Computer verwenden möchten, alle relevanten Netzwerk- und Firewall-Regeln anpassen müssen, damit die Migration erfolgreich ist.

Migrieren einer MySQL-Datenbank lokal nach PostgreSQL

Mit pgLoader können Sie eine MySQL-Datenbank in eine PostgreSQL-Datenbank migrieren, die sich auf demselben Computer befindet. Sie müssen lediglich den Migrationsbefehl von einem Linux-Benutzerprofil mit Zugriff auf den * root * MySQL-Benutzer ausführen:

pgloader mysql://root@localhost/ pgsql://:@localhost/

Wenn Sie eine solche lokale Migration durchführen, müssen Sie weder die Standardnetzwerkkonfiguration von MySQL noch die Firewall-Regeln Ihres Systems ändern.

Migration von einer CSV-Datei

Sie können auch eine PostgreSQL-Datenbank mit Daten aus einer CSV-Datei laden.

Angenommen, Sie haben eine CSV-Datei mit dem Namen "+ load.csv +", dann könnte der Befehl zum Laden in eine Postgres-Datenbank folgendermaßen aussehen:

pgloader load.csv pgsql://:@localhost/

Da das CSV-Format nicht vollständig standardisiert ist, können beim Laden von Daten direkt aus einer CSV-Datei Probleme auftreten. Glücklicherweise können Sie Unregelmäßigkeiten korrigieren, indem Sie verschiedene Optionen unter pgLoader’s command line options angeben oder in einer Ladedatei angeben. Weitere Informationen finden Sie unter der pgLoader-Dokumentation zu diesem Thema.

Migration auf eine verwaltete PostgreSQL-Datenbank

Es ist auch möglich, eine Migration von einer selbstverwalteten Datenbank zu einer verwalteten PostgreSQL-Datenbank durchzuführen. Um zu veranschaulichen, wie diese Art der Migration aussehen könnte, werden wir den MySQL-Server und eine von DigitalOcean verwaltete PostgreSQL-Datenbank verwenden. Wir werden auch die Beispieldatenbank verwenden, die wir in https://www.digitalocean.com/community/tutorials/how-to-migrate-mysql-database-to-postgres-using-pgloader#step-1-%E2% erstellt haben. 80% 94- (optional) -erstellen-einer-Beispieldatenbank-und-einer-Tabelle-in-MySQL [Schritt 1], aber wenn Sie diesen Schritt übersprungen haben und eine eigene Datenbank haben, auf die Sie migrieren möchten, können Sie darauf verweisen dieser statt.

Für diese Migration benötigen wir die Option "+ useSSL " von pgLoader nicht, da sie nur mit entfernten MySQL-Datenbanken funktioniert und wir diese Migration von einer lokalen MySQL-Datenbank ausführen. Wir werden jedoch die Option ` sslmode = require +` verwenden, wenn wir die von DigitalOcean verwaltete PostgreSQL-Datenbank laden und eine Verbindung herstellen, um sicherzustellen, dass Ihre Daten geschützt bleiben.

Da wir diesmal kein "+ useSSL " verwenden, können Sie " apt " verwenden, um pgLoader zusammen mit dem " postgresql-client +" -Paket zu installieren, mit dem Sie von Ihrem MySQL-Server aus auf die verwaltete PostgreSQL-Datenbank zugreifen können :

sudo apt install pgloader postgresql-client

Anschließend können Sie den Befehl + pgloader + ausführen, um die Datenbank zu migrieren. Dazu benötigen Sie die Verbindungszeichenfolge für die verwaltete Datenbank.

Bei DigitalOcean Managed Databases können Sie die Verbindungszeichenfolge aus der Cloud-Systemsteuerung kopieren. Klicken Sie zunächst im linken Seitenleistenmenü auf * Datenbanken * und wählen Sie die Datenbank aus, in die Sie die Daten migrieren möchten. Scrollen Sie dann nach unten zum Abschnitt * Verbindungsdetails *. Klicken Sie auf das Dropdown-Menü und wählen Sie * Verbindungszeichenfolge *. Klicken Sie anschließend auf die Schaltfläche * Kopieren *, um die Zeichenfolge in Ihre Zwischenablage zu kopieren und in den folgenden Migrationsbefehl einzufügen. Dabei wird die hier gezeigte PostgreSQL-Beispielverbindungszeichenfolge ersetzt. Dadurch wird Ihre MySQL-Datenbank als * doadmin * PostgreSQL-Rolle in die + defaultdb + PostgreSQL-Datenbank migriert:

pgloader mysql://root:@localhost/ postgres://doadmin:@/defaultdb?sslmode=require

Anschließend können Sie die gleiche Verbindungszeichenfolge als Argument für "+ psql +" verwenden, um eine Verbindung mit der verwalteten PostgreSQL-Datenbank herzustellen -Datenbank-zu-Postgres-mit-Pgloader # step-1-% E2% 80% 94- (optional) -Erstellen-einer-Beispieldatenbank-und-Tabelle-in-MySQL [www.digitalocean.com/community/ Tutorials / Migrieren von MySQL-Datenbanken nach Postgres mit Pgloader # step-1-% E2% 80% 94- (optional) Erstellen einer Beispieldatenbank und einer Tabelle in MySQL ] bestätigen, dass die Migration erfolgreich war:

psql postgres://doadmin:@/defaultdb?sslmode=require

Führen Sie dann die folgende Abfrage aus, um zu überprüfen, ob pgLoader die Daten korrekt migriert hat:

SELECT * FROM source_db.sample_table;
Output employee_id | first_name |  last_name  | start_date |   salary
-------------+------------+-------------+------------+------------
          1 | Elizabeth  | Cotten      | 2007-11-11 | $105433.18
          2 | Yanka      | Dyagileva   | 2017-10-30 | $107540.67
          3 | Lee        | Dorsey      | 2013-06-04 | $118024.04
          4 | Kasey      | Chambers    | 2010-08-18 | $116456.98
          5 | Bram       | Tchaikovsky | 2018-09-16 | $61989.50
(5 rows)

Dies bestätigt, dass pgLoader Ihre MySQL-Datenbank erfolgreich auf Ihre verwaltete PostgreSQL-Instanz migriert hat.

Fazit

pgLoader ist ein flexibles Tool, das eine Datenbankmigration mit einem einzigen Befehl ausführen kann. Mit ein paar Konfigurationsänderungen kann eine gesamte Datenbank mithilfe einer sicheren SSL / TLS-Verbindung von einem physischen Computer auf einen anderen migriert werden. Wir hoffen, dass Sie durch das Befolgen dieses Lernprogramms ein besseres Verständnis der Funktionen und potenziellen Anwendungsfälle von pgLoader erhalten.

Nach der Migration Ihrer Daten auf PostgreSQL sind möglicherweise die folgenden Lernprogramme von Interesse: