

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Travailler avec des bases de données MySQL en utilisant l'extension mysql\_fdw
<a name="postgresql-mysql-fdw"></a>

Pour accéder à une MySQL-compatible base de données depuis votre instance de base de données RDS pour PostgreSQL, vous pouvez installer et utiliser l'extension. `mysql_fdw` Ce wrapper de données étrangères vous permet de travailler avec RDS pour MySQL, Aurora MySQL, MariaDB et d'autres bases de données. MySQL-compatible La connexion de votre instance de base de données RDS for PostgreSQL à la base de données MySQL est chiffrée au mieux, en fonction des configurations du client et du serveur. Cependant, vous pouvez imposer le chiffrement si vous le souhaitez. Pour de plus amples informations, veuillez consulter [Utilisation du chiffrement en transit avec l'extension](#postgresql-mysql-fdw.encryption-in-transit). 

L'extension `mysql_fdw` est prise en charge par Amazon RDS for PostgreSQL versions 14.2 et 13.6 et ultérieures. Il prend en charge les sélections, les insertions, les mises à jour et les suppressions depuis une base de données RDS pour PostgreSQL vers des tables d'une instance de base de données. MySQL-compatible 

**Topics**
+ [Configuration de votre base de données RDS for PostgreSQL pour utiliser l'extension mysql\_fdw](#postgresql-mysql-fdw.setting-up)
+ [Exemple : utilisation d'une base de données RDS for MySQL à partir de RDS for PostgreSQL](#postgresql-mysql-fdw.using-mysql_fdw)
+ [Utilisation du chiffrement en transit avec l'extension](#postgresql-mysql-fdw.encryption-in-transit)

## Configuration de votre base de données RDS for PostgreSQL pour utiliser l'extension mysql\_fdw
<a name="postgresql-mysql-fdw.setting-up"></a>

La configuration de l'extension `mysql_fdw` sur votre instance de base de données RDS for PostgreSQL implique le chargement de l'extension dans votre instance de base de données, puis la création du point de connexion à l'instance de base de données MySQL. Pour cette tâche, vous devez disposer des informations suivantes sur l'instance de base de données MySQL :
+ Nom d'hôte ou point de terminaison. Pour une instance de base de données RDS for MySQL, vous pouvez trouver le point de terminaison à l'aide de la console. Sélectionnez l'onglet Connectivité et sécurité et regardez dans la section « Point de terminaison et port ». 
+ Numéro de port. Le numéro de port par défaut pour MySQL est 3306. 
+ Nom du moteur de la base de données. L'identifiant de la base de données. 

Vous devez également fournir un accès sur le groupe de sécurité ou la liste de contrôle d'accès (ACL) pour le port MySQL 3306. Les instances de bases de données RDS for PostgreSQL et RDS for MySQL doivent avoir accès au port 3306. Si l'accès n'est pas configuré correctement, lorsque vous essayez de vous connecter à la MySQL-compatible table, un message d'erreur semblable au suivant s'affiche :

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

Dans la procédure suivante, vous (en tant que compte `rds_superuser`) créez le serveur externe. Vous accordez ensuite l'accès au serveur externe à des utilisateurs spécifiques. Ces utilisateurs créent ensuite leurs propres mappages vers les comptes utilisateurs MySQL appropriés pour travailler avec l'instance de base de données MySQL. 

**Pour utiliser mysql\_fdw pour accéder à un serveur de base de données MySQL**

1. Connectez-vous à votre instance de base de données PostgreSQL en utilisant un compte qui a le rôle `rds_superuser`. Si vous avez accepté les valeurs par défaut lors de la création de votre instance de base de donnés RDS for PostgreSQL, le nom d'utilisateur est `postgres`, et vous pouvez vous connecter à l'aide de l'outil de ligne de commande `psql` comme suit :

   ```
   psql --host={{your-DB-instance}}.{{aws-region}}.rds.amazonaws.com --port=5432 --username=postgres –-password
   ```

1. Installez l'extension `mysql_fdw` comme suit :

   ```
   postgres=> CREATE EXTENSION mysql_fdw;
   CREATE EXTENSION
   ```

Une fois l'extension installée sur votre instance de base de données RDS for PostgreSQL, vous devez configurer le serveur externe qui fournit la connexion à une base de données MySQL.

**Pour créer le serveur externe**

Effectuez ces tâches sur l'instance de base de données RDS for PostgreSQL. Les étapes supposent que vous êtes connecté en tant qu'utilisateur avec des privilèges `rds_superuser`, tels que `postgres`. 

1. Créer un serveur externe dans l'instance de base de données 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
   ```

1. Accordez aux utilisateurs appropriés l'accès au serveur externe. Il doit s'agir d'utilisateurs non administrateurs, c'est-à-dire d'utilisateurs sans rôle `rds_superuser`.

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

Les utilisateurs de PostgreSQL créent et gèrent leurs propres connexions à la base de données MySQL via le serveur externe.

## Exemple : utilisation d'une base de données RDS for MySQL à partir de RDS for PostgreSQL
<a name="postgresql-mysql-fdw.using-mysql_fdw"></a>

Supposons que vous ayez une table simple sur une instance de base de données RDS for PostgreSQL. Vos utilisateurs RDS for PostgreSQL souhaitent interroger les éléments (`SELECT`), `INSERT`, `UPDATE` et `DELETE` de cette table. Supposons que l'extension `mysql_fdw` a été créée sur votre instance de base de données RDS for PostgreSQL, comme indiqué dans la procédure précédente. Après vous être connecté à l'instance de base de données RDS for PostgreSQL en tant qu'utilisateur disposant de privilèges `rds_superuser`, vous pouvez procéder aux étapes suivantes. 

1. Créez un serveur externe sur l'instance de base de données RDS for PostgreSQL : 

   ```
   test=> CREATE SERVER {{mysqldb}} FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host '{{your-DB}}.{{aws-region}}.rds.amazonaws.com', port '3306');
   CREATE SERVER
   ```

1. Accordez l'utilisation à un utilisateur dépourvu d'autorisations `rds_superuser`, par exemple `user1` :

   ```
   test=> GRANT USAGE ON FOREIGN SERVER mysqldb TO user1;
   GRANT
   ```

1. Connectez-vous en tant que{{user1}}, puis créez un mappage vers l'utilisateur MySQL : 

   ```
   test=> CREATE USER MAPPING FOR {{user1}} SERVER mysqldb OPTIONS (username '{{myuser}}', password '{{mypassword}}');
   CREATE USER MAPPING
   ```

1. Créez une table externe liée à la table MySQL :

   ```
   test=> CREATE FOREIGN TABLE {{mytab}} (a int, b text) SERVER mysqldb OPTIONS (dbname 'test', table_name '');
   CREATE FOREIGN TABLE
   ```

1. Exécutez une requête simple dans la table externe :

   ```
   test=> SELECT * FROM mytab;
   a |   b
   ---+-------
   1 | apple
   (1 row)
   ```

1. Vous pouvez ajouter, modifier et supprimer des données de la table MySQL. Par exemple : 

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

   Exécutez à nouveau la requête `SELECT` pour voir les résultats :

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

## Utilisation du chiffrement en transit avec l'extension
<a name="postgresql-mysql-fdw.encryption-in-transit"></a>

La connexion à MySQL depuis RDS pour PostgreSQL utilise le chiffrement en transit () par défaut. TLS/SSL Toutefois, la connexion redevient non chiffrée lorsque la configuration du client et du serveur diffère. Vous pouvez imposer le chiffrement pour toutes les connexions sortantes en spécifiant l'option `REQUIRE SSL` sur les comptes d'utilisateur RDS for MySQL. Cette même approche fonctionne également pour les comptes utilisateurs MariaDB et Aurora MySQL. 

Pour les comptes utilisateurs MySQL configurés pour `REQUIRE SSL`, la tentative de connexion échoue si une connexion sécurisée ne peut être établie.

Pour appliquer le chiffrement aux comptes d'utilisateurs de bases de données MySQL existants, vous pouvez utiliser la commande `ALTER USER`. La syntaxe varie en fonction de la version MySQL, comme indiqué dans le tableau suivant. Pour plus d'informations, consultez [ALTER USER](https://dev.mysql.com/doc/refman/8.0/en/alter-user.html) dans le *Manuel de référence de MySQL*.


| MySQL 5.7, MySQL 8.0 | MySQL 5.6 | 
| --- | --- | 
| `ALTER USER '{{user}}'@'%' REQUIRE SSL;` | `GRANT USAGE ON *.* to '{{user}}'@'%' REQUIRE SSL;` | 

Pour plus d'informations sur l'extension `mysql_fdw`, consultez la documentation [mysql\_fdw](https://github.com/EnterpriseDB/mysql_fdw). 