Trabalhar com bancos de dados MySQL usando a extensão mysql_fdw - Amazon Relational Database Service

Trabalhar com bancos de dados MySQL usando a extensão mysql_fdw

Para acessar um banco de dados compatível com MySQL pela instância de banco de dados RDS para PostgreSQL, você pode instalar e usar a extensão mysql_fdw. Esse invólucro de dados externos permite que você trabalhe com o RDS for MySQL, o Aurora MySQL, o MariaDB e outros bancos de dados compatíveis com MySQL. A conexão do RDS for PostgreSQL com o banco de dados MySQL é criptografada com base no melhor esforço, dependendo das configurações do cliente e do servidor. No entanto, você pode impor a criptografia, se quiser. Para ter mais informações, consulte Usar criptografia em trânsito com a extensão.

A extensão mysql_fdw é compatível com o Amazon RDS para PostgreSQL versão 14.2, 13.6 e posteriores. Ela é compatível com seleções, inserções, atualizações e exclusões de um banco de dados do RDS for PostgreSQL para tabelas em uma instância de banco de dados compatível com MySQL.

Configurar o banco de dados do RDS for PostgreSQL para usar a extensão mysql_fdw

Para configurar a extensão mysql_fdw na instância de banco de dados do RDS para PostgreSQL, é necessário carregar a extensão na instância de banco de dados e, em seguida, criar o ponto de conexão com a instância de banco de dados do MySQL. Para essa tarefa, você precisa ter os seguintes detalhes sobre a instância de banco de dados do MySQL:

  • Nome de host ou endpoint. Para uma instância de banco de dados do RDS for MySQL, você pode encontrar o endpoint usando o console. Escolha a guia “Connectivity & security” (Conectividade e segurança) e procure na seção “Endpoint and port” (Endpoint e porta).

  • Número da porta. O número da porta padrão do MySQL é 3306.

  • O nome do banco de dados. O identificador do banco de dados.

Você também precisa fornecer acesso no grupo de segurança ou na lista de controle de acesso (ACL) para a porta 3306 do MySQL. Tanto o cluster de MySQL precisam acessar a porta 3306. Se o acesso não estiver configurado corretamente, ao tentar se conectar à tabela compatível com o MySQL, será exibida uma mensagem de erro semelhante à seguinte:

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

No procedimento a seguir, você (como a conta rds_superuser) cria o servidor externo. Depois, você concede acesso ao servidor externo a usuários específicos. Em seguida, esses usuários criam seus próprios mapeamentos para as contas de usuário apropriadas do MySQL para trabalhar com a instância de banco de dados do MySQL.

Para usar mysql_fdw a fim de acessar um servidor de banco de dados MySQL
  1. Conecte-se à instância de banco de dados do PostgreSQL usando uma conta que tenha a função rds_superuser. Se tiver aceitado os padrões ao criar a instância de banco de dados do RDS para PostgreSQL, o nome de usuário será postgres e você poderá se conectar usando a ferramenta da linha de comando psql da seguinte forma:

    psql --host=your-DB-instance.aws-region.rds.amazonaws.com --port=5432 --username=postgres –-password
  2. Instale a extensão mysql_fdw da seguinte forma:

    postgres=> CREATE EXTENSION mysql_fdw; CREATE EXTENSION

Depois que a extensão é instalada na instância de banco de dados do RDS for PostgreSQL, você configura o servidor externo que fornece a conexão com um banco de dados do MySQL.

Para criar o servidor externo

Execute essas tarefas na instância de banco de dados do RDS para PostgreSQL. As etapas presumem que você esteja conectado como usuário com privilégios rds_superuser, como postgres.

  1. Crie um servidor externo na instância de banco de dados do RDS para 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 aos usuários apropriados acesso ao servidor externo. Eles devem ser usuários não administradores, ou seja, usuários sem a função rds_superuser.

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

Os usuários do PostgreSQL criam e gerenciam suas próprias conexões com o banco de dados do MySQL por meio do servidor externo.

Exemplo: trabalhar com um banco de dados do RDS para MySQL pelo RDS para PostgreSQL

Suponha que você tenha uma tabela simples em uma instância de banco de dados do RDS para PostgreSQL. Os usuários do RDS para PostgreSQL querem consultar os itens (SELECT), INSERT, UPDATE e DELETE nessa tabela. Suponha que a extensão mysql_fdw foi criada na instância de banco de dados do RDS for PostgreSQL, conforme detalhado no procedimento anterior. Depois de se conectar à instância de banco de dados do RDS for PostgreSQL como um usuário com privilégios rds_superuser, é possível prosseguir com as etapas abaixo.

  1. Crie um servidor externo na instância de banco de dados do 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 uso a um usuário que não tenha permissões rds_superuser; por exemplo, user1:

    test=> GRANT USAGE ON FOREIGN SERVER mysqldb TO user1; GRANT
  3. Conecte-se como user1 e, em seguida, crie um mapeamento para o usuário do MySQL:

    test=> CREATE USER MAPPING FOR user1 SERVER mysqldb OPTIONS (username 'myuser', password 'mypassword'); CREATE USER MAPPING
  4. Crie uma tabela externa vinculada a uma tabela do MySQL:

    test=> CREATE FOREIGN TABLE mytab (a int, b text) SERVER mysqldb OPTIONS (dbname 'test', table_name ''); CREATE FOREIGN TABLE
  5. Execute uma consulta simples na tabela externa:

    test=> SELECT * FROM mytab; a | b ---+------- 1 | apple (1 row)
  6. Você pode adicionar, alterar e remover dados da tabela do MySQL. Por exemplo:

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

    Execute a consulta SELECT novamente para ver os resultados:

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

Usar criptografia em trânsito com a extensão

A conexão com o MySQL pelo RDS for PostgreSQL usa criptografia em trânsito (TLS/SSL) por padrão. No entanto, a conexão volta para não criptografada quando a configuração do cliente e do servidor é diferente. Você pode impor a criptografia para todas as conexões de saída especificando a opção REQUIRE SSL nas contas de usuário do RDS for MySQL. Essa mesma abordagem também funciona para contas de usuário do MariaDB e do Aurora MySQL.

Para contas de usuário do MySQL configuradas como REQUIRE SSL, a tentativa de conexão falhará se não for possível estabelecer uma conexão segura.

Para aplicar criptografia a contas de usuário do banco de dados do MySQL existentes, você pode usar o comando ALTER USER. A sintaxe varia, dependendo da versão do MySQL, conforme mostrado na tabela a seguir. Para obter mais informações, consulte ALTER USER no Manual de referência do MySQL.

MySQL 5.7, MySQL 8.0 MySQL 5.6

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

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

Para obter mais informações sobre a extensão mysql_fdw, consulte a documentação do mysql_fdw.