Arbeiten mit MySQL-Datenbanken mithilfe der Erweiterung mysql_fdw - Amazon Relational Database Service

Arbeiten mit MySQL-Datenbanken mithilfe der Erweiterung mysql_fdw

Um von Ihrer DB-Instance für RDS für PostgreSQL auf eine MySQL-kompatible Datenbank zuzugreifen, können Sie die mysql_fdw-Erweiterung installieren und verwenden. Mit diesem Fremddaten-Wrapper können Sie mit RDS für MySQL, Aurora MySQL, MariaDB und anderen MySQL-kompatiblen Datenbanken arbeiten. Die Verbindung der DB-Instance für RDS für PostgreSQL mit der MySQL-Datenbank wird je nach Client- und Serverkonfigurationen bestmöglich verschlüsselt. Sie können die Verschlüsselung jedoch erzwingen, wenn Sie möchten. Weitere Informationen finden Sie unter Verwenden der Verschlüsselung während der Übertragung mit der Erweiterung.

Die mysql_fdw-Erweiterung wird in Amazon RDS für PostgreSQL Version 14.2, 13.6 und neueren Versionen unterstützt. Es werden Auswahlen, Einfügungen, Updates und Löschungen einer RDS-für-PostgreSQL-DB in Tabellen einer MySQL-kompatiblen Datenbank-Instance unterstützt.

Einrichten der RDS-für-PostgreSQL-DB zur Verwendung der mysql_fdw-Erweiterung

Das Einrichten der mysql_fdw-Erweiterung auf der RDS-für-PostgreSQL-DB-Instance umfasst das Laden der Erweiterung in die DB-Instance und das anschließende Erstellen des Verbindungspunkts mit der MySQL-DB-Instance. Für diese Aufgabe benötigen Sie folgende Details zur MySQL-DB-Instance:

  • Hostname oder Endpunkt. Sie können den Endpunkt für eine RDS-für-MySQL-DB-Instance mithilfe der Konsole ermitteln. Wählen Sie die Registerkarte „Connectivity & security“ (Konnektivität und Sicherheit) aus und sehen Sie im Abschnitt „Endpoint and port“ (Endpunkt und Port) nach.

  • Port-Nummer. Die Standardport-Nummer für MySQL ist 3306.

  • Name der Datenbank. Die DB-ID.

Sie müssen auch Zugriff auf die Sicherheitsgruppe oder die Zugriffssteuerungsliste (ACL) für den MySQL-Port 3306 gewähren. ebenso wiedie RDS-für-PostgreSQL-DB-Instance und die RDS-für-MySQL-DB-Instance benötigen Zugriff auf Port 3306. Wenn der Zugriff nicht korrekt konfiguriert ist, wird beim Versuch, eine Verbindung mit einer MySQL-kompatiblen Tabelle herzustellen, eine Fehlermeldung ähnlich wie die folgende angezeigt:

ERROR: failed to connect to MySQL: Can't connect to MySQL server on 'hostname.aws-region.rds.amazonaws.com:3306' (110)

Im folgenden Verfahren erstellen Sie (als rds_superuser-Konto) den fremden Server. Anschließend gewähren Sie bestimmten Benutzern Zugriff auf den fremden Server. Diese Benutzer erstellen dann ihre eigenen Zuordnungen zu den entsprechenden MySQL-Benutzerkonten zur Zusammenarbeit mit der MySQL-DB-Instance.

So greifen Sie mit mysql_fdw auf einen MySQL-Datenbankserver zu
  1. Stellen Sie über ein Konto, das die rds_superuser-Rolle enthält, eine Verbindung mit Ihrer PostgreSQL-DB-Instance her. Wenn Sie die Standardwerte beim Erstellen der RDS-für-PostgreSQL-DB-Instance akzeptiert haben, lautet der Benutzername postgres. Sie können sich mit dem psql-Befehlszeilen-Tool wie folgt verbinden:

    psql --host=your-DB-instance.aws-region.rds.amazonaws.com --port=5432 --username=postgres –-password
  2. Installieren Sie die mysql_fdw-Erweiterung wie folgt:

    postgres=> CREATE EXTENSION mysql_fdw; CREATE EXTENSION

Nachdem die Erweiterung auf der RDS-für-PostgreSQL-DB-Instance installiert wurde, richten Sie den fremden Server ein, der die Verbindung mit einer MySQL-Datenbank bereitstellt.

So erstellen Sie den fremden Server

