使用 mysql_fdw 扩展处理 MySQL 数据库
要从 RDS for PostgreSQL 数据库实例访问 MySQL 兼容数据库,您可以安装并使用 mysql_fdw
扩展。这款外部数据包装器允许您使用 RDS for MySQL、Aurora MySQL、MariaDB 和其他 MySQL 兼容数据库。从 RDS for PostgreSQL 数据库实例到 MySQL 数据库的连接会尽可能加密,具体取决于客户端和服务器配置。但是,如果您愿意,可以强制加密。有关更多信息,请参阅 将传输中加密与扩展配合使用。
mysql_fdw
扩展在 Amazon RDS for PostgreSQL 版本 14.2、13.6 以及更高版本中受支持。它支持从 RDS for PostgreSQL 数据库到 MySQL 兼容数据库实例上的表的选择、插入、更新和删除。
主题
将 RDS for PostgreSQL 数据库设置为使用 mysql_fdw 扩展
在您的 RDS for PostgreSQL 数据库实例上设置 mysql_fdw
扩展涉及在您的数据库实例中加载扩展,然后创建到 MySQL 数据库实例的连接点。对于该任务,您需要了解有关 MySQL 数据库实例的以下详细信息:
主机名或终端节点。对于RDS for MySQL 数据库实例,您可以使用控制台查找终端节点。选择 Connectivity & security(连接和安全)选项卡,然后查看 Endpoint and port(终端节点和端口)部分。
端口号。MySQL 的默认端口是 3306。
数据库的名称。数据库标识符。
您还需要为 MySQL 端口 3306 提供对安全组或访问控制列表 (ACL) 的访问权限。RDS for PostgreSQL 数据库实例和 RDS for MySQL 数据库实例均需要访问端口 3306。如果访问权限配置不正确,当尝试连接到 MySQL 兼容表时,您会看到一条与以下内容类似的错误消息:
ERROR: failed to connect to MySQL: Can't connect to MySQL server on 'hostname
.aws-region
.rds.amazonaws.com:3306' (110)
在以下过程中,您(作为 rds_superuser
账户)创建外部服务器。然后,您将访问外部服务器的权限授予特定用户。然后,这些用户创建其自身到相应 MySQL 用户账户的映射以使用 MySQL 数据库实例。
使用 mysql_fdw 访问 MySQL 数据库服务器
使用具有
rds_superuser
角色的账户连接到您的 PostgreSQL 数据库实例。如果在创建 RDS for PostgreSQL 数据库实例时接受默认值,则用户名为postgres
,您可以使用psql
命令行工具进行连接,如下所示:psql --host=
your-DB-instance
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres –-password按如下方式安装
mysql_fdw
扩展:postgres=>
CREATE EXTENSION mysql_fdw;
CREATE EXTENSION
在 RDS for PostgreSQL 数据库实例上安装扩展后,您可以设置提供与 MySQL 数据库连接的外部服务器。
创建外部服务器
在 RDS for PostgreSQL 数据库实例上执行这些任务。这些步骤假定您以具有 rds_superuser
特权的用户身份连接,例如 postgres
。
在 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
向适当的用户授予访问外部服务器的权限。这些用户应该是非管理员用户,即,没有
rds_superuser
角色的用户。postgres=>
GRANT USAGE ON FOREIGN SERVER
mysql-db
touser1
;GRANT
PostgreSQL 用户通过外部服务器创建和管理其自身与 MySQL 数据库的连接。
示例:从 RDS for PostgreSQL 使用 RDS for MySQL 数据库
假设您在 RDS for PostgreSQL 数据库实例上有一个简单的表。您的 RDS for PostgreSQL 用户想要查询该表中的(SELECT
)、INSERT
、UPDATE
和 DELETE
项目。假设 mysql_fdw
扩展是在您的 RDS for PostgreSQL 数据库实例上创建的,如前面的过程中所述。以具有 rds_superuser
权限的用户身份连接到 RDS for PostgreSQL 数据库实例后,您可以继续执行以下步骤。
在 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
将使用权授予没有
rds_superuser
权限的用户,例如user1
:test=>
GRANT USAGE ON FOREIGN SERVER mysqldb TO user1;
GRANT
作为
user1
连接,然后创建一个到 MySQL 用户的映射:test=>
CREATE USER MAPPING FOR
user1
SERVER mysqldb OPTIONS (username 'myuser
', password 'mypassword
');CREATE USER MAPPING
创建链接到 MySQL 表的外部表:
test=>
CREATE FOREIGN TABLE
mytab
(a int, b text) SERVER mysqldb OPTIONS (dbname 'test', table_name '');CREATE FOREIGN TABLE
针对外表运行简单查询:
test=>
SELECT * FROM mytab;
a | b ---+------- 1 | apple (1 row)
您可以从 MySQL 表中添加、更改和删除数据。例如:
test=>
INSERT INTO mytab values (2, 'mango');
INSERT 0 1
再次运行
SELECT
查询以查看结果:test=>
SELECT * FROM mytab ORDER BY 1;
a | b ---+------- 1 | apple 2 | mango (2 rows)
将传输中加密与扩展配合使用
默认情况下,从 RDS for PostgreSQL 到 MySQL 的连接使用传输中加密(TLS/SSL)。但是,当客户端和服务器配置不同时,连接会回退为非加密状态。您可以通过在 RDS for MySQL 用户账户上指定 REQUIRE SSL
选项来对所有传出连接强制加密。这种方法也适用于 MariaDB 和 Aurora MySQL 用户账户。
对于配置为 REQUIRE SSL
的 MySQL 用户帐户,如果无法建立安全连接,则连接尝试将失败。
要对现有 MySQL 数据库用户帐户强制加密,可以使用 ALTER USER
命令。根据 MySQL 版本的不同,语法有所不同,如下表所示。有关更多信息,请参阅《MySQL 参考手册》中的 ALTER USER
MySQL 5.7、MySQL 8.0 | MySQL 5.6 |
---|---|
|
|
有关 mysql_fdw
扩展的更多信息,请参阅 mysql_fdw