介绍
需求背景:
有很多业务系统,他们的数据库是相互独立的,俗称数据孤岛,为了做数据统计分析,就需要把这些数据归集在一个数据库中,比如数据仓库,然后多表关联查询,方便开发数据应用。希望能有这样的工具,指定两个数据库和表名,就可以将表从源数据库拷贝到目标数据库中。具体需求如下:
- 能自动同步表结构,如:源表加字段,目标表自动加字段。
- 支持增量或全量复制数据,比如按日期进行复制数据。
- 支持指定字段同步,只同步关心的那些字段。
- 支持主流的关系型数据库: mysql、db2、postgresql、oracle、sqlserver
- 源表和目标表表名可以不同,字段名也可以不同(已存在目标表的情况下)
因为自己要用,我就自己写了一个,顺便熟悉下 java 开发(之前一直用 Python,不得不说,Java 真浪费时间),本程序的最大用处就是构建集市或数仓所需要的基础层数据源,欢迎感兴趣的朋友一起加入。
程序的使用方法
Docker 方式:
这里用到三个容器:
- app 也就是主程序本身,app 容器使用的程序文件就是 release 目录下的文件,已经做了绑定。
- mysql 测试用的,作为源数据库,已提前放好了有 7000 条测试数据的表 somenzz_users。
- postgres 测试用的,作为目标数据库,没有数据。
先部署,执行 docker-compose up -d
就会自动完成应用和数据库的部署:
$ git clone https://github.com/somenzz/database-sync.git $ cd database-sync $ docker-compose up -d Creating database-sync_postgres_1 ... done Creating database-sync_app_1 ... done Creating database-sync_mysql_1 ... done
这样三个容器就启动了,使用 docker ps -a |grep database-sync
可以查看到三个正在运行的容器:
现在直接使用 docker exec -i database-sync_app_1 java -jar database-sync-1.3.jar
来执行程序:
mysql 容器已有测试数据,release/config/config.json
已经配置好了数据库的连接,因此可以直接试用,以下演示的是从 mysql 复制表和数据到 postgres:
1. 全量复制,自动建表:
docker exec -i database-sync_app_1 java -jar database-sync-1.3.jar mysql_test testdb somenzz_users postgres_test public users --sync-ddl
如果你不想每次都敲 docker exec -i database-sync_app_1
,可以进入容器内部执行:
(py38env) ➜ database-sync git:(master) ✗ docker exec -it database-sync_app_1 /bin/bash root@063b1dc76fe1:/app# ls config database-sync-1.3.jar lib logs root@063b1dc76fe1:/app# java -jar database-sync-1.3.jar mysql_test testdb somenzz_users postg<div>本文来源gaodai.ma#com搞#代!码网_</div>res_test public users -sd