文档章节

PostgreSQL的mysql_fdw使用

kenyon_君羊
 kenyon_君羊
发布于 2014/05/04 18:51
字数 752
阅读 529
收藏 2
要迁移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 TABLE

postgres=# 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 TABLE
postgres=# drop foreign table pg_mysql_tbl2;
DROP FOREIGN TABLE

postgres=# drop user mapping for u_select server mysql_svr ;
DROP USER MAPPING

postgres=# drop server mysql_svr ;
DROP SERVER

postgres=# 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

© 著作权归作者所有

共有 人打赏支持
kenyon_君羊
粉丝 499
博文 170
码字总数 121714
作品 0
杭州
其他
私信 提问
一些非常有用的 PostgreSQL 扩展

我亲爱的朋友们,今天让我们来讨论下 PostgreSQL 以及该数据库最有用的一些扩展。 PostgreSQL 是一个关系型数据库管理系统,主要特点: 数据库支持几乎无限的大小; 强大而且可靠的事务复制机...

红薯
2012/04/23
6.6K
2
科普一种可以将PG变成通用SQL引擎的技术

作者介绍 伊翼,网名“小wing”,野生PG爱好者,从事数据库相关工作已近十年,目前供职于全球最大的通讯设备供应商。 原标题:《当FDW遇上GO》 FDW(Foreign Data Wrapper)是PostgreSQL(下...

伊翼
2018/06/14
0
0
本周推荐:MySQL、PostgreSQL没有更好,只看选择

点击上方蓝色字关注我们~ DB界谜题 MySQL好 or PostgreSQL好? 通过以下两场公开课 看老司机们分享的MySQL、PostgreSQL 或许没有谁更好的答案 只是关乎于选择 选择了,那就是千般好 MySQL公开...

老叶茶馆_
2018/10/26
0
0
PostgreSQL数据库dblink和postgres_fdw扩展使用比较

在之前的两篇文章中,章郎虫分别介绍了dblink和postgresfdw两个扩展。今天我在这里初略地说下使用dblink和postgresfdw后的实际感受和区别。 postgresfdw远程可写功能是9.3版本出来后才新加的...

章郎虫
2013/11/07
0
1
file_fdw创建外部表及其与普通表的结合

参考原文:http://www.open-open.com/lib/view/open1380594167635.html postgresql从9.1开始增加了外部表访问的功能,这个功能就是数据库直接读取数据库以外的文件,比如csv或者text等类型的...

YuanyuanL
2015/01/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

饮酒驾车和醉酒驾车

根据国家质量监督检验检疫局发布的《车辆驾驶醉酒驾车的测试 人员血液、呼气酒精含量阈值与检验》(GB19522—2004)中规定,该规定指出,饮酒驾车是指车辆驾驶人员血液中的酒精含量大于或者等...

writeademo
21分钟前
0
0
【go工具】golang tag 之 gomodifytags

链接:gomodifytags原文链接 gomodifytags 是go工具,用来修改/更新struct字段的标签tag.使用gomodifytags可以很方便的update/add/delete struct的字段标签。你可以很方便的增加新的标签,更...

mickelfeng
22分钟前
0
0
为提升应用品质助力,绿标2.0检测项技术详解

为保证应用在不同机型都能以最优的状态运行,给用户带来更好的体验,安卓绿色联盟联合华为终端开放实验室,通过deveco(deveco.huawei.com)平台,为开发者提供了基于《安卓绿色联盟应用体验...

安卓绿色联盟
23分钟前
0
0
eclipse中SVN信息不显示

打开eclipse安装路径(假定安装在D盘):D:\eclipse\configuration 然后将org.eclipse.update文件夹删掉,重新启动eclipse

中小宇
24分钟前
0
0
微服务架构 SpringCloud(二)Eureka(服务注册和服务发现基础篇)

一:Eureka简介 Eureka是Spring Cloud Netflix的一个子模块,也是核心模块之一。用于云端服务发现,一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。Java springcl...

itcloud
24分钟前
4
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部