database-sync作为一种开源辅助工具,用于数据库之间的表同步,更确切的说法是复制,可以从一个数据库复制表到另一个数据库
该工具支持的功能如下:
(1)自动同步表字段,如:源表扩字段,目标表自动扩字段
(2)支持增量或全量同步数据
(3)支持指定字段同步,只同步关心的字段
支持的关系型数据库:
mysql、db2、postgresql、oracle、sqlserver
源代码下载:
database-sync代码托管在github上
源代码下载:下载
目标:database-sync适配openGauss数据库,可支持openGauss与其他数据库之间实现数据同步
源代码下载:适配openGauss的源代码已上传到个人仓库下的“douxin_master”分支
下载链接:下载
前提:已安装Java JDK 1.8或更高版本,安装maven
git clone下载 douxin_master分支的代码,并进行打包
git clone https://gitee.com/ywzq1161327784/database-sync.git
cd database-sync/
git checkout origin/douxin_master
mvn clean package -Dmaven.test.skip=true
打包后,target目录内容如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uuja0Kk0-1636428783610)(…/image/database-sync/image1.png)]
将mylib目录、target下的lib目录和database-sync-1.3.jar包复制到同一目录下,并创建一个config目录,在其下创建config.json文件写入配置信息,目录结构如下所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WtWSJH2Z-1636428783613)(…/image/database-sync/image2.png)]
数据库连接信息以json格式配置在config/config.json文件中,每个节点包含type、driver、url、user、password、tbspace_ddl、encoding信息,
其中type指定数据库类型,取值为db2、postgres、mysql、oracle、sqlserver、openGauss,特别地,对于openGauss数据库需指定“type”:“openGauss”;
tbspace_ddl指定表空间语句,encoding指定编码方式。
配置文件示例:
{
"database1":{
"type":"openGauss",
"driver":"org.postgresql.Driver",
"url":"jdbc:postgresql://ip:port/postgres",
"user": "****",
"password":"******",
"tbspace_ddl": "",
"encoding":"utf-8"
},
"database2":{
"type":"postgres",
"driver":"org.postgresql.Driver",
"url":"jdbc:postgresql://ip:5432/postgres",
"user": "****",
"password":"******",
"tbspace_ddl":"WITH (compression=no, orientation=orc, version=0.12)\ntablespace hdfs\n",
"encoding":"utf-8"
},
"database3":{
"type":"oracle",
"driver":"oracle.jdbc.driver.OracleDriver",
"url":"jdbc:oracle:thin:@localhost:1521:orcl",
"user": "****",
"password":"****",
"tbspace_ddl": "",
"encoding":"utf-8"
},
"database4":{
"type":"db2",
"driver":"com.ibm.db2.jcc.DB2Driver",
"url":"jdbc:db2://ip:port/wbsj",
"user": "****",
"password":"****",
"tbspace_ddl": "",
"encoding":"utf-8"
},
"database5":{
"type":"mysql",
"driver":"com.mysql.cj.jdbc.Driver",
"url":"jdbc:mysql://localhost:3306/aarondb",
"user": "****",
"password":"****",
"encoding":"utf-8"
},
"buffer-rows": 100000
}
在步骤2中的目录下,执行java -jar database-sync-1.3.jar -h
命令可查看程序运行的帮助信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n6Afo8pn-1636428783615)(…/image/database-sync/image3.png)]
其中[]表示可选参数,包括如下几种:
–version或者-v表示打印版本信息并退出;
–help或者-h表示打印帮助信息并退出;
–sync-ddl或者-sd 表示自动同步表结果,默认情况下不会自动同步表结构,因此不指定该参数时,同步表时下述的目标表{toDB}需存在;
–from_fields=col1,col2或者-ff=col3,col4表示指定原表的字段序列;
–to_fields=col1,col2或者-tf=col3,col4表示指定目标表的字段序列;
–no-feture或者-nf表示不使用特定数据库的特性;
[whereClause]表示where条件,用于增量更新。
{}表示必选参数,共有6个,分别说明如下:
{fromDB}表示原表所在的数据库信息,在Step3所示的配置文件中,可以取值为database1,database2等;
{fromSchema}表示原表的模式名;
{fromTable}表示原表的表名;
{toDB}表示目标表所在的数据库信息;
{toSchema}表示目标表的模式名;
{toTable}表示目标表的表名。
eg 1:从postgres到openGauss实现表同步
java -jar database-sync-1.3.jar -sd postgres public test_0322 opengauss1 public test_0322_1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eqknkzwP-1636428783619)(…/image/database-sync/image4.png)]
eg 2:从openGauss到postgres实现表同步
java -jar database-sync-1.3.jar -sd opengauss1 public test_0322_1 postgres public test_0322
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JDrqjQ4b-1636428783620)(…/image/database-sync/image5.png)]
至此,可实现openGauss数据库与其他数据库间的表数据同步
现表同步
java -jar database-sync-1.3.jar -sd opengauss1 public test_0322_1 postgres public test_0322
[外链图片转存中…(img-JDrqjQ4b-1636428783620)]
至此,可实现openGauss数据库与其他数据库间的表数据同步。