Uso de bases de datos MySQL con la extensión mysql_fdw - Amazon Relational Database Service

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.

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
  1. 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 comandos psql de este modo:

    psql --host=your-DB-instance.aws-region.rds.amazonaws.com --port=5432 --username=postgres –-password
  2. Instale 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.

  1. 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
  2. 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 to user1; 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.

  1. 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
  2. Conceda permiso de uso a un usuario que no tiene permisos rds_superuser, por ejemplo user1.

    test=> GRANT USAGE ON FOREIGN SERVER mysqldb TO user1; GRANT
  3. Conéctese comouser1 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
  4. 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
  5. Ejecute una consulta simple en la tabla externa:

    test=> SELECT * FROM mytab; a | b ---+------- 1 | apple (1 row)
  6. 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 en el manual de referencia de MySQL.

MySQL 5.7, MySQL 8.0 MySQL 5.6

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

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

Para obtener más información acerca de la extensión mysql_fdw, consulte la documentación sobre mysql_fdw.