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.
Tópicos
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
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 comandopsql
da seguinte forma:psql --host=
your-DB-instance
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres –-passwordInstale 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
.
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
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
touser1
;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.
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
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
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
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
Execute uma consulta simples na tabela externa:
test=>
SELECT * FROM mytab;
a | b ---+------- 1 | apple (1 row)
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
MySQL 5.7, MySQL 8.0 | MySQL 5.6 |
---|---|
|
|
Para obter mais informações sobre a extensão mysql_fdw
, consulte a documentação do mysql_fdw