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.
Themen
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
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 Benutzernamepostgres. Sie können sich mit dempsql-Befehlszeilen-Tool wie folgt verbinden:psql --host=your-DB-instance.aws-region.rds.amazonaws.com --port=5432 --username=postgres –-passwordInstallieren 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.
Erstellen Sie einen fremden Server auf der RDS-for-PostgreSQL-DB-Instance:
postgres=>CREATE SERVERmysql-dbFOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'db-name.111122223333.aws-region.rds.amazonaws.com', port '3306');CREATE SERVERGewä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 SERVERmysql-dbtouser1;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.
Erstellen Sie einen fremden Server in der RDS-für-PostgreSQL-DB-Instance:
test=>CREATE SERVERmysqldbFOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'your-DB.aws-region.rds.amazonaws.com', port '3306');CREATE SERVERGewähren Sie einem Benutzer, der keine
rds_superuser-Berechtigungen hat, die Nutzung, zum Beispieluser1:test=>GRANT USAGE ON FOREIGN SERVER mysqldb TO user1;GRANTStellen Sie eine Verbindung als
user1(Benutzer 1) her und erstellen Sie dann eine Zuordnung zum MySQL-Benutzer:test=>CREATE USER MAPPING FORuser1SERVER mysqldb OPTIONS (username 'myuser', password 'mypassword');CREATE USER MAPPINGErstellen Sie eine fremde Tabelle, die mit der MySQL-Tabelle verknüpft ist:
test=>CREATE FOREIGN TABLEmytab(a int, b text) SERVER mysqldb OPTIONS (dbname 'test', table_name '');CREATE FOREIGN TABLEFühren Sie eine einfache Abfrage mit der fremden Tabelle aus:
test=>SELECT * FROM mytab;a | b ---+------- 1 | apple (1 row)Sie können der MySQL-Tabelle Daten hinzufügen, ändern und daraus entfernen. Beispiel:
test=>INSERT INTO mytab values (2, 'mango');INSERT 0 1Fü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
| MySQL 5.7, MySQL 8.0 | MySQL 5.6 |
|---|---|
|
|
|
Weitere Informationen zur Erweiterung mysql_fdw finden Sie in der mysql_fdw