联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话:15897897836 QQ:2106973531

mysql_fdw的使用教程

mysql_fdw 是 PostgreSQL 的一个外部数据包装器(Foreign Data Wrapper, FDW),用于在 PostgreSQL 中访问 MySQL 数据库的数据。通过 mysql_fdw,你可以在 PostgreSQL 中直接查询、插入、更新和删除 MySQL 数据库中的数据,就像操作本地表一样。

1. 安装 mysql_fdw

(1) 安装依赖

确保系统中已安装以下依赖:

  • PostgreSQL 开发包

  • MySQL 客户端库

在 Ubuntu/Debian 系统上:

sudo apt-get install postgresql-server-dev-<version> libmysqlclient-dev

在 CentOS/RHEL 系统上:

sudo yum install postgresql-server-devel mysql-devel

(2) 下载并编译 mysql_fdw

  1. 下载 mysql_fdw 源码:

    git clone https://github.com/EnterpriseDB/mysql_fdw.git
    cd mysql_fdw

  2. 编译并安装:

    make USE_PGXS=1
    sudo make USE_PGXS=1 install

(3) 在 PostgreSQL 中加载扩展

  1. 连接到 PostgreSQL:

    psql -U postgres -d your_database

  2. 创建 mysql_fdw 扩展:

    CREATE EXTENSION mysql_fdw;


2. 配置 mysql_fdw

(1) 创建外部服务器

  1. 在 PostgreSQL 中创建外部服务器,指向 MySQL 数据库:

    CREATE SERVER mysql_server
    FOREIGN DATA WRAPPER mysql_fdw
    OPTIONS (host 'mysql_host', port '3306');

    • mysql_host 替换为 MySQL 服务器的主机名或 IP 地址。

    • 如果需要指定端口,可以修改 port 参数。

(2) 创建用户映射

  1. 创建用户映射,将 PostgreSQL 用户与 MySQL 用户关联:

    CREATE USER MAPPING FOR postgres
    SERVER mysql_server
    OPTIONS (username 'mysql_user', password 'mysql_password');

    • mysql_usermysql_password 替换为 MySQL 数据库的用户名和密码。


3. 使用mysql_fdw

(1) 创建外部表

  1. 在 PostgreSQL 中创建外部表,映射到 MySQL 中的表:

    CREATE FOREIGN TABLE mysql_table (
        id INT,
        name TEXT,
        created_at TIMESTAMP
    )
    SERVER mysql_server
    OPTIONS (dbname 'mysql_database', table_name 'mysql_table');

    • mysql_database 替换为 MySQL 数据库名称。

    • mysql_table 替换为 MySQL 表名称。

(2) 查询外部表

  1. 在 PostgreSQL 中查询外部表:

    SELECT * FROM mysql_table;

(3) 插入数据

  1. 在 PostgreSQL 中向外部表插入数据:

    INSERT INTO mysql_table (id, name, created_at)
    VALUES (1, 'John Doe', NOW());

(4) 更新数据

  1. 在 PostgreSQL 中更新外部表数据:

    UPDATE mysql_table
    SET name = 'Jane Doe'
    WHERE id = 1;

(5) 删除数据

  1. 在 PostgreSQL 中删除外部表数据:

    DELETE FROM mysql_table
    WHERE id = 1;


4. 高级功能

(1) 批量操作

mysql_fdw 支持批量插入、更新和删除操作,性能接近直接操作 MySQL 数据库。

(2) 查询下推

mysql_fdw 支持查询下推(Pushdown),将部分查询条件直接发送到 MySQL 执行,减少数据传输量。

(3) 事务支持

mysql_fdw 支持事务操作,确保数据一致性。


5. 注意事项

  • 确保 PostgreSQL 和 MySQL 之间的网络连接畅通。

  • 确保 MySQL 用户具有访问目标数据库和表的权限。

  • 如果 MySQL 表结构发生变化,需要重新创建外部表。


6. 示例:完整流程

(1) 在 MySQL 中创建表

CREATE TABLE test_table (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    created_at TIMESTAMP
);

(2) 在 PostgreSQL 中配置 mysql_fdw

CREATE SERVER mysql_server
FOREIGN DATA WRAPPER mysql_fdw
OPTIONS (host 'localhost', port '3306');

CREATE USER MAPPING FOR postgres
SERVER mysql_server
OPTIONS (username 'root', password 'password');

CREATE FOREIGN TABLE mysql_test_table (
    id INT,
    name TEXT,
    created_at TIMESTAMP
)
SERVER mysql_server
OPTIONS (dbname 'test_db', table_name 'test_table');

(3) 在 PostgreSQL 中操作 MySQL 表

-- 查询
SELECT * FROM mysql_test_table;

-- 插入
INSERT INTO mysql_test_table (id, name, created_at)
VALUES (1, 'John Doe', NOW());

-- 更新
UPDATE mysql_test_table
SET name = 'Jane Doe'
WHERE id = 1;

-- 删除
DELETE FROM mysql_test_table
WHERE id = 1;

相关文章

从安装PostgreSQL开始
通过以下步骤,你可以在 CentOS 7 上成功安装和配置 PostgreSQL 14。首先,设置 RPM 仓库并安装 PostgreSQL 14 服务器。然后,创建自定义数据存储目录并初始化数据库。接下来,修改启动脚本以使用自定义数据存储目录,并设置 PostgreSQL 监听所有 IP 地址。为了增强安全性,配置密码认证并修改 postgres 超级用户密码。最后,确保所有配置生效,重启 PostgreSQL 服务。通过这些步骤,你将拥有一个配置良好且安全的 PostgreSQL 数据库环境。如果在过程中遇到任何问题,请参考官方文档或寻求专业支持。
checkpoint是什么东西?一个位置?还是一个操作?
checkpoint是一个操作,执行这个操作的开始时刻,会记录当前开始时刻的 WAL 位置作为重做点,这个位置会被保存在文件中。 然后将该重做点之前所有 shared buffer 中的脏页均被刷入到存储。checkpoint又名检查点,一般checkpoint会将某个时间点之前的脏数据全部刷新到磁盘,以实现数据的一致性与完整性。
PostgreSQL 内参:深入解析运行原理【快照篇】
来源于灿哥的:《PostgreSQL 内参:深入解析运行原理》,非常好的一本书。
PG存在的级联删除(ON DELETE CASCADE)
在 PostgreSQL 中,如果你有两张表:用户表(users)和订单表(orders),并且用户表的主键是订单表的外键,那么你可以通过以下步骤来进行实验,删除订单表中的一条数据,然后删除用户表中的一条数据。

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册