PostgreSQL的mysql_fdw使用

PostgreSQL的mysql_fdw使用,第1张

概述要迁移Mysql的数据到PostgreSQL上来,有很多的办法,比如一些工具navicat,jmyetl等,但通常是要收费,而且效率和稳定性不一定好,最保守的办法是自己写一些脚本,当然也有一些开源的工具,比如要介绍的mysql_fdw,使用时本地需要建mysql软件和postgresql数据库,下面的测试例子是mysql和pg装在一起的。 mysql_fdw是一款基于BSD协议的开源工具,目前还不 要迁移MysqL的数据到Postgresql上来,有很多的办法,比如一些工具navicat,jmyetl等,但通常是要收费,而且效率和稳定性不一定好,最保守的办法是自己写一些脚本,当然也有一些开源的工具,比如要介绍的MysqL_fDW,使用时本地需要建MysqL软件和postgresql数据库,下面的测试例子是MysqL和pg装在一起的。

MysqL_fDW是一款基于BSD协议的开源工具,目前还不是postgresql内置,最新版本是1.0.1。

一、环境
CentOS 6.3
Postgresql 9.3.4
Host 10.1.11.73

二、MysqL的数据准备
MysqL> create database db_kenyon;query OK,1 row affected (0.01 sec)MysqL> create table tbl_kenyon(ID int,vname varchar(48));query OK,0 rows affected (0.00 sec)MysqL> insert into tbl_kenyon values(1,'test');query OK,1 row affected (0.00 sec)MysqL> insert into tbl_kenyon values(2,'kenyon');query OK,1 row affected (0.00 sec)MysqL> insert into tbl_kenyon values(null,'it\'s null');query OK,1 row affected (0.00 sec)MysqL> insert into tbl_kenyon values(4,null);query OK,1 row affected (0.01 sec)MysqL> select * from tbl_kenyon;+------+-----------+| ID   | vname     |+------+-----------+|    1 | test      ||    2 | kenyon    || NulL | it's null ||    4 | NulL      |+------+-----------+4 rows in set (0.00 sec)MysqL> grant select on db_kenyon.tbl_kenyon to 'usr_kenyon'@'%' IDentifIEd by '123456';query OK,0 rows affected (0.00 sec)MysqL> flush privileges;query OK,0 rows affected (0.00 sec)MysqL> select host,user,password from MysqL.user;+-----------+------------+-------------------------------------------+| host      | user       | password                                  |+-----------+------------+-------------------------------------------+| localhost | root       | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || db1       | root       | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || 127.0.0.1 | root       | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || ::1       | root       | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || %         | usr_kenyon | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |+-----------+------------+-------------------------------------------+5 rows in set (0.00 sec)
三、 安装使用 MysqL_fDW

下载地址: http://pgxn.org/dist/mysql_fdw/
安装时使用postgres用户,参考README,有两步
make USE_PGXS=1
make USE_PGXS=1 install
安装完可能会有的异常,ERROR: Could not load library "/home/postgres/lib/MysqL_fDW.so": libMysqLclIEnt.so.18: cannot open shared object file: No such file or directory 将MysqL下的libMysqLclIEnt.so.18文件拷贝到/home/postgres/lib下面或者做个软连接就可以了

1.创建extension扩展
postgres=# create extension MysqL_fDW ;CREATE EXTENSION
2.创建server
postgres=# CREATE SERVER MysqL_svr  FOREIGN DATA WRAPPER MysqL_fDW  OPTIONS (address '10.1.11.73',port '3306');CREATE SERVER
3.创建一个或多个外部表(foreign table)
postgres=# CREATE FOREIGN table pg_MysqL_tbl1 (ID integer,name text)    SERVER MysqL_svr    OPTIONS (table 'db_kenyon.tbl_kenyon');CREATE FOREIGN tablepostgres=# CREATE FOREIGN table pg_MysqL_tbl2 (    ID integer,vname text)   SERVER MysqL_svr   OPTIONS (query 'SELECT ID,vname FROM db_kenyon.tbl_kenyon WHERE ID<>2;');CREATE FOREIGN table
4.创建Postgresql的fDW查询用户,pg_hba配置略

postgres=# create user u_select ENCRYPTED PASSWORD '123456';CREATE RolE

5.创建用户匹配关系(user mapPing),用户为远程MysqL的用户密码
CREATE USER MAPPing FOR u_select    SERVER MysqL_svr     OPTIONS (username 'usr_kenyon',password '123456');
6.查询数据,需要u_select登录,不然会报user mapPing not found
postgres=> select * from pg_MysqL_tbl1 ; ID |   name    ----+-----------  1 | test  2 | kenyon    | it's null  4 | (4 rows)postgres=> select * from pg_MysqL_tbl2; ID | vname ----+-------  1 | test  4 | (2 rows)
四、删除扩展
postgres=# drop foreign table pg_MysqL_tbl1;DROP FOREIGN tablepostgres=# drop foreign table pg_MysqL_tbl2;DROP FOREIGN tablepostgres=# drop user mapPing for u_select server MysqL_svr ;DROP USER MAPPingpostgres=# drop server MysqL_svr ;DROP SERVERpostgres=# drop extension MysqL_fDW ;DROP EXTENSION

五、总结
1.这个工具在ETL迁移MysqL到postgresql时比较有用,跨平台,跨数据库,而且简单方便
2.目前该工具还不是内置版本,引起的风险要注意,比如MysqL和pg库端表字段后类型不一样,会产生乱码


六、参考: 1.http://pgxn.org/dist/MysqL_fDW/ 2.http://francs3.blog.163.com/blog/static/40576727201111211324599/?suggestedreading

总结

以上是内存溢出为你收集整理的PostgreSQL的mysql_fdw使用全部内容,希望文章能够帮你解决PostgreSQL的mysql_fdw使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1177112.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-02
下一篇2022-06-02

发表评论

登录后才能评论

评论列表(0条)

    保存