本博客的目的在于简述MySQL和PostgreSQL之间如何跨数据库进行复制。涉及跨数据库复制的databases一般被称作异构databases。这是将数据从一种RDBMS server复制到另一种server的一种很好的方法。
PostgreSQL和MySQL都是传统的RDBMS数据库,但是他们也提供了NoSQL的能力。本文主要从RDBMS的角度讨论PostgreSQL和MySQL之间的复制问题。不对复制内部机制做详细介绍,只对一些基本元素、如何配置、有点、限制以及一些使用案例进行阐述。
通常情况下,两个种类相同的主备之间使用binary模式或者query模式进行复制。复制的目的在于,在备上能够得到主的实时备份数据,从而形成一个active-passive模式(因为复制只配置单向复制)。当然,也可以配置成向同步,构建active-active模式。
可以在两个不同数据库server之间配置上面的两种模式,其中一个数据库server可以配置从另外一个完全不同的数据库server上接收副本数据并维护副本数据的实时快照。MySQL和PostgreSQL通过原生机制或者第三方插件(包括binlog方法、磁盘块方法、基于语句和行的方法)完成上面提到的模式。
由于MySQL和PostgreSQL使用不同的复制协议,所以他们之间不能互相交互。为了达到通信流的目的,可以使用一个开源软件pg_chameleon。
pg_chameleon背景
pg_chameleon是由python3开发的MySQL to PG的复制工具。该插件也会使用一个mysql-replication的开源库,该库也是由Python3开发。从MySQL表中拉取行镜像并存储成JSONB形式,然后同步到PG数据库。PG数据库通过pl/pgsql进行解析并回放。
pg_chameleon特性
1、同一个集群中多个MySQL schema可以复制到一个PG database,形成many-to-one复制模式。
2、源和目的schema名可以不一样
3、复制数据可以从mysql级联副本中拉取。
4、会排除复制失败的表及复制过程中产生错误的表。
5、每个复制功能通过守护进程进行管理
6、配置参数和配置文件以yaml结构进行控制。
Demo
Host | Vm1 | Vm2 |
操作系统 | Centos linux release 7.6 x86_64 | Centos linux release 7.5 x86_64 |
数据库版本 | MySQL5.7.26 | PostgreSQL10.5 |
数据库端口号 | 3306 | 5433 |
IP地址 | 192.168.56.102 | 192.168.56.106 |
首先需要安装Python,他在创建虚拟环境以及激活的时候会用到。