Führen Sie diese Aufgaben auf der RDS-für-PostgreSQL-DB-Instance aus. Die Schritte setzen voraus, dass Sie als Benutzer mit rds_superuser-Berechtigungen wie postgres verbunden sind.

  1. Erstellen Sie einen fremden Server auf der RDS-for-PostgreSQL-DB-Instance:

    postgres=> CREATE SERVER mysql-db FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'db-name.111122223333.aws-region.rds.amazonaws.com', port '3306'); CREATE SERVER
  2. Gewähren Sie den entsprechenden Benutzern Zugriff auf den fremden Server. Dies sollten keine Administratorbenutzer sein, d. h. Benutzer ohne rds_superuser-Rolle.

    postgres=> GRANT USAGE ON FOREIGN SERVER mysql-db to user1; GRANT

PostgreSQL-Benutzer erstellen und verwalten ihre eigenen Verbindungen mit der MySQL-Datenbank über den fremden Server.

Beispiel: Arbeiten mit einer RDS-für-MySQL-Datenbank von RDS für PostgreSQL

Angenommen, Sie haben eine einfache Tabelle auf einer RDS-für-PostgreSQL-DB-Instance. Ihre RDS-für-PostgreSQL-Benutzer möchten (SELECT)-, INSERT-, UPDATE- und DELETE-Elemente in dieser Tabelle abfragen. Nehmen wir an, dass die mysql_fdw-Erweiterung auf Ihrer RDS-für-PostgreSQL-DB-Instance erstellt wurde, wie im vorherigen Verfahren beschrieben. Nachdem Sie eine Verbindung mit der RDS-für-PostgreSQL-DB-Instance als Benutzer mit rds_superuser-Berechtigungen hergestellt haben, können Sie mit den folgenden Schritten fortfahren.

  1. Erstellen Sie einen fremden Server in der RDS-für-PostgreSQL-DB-Instance:

    test=> CREATE SERVER mysqldb FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'your-DB.aws-region.rds.amazonaws.com', port '3306'); CREATE SERVER
  2. Gewähren Sie einem Benutzer, der keine rds_superuser-Berechtigungen hat, die Nutzung, zum Beispiel user1:

    test=> GRANT USAGE ON FOREIGN SERVER mysqldb TO user1; GRANT
  3. Stellen Sie eine Verbindung als user1 (Benutzer 1) her und erstellen Sie dann eine Zuordnung zum MySQL-Benutzer:

    test=> CREATE USER MAPPING FOR user1 SERVER mysqldb OPTIONS (username 'myuser', password 'mypassword'); CREATE USER MAPPING
  4. Erstellen Sie eine fremde Tabelle, die mit der MySQL-Tabelle verknüpft ist:

    test=> CREATE FOREIGN TABLE mytab (a int, b text) SERVER mysqldb OPTIONS (dbname 'test', table_name ''); CREATE FOREIGN TABLE
  5. Führen Sie eine einfache Abfrage mit der fremden Tabelle aus:

    test=> SELECT * FROM mytab; a | b ---+------- 1 | apple (1 row)
  6. Sie können der MySQL-Tabelle Daten hinzufügen, ändern und daraus entfernen. Beispiel:

    test=> INSERT INTO mytab values (2, 'mango'); INSERT 0 1

    Führen Sie die SELECT-Abfrage noch einmal aus, um die Ergebnisse zu sehen:

    test=> SELECT * FROM mytab ORDER BY 1; a | b ---+------- 1 | apple 2 | mango (2 rows)

Verwenden der Verschlüsselung während der Übertragung mit der Erweiterung

Die Verbindung mit MySQL über RDS für PostgreSQL verwendet standardmäßig die Verschlüsselung während der Übertragung (TLS/SSL). Die Verbindung wird jedoch nicht verschlüsselt, wenn sich die Client- und Serverkonfiguration unterscheiden. Sie können die Verschlüsselung für alle ausgehenden Verbindungen erzwingen, indem Sie die Option REQUIRE SSL in den RDS-für-MySQL-Benutzerkonten angeben. Derselbe Ansatz funktioniert auch für MariaDB- und Aurora-MySQL-Benutzerkonten.

Für MySQL-Benutzerkonten, die für REQUIRE SSL konfiguriert sind, schlägt der Verbindungsversuch fehl, wenn keine sichere Verbindung hergestellt werden kann.

Um die Verschlüsselung für vorhandene MySQL-Datenbankbenutzerkonten durchzusetzen, können Sie den Befehl ALTER USER verwenden. Die Syntax variiert je nach MySQL-Version, wie in der folgenden Tabelle gezeigt. Weitere Informationen finden Sie unter ALTER USER im MySQL-Referenzhandbuch.

MySQL 5.7, MySQL 8.0 MySQL 5.6

ALTER USER 'user'@'%' REQUIRE SSL;

GRANT USAGE ON *.* to 'user'@'%' REQUIRE SSL;

Weitere Informationen zur Erweiterung mysql_fdw finden Sie in der mysql_fdw-Dokumentation.