Uso de bases de datos MySQL con la extensión mysql_fdw
Para tener acceso desde una instancia de base de datos de RDS para PostgresSQL a una base de datos compatible con MySQL, puede instalar y utilizar la extensión mysql_fdw
. Este contenedor de datos externo le permite trabajar con RDS for MySQL, Aurora MySQL, MariaDB y otras bases de datos compatibles con MySQL. La conexión desde la instancia de base de datos de RDS para PostgreSQL a la base de datos MySQL se cifra tanto como sea posible, depeniendo de la configuración del cliente y del servidor. No obstante, puede aplicar cifrado si lo desea. Para obtener más información, consulte Uso de cifrado en tránsito con la extensión.
La extensión mysql_fdw
es complatible con las versiones de Amazon RDS para PostgreSQL 14.2, 13.6 y posteriores. Es compatible con selecciones, inserciones, actualizaciones y eliminaciones de una base de datos de RDS for PostgreSQL en tablas de una instancia de base de datos compatible con MySQL.
Temas
Configuración de una base de datos de RDS para PostgreSQL para utilizar la extensión mysql_fdw
Para configurar la extensión mysql_fdw
en la instancia de base de datos de RDS para PostgreSQL es necesario cargar la extensión en la instancia y, a continuación, crear el punto de conexión a la instancia de base de datos MySQL. Para esa tarea debe disponer de los siguientes detalles sobre la instancia de base de datos MySQL:
Nombre de host o del punto de conexión. Con una instancia de base de datos de RDS para MySQL el punto de conexión puede encontrarse a través de la consola. Elija la pestaña Conectividad y seguridad y busque en la sección “Punto de enlace y puerto”.
Número de puerto. El número de puerto predeterminado para MySQL es 3306.
Nombre de la base de datos. El identificador de la base de datos.
También tiene que proporcionar acceso en el grupo de seguridad o en la lista de control de acceso (ACL) para el puerto MySQL, 3306. Tanto la instancia de base de datos de RDS para PostgreSQL como la de RDS para MySQL necesitan acceso al puerto 3306. Si el acceso no está configurado correctamente, al intentar conectarse a una tabla compatible con MySQL aparecerá un mensaje de error similar al siguiente:
ERROR: failed to connect to MySQL: Can't connect to MySQL server on 'hostname
.aws-region
.rds.amazonaws.com:3306' (110)
En el procedimiento que sigue, usted (como cuenta de rds_superuser
) crea el servidor externo. A continuación, concede acceso al servidor externo a usuarios específicos. A continuación, estos usuarios crean sus propias asignaciones a las cuentas de usuario de MySQL adecuadas para trabajar con la instancia de base de datos MySQL.
Para utilizar mysql_fdw para acceder a un servidor de base de datos MySQL
Conéctese a la instancia de base de datos PostgreSQL a través de una cuenta que tenga el rol de
rds_superuser
. Si al crear la instancia de base de datos de RDS para PostgreSQL aceptó los valores predeterminados, el nombre de usuario serápostgres
y se podrá conectar mediante la herramienta de línea de comandospsql
de este modo:psql --host=
your-DB-instance
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres –-passwordInstale la extensión
mysql_fdw
de la siguiente manera:postgres=>
CREATE EXTENSION mysql_fdw;
CREATE EXTENSION
Una vez instalada la extensión en la instancia de base de datos de RDS para PostgreSQL, configure el servidor externo que proporciona la conexión a una base de datos MySQL.
Para crear el servidor externo
Realice estas tareas en la instancia de base de datos RDS para PostgreSQL. Para seguir estos pasos se entiende que está conectado como usuario con privilegios rds_superuser
, como postgres
.
Cree un servidor externo en la instancia de base de datos RDS for PostgreSQL:
postgres=>
CREATE SERVER
mysql-db
FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'db-name.111122223333
.aws-region
.rds.amazonaws.com', port '3306');CREATE SERVER
Conceda a los usuarios que corresponsa acceso al servidor externo. Deben ser usuarios que no sean administradores, es decir, usuarios que no tengan el rol
rds_superuser
.postgres=>
GRANT USAGE ON FOREIGN SERVER
mysql-db
touser1
;GRANT
Los usuarios de PostgreSQL crean y administran sus propias conexiones a la base de datos MySQL a través del servidor externo.
Ejemplo: Acceso a una base de datos de RDS para MySQL desde RDS para PostgreSQL
Supongamos que tiene una tabla simple en una instancia de base de datos de PostgreSQL. Los usuarios de RDS para PostgreSQL desean consultar (SELECT
), insertar (INSERT
), actualizar (UPDATE
) y eliminar (DELETE
) elementos de la tabla. Supongamos que la exstensión mysql_fdw
se creó en la instancia de base de datos de RDS for PostgreSQL, como se detalla en el procedimiento anterior. Después de conectarse a la instancia de base de datos de RDS for PostgreSQL como usuario con privilegios rds_superuser
, podrá continuar con los pasos que se describen a continuación.
Cree un servidor externo en la instancia de base de datos de RDS para PostgreSQL:
test=>
CREATE SERVER
mysqldb
FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'your-DB
.aws-region
.rds.amazonaws.com', port '3306');CREATE SERVER
Conceda permiso de uso a un usuario que no tiene permisos
rds_superuser
, por ejemplouser1
.test=>
GRANT USAGE ON FOREIGN SERVER mysqldb TO user1;
GRANT
Conéctese como
user1
y, a continuación, cree una asignación para el usuario de MySQL:test=>
CREATE USER MAPPING FOR
user1
SERVER mysqldb OPTIONS (username 'myuser
', password 'mypassword
');CREATE USER MAPPING
Cree una tabla externa vinculada a la tabla MySQL:
test=>
CREATE FOREIGN TABLE
mytab
(a int, b text) SERVER mysqldb OPTIONS (dbname 'test', table_name '');CREATE FOREIGN TABLE
Ejecute una consulta simple en la tabla externa:
test=>
SELECT * FROM mytab;
a | b ---+------- 1 | apple (1 row)
Puede añadir, modificar y quitar datos de la tabla MySQL. Por ejemplo:
test=>
INSERT INTO mytab values (2, 'mango');
INSERT 0 1
Ejecute la consulta
SELECT
de nuevo para ver los resultados:test=>
SELECT * FROM mytab ORDER BY 1;
a | b ---+------- 1 | apple 2 | mango (2 rows)
Uso de cifrado en tránsito con la extensión
De forma predeterminada, la conexión a MySQL desde RDS para PostgreSQL utiliza cifrado en tránsito (TLS/SSL). No obstante, la conexión vuelve a ser no cifrada cuando la configuración del cliente y del servidor difieren. Puede aplicar el cifrado para todas las conexiones salientes especificando la opción REQUIRE SSL
en las cuentas de usuario de RDS for MySQL. Este mismo método también funciona para las cuentas de usuario de MariaDB y Aurora MySQL.
Para cuentas de usuario MySQL configuradas en REQUIRE SSL
, el intento de conexión falla si no se puede establecer una conexión segura.
Para aplicar el cifrado de cuentas de usuario de bases de datos MySQL existentes, puede utilizar el comando ALTER USER
. La sintaxis varía en función de la versión de MySQL, como se muestra en la siguiente tabla. Para obtener más información, consulte ALTER USER
MySQL 5.7, MySQL 8.0 | MySQL 5.6 |
---|---|
|
|
Para obtener más información acerca de la extensión mysql_fdw
, consulte la documentación sobre mysql_fdw