文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一个数据开发人员使用的辅助工具

2024-12-03 07:57

关注

因为自己要用,我就自己写了一个,顺便熟悉下 java 开发(之前一直用 Python,不得不说,Java 真浪费时间),本程序的最大用处就是构建集市或数仓所需要的基础层数据源,欢迎感兴趣的朋友一起加入。

程序的使用方法

Docker 方式:

这里用到三个容器:

先部署,执行 docker-compose up -d 就会自动完成应用和数据库的部署:

 

  1. $ git clone https://github.com/somenzz/database-sync.git 
  2. $ cd database-sync 
  3. $ docker-compose up -d 
  4. Creating database-sync_postgres_1 ... done 
  5. Creating database-sync_app_1      ... done 
  6. 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. 全量复制,自动建表:

 

  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 ,可以进入容器内部执行:

 

  1. (py38env) ➜  database-sync git:(master) ✗ docker exec -it database-sync_app_1 /bin/bash 
  2. root@063b1dc76fe1:/app# ls 
  3. config database-sync-1.3.jar  lib  logs 
  4. root@063b1dc76fe1:/app# java -jar database-sync-1.3.jar mysql_test testdb somenzz_users postgres_test public users -sd 

2. 增量复制:

 

  1. root@063b1dc76fe1:/app# java -jar database-sync-1.3.jar mysql_test testdb somenzz_users postgres_test public zz_users "create_at >= '2018-01-09'" 

 

 

 

3. 指定字段:

 

  1. root@063b1dc76fe1:/app# java -jar database-sync-1.3.jar mysql_test testdb somenzz_users postgres_test public zz_users -ff="user_id,name,age" -tf="user_id,name,age" "create_at >= '2018-01-09'" 

 

 

 

普通方式

程序运行前确保已安装 java 1.8 或后续版本,已经安装 maven,然后 clone 源码,打包:

 

  1. git clone https://gitee.com/somenzz/database-sync.git 
  2. cd database-sync 
  3. mvn package 

此时你会看到 target 目录,将 target 下的 lib 目录 和 database-sync-1.3.jar 复制出来,放在同一目录下,然后再创建一个 config 目录,在 config 下新建一个 config.json 文件写入配置信息,然后将这个目录压缩,就可以传到服务器运行了,请注意先充分测试,jdk 要求 1.8+

 

  1. [aaron@hdp002 /home/aaron/App/Java/database-sync]$ ls -ltr 
  2. total 48 
  3. drwxr-xr-x 2 aaron aaron  4096 Apr 23  2020 lib 
  4. -rwxrw-r-- 1 aaron aaron   157 Jun 23  2020 run.sh 
  5. drwxrwxr-x 2 aaron aaron  4096 Jul  3  2020 logs 
  6. -rw-rw-r-- 1 aaron aaron 24773 Mar 16  2021 database-sync-1.3.jar 
  7. drwxr-xr-x 7 aaron aaron  4096 Aug  3  2020 jdk1.8.0_231 
  8. drwxrwxr-x 2 aaron aaron  4096 Feb 19 17:07 config 

你也可以直接下载我打包好的使用。

程序名称叫 database-sync,运行方式是这样的:

 

  1. (py38env) ➜  target git:(master) ✗ java -jar database-sync-1.3.jar -h       
  2. Usage:  
  3. java -jar database-sync-1.0.jar [options] {fromDB} {fromSchema} {fromTable} {toDB} {toSchema} {toTable} [whereClause] 
  4. options: 
  5.         -v or --version                            :print version then exit 
  6.         -h or --help                               :print help info then exit 
  7.         -sd or --sync-ddl                          :auto synchronize table structure 
  8.         -ff=col1,col2 or --from-fields=col1,col2   :specify from fields 
  9.         -tf=col3,col4 or --to-fields=col3,col4     :specify to fields 
  10.         --no-feature or -nf                        :will not use database's feature 

帮助说明:

[] 中括号里的内容表示选填,例如 [options] 表示 options 下的参数不是必须的。

其中 options 参数解释如下:

whereClause 表示 where 条件,用于增量更新,程序再插入数据前先按照 where 条件进行清理数据,然后按照 where 条件从原表进行读取数据。whereClause 最好使用双引号包起来,表示一个完整的参数。如:"jyrq='2020-12-31'"

{} 大括号里的内容表示必填。

fromDb 是指配置在 config.json 的数据库信息的键,假如有以下配置文件:

 

  1.       "postgres":{ 
  2.         "type":"postgres"
  3.         "driver":"org.postgresql.Driver"
  4.         "url":"jdbc:postgresql://localhost:5432/apidb"
  5.         "user""postgres"
  6.         "password":"aaron"
  7.         "encoding""utf-8" 
  8.     }, 
  9.  
  10.  
  11.     "aarondb":{ 
  12.         "type":"mysql"
  13.         "driver":"com.mysql.cj.jdbc.Driver"
  14.         "url":"jdbc:mysql://localhost:3306/aarondb?useSSL=false&characterEncoding=utf8&serverTimezone=UTC"
  15.         "user""aaron"
  16.         "password":"aaron" 
  17.     } 

fromDb、toDb 可以是 aarondb 或者 postgres。

全量、增量、指定字段的使用样例请参考 Docker 方式。

配置文件说明

配置文件位于 config/config.json,如下所示:

 

  1.     "sjwb":{ 
  2.         "type":"db2"
  3.         "driver":"com.ibm.db2.jcc.DB2Driver"
  4.         "url":"jdbc:db2://192.168.1.*:50000/wbsj"
  5.         "user""****"
  6.         "password":"****"
  7.         "tbspace_ddl"""
  8.         "encoding":"utf-8" 
  9.     }, 
  10.  
  11.     "dw_test":{ 
  12.         "type":"db2"
  13.         "driver":"com.ibm.db2.jcc.DB2Driver"
  14.         "url":"jdbc:db2://192.168.169.*:60990/dwdb"
  15.         "user""****"
  16.         "password":"****"
  17.         "encoding":"gbk" 
  18.     }, 
  19.  
  20.     "postgres":{ 
  21.         "type":"postgres"
  22.         "driver":"org.postgresql.Driver"
  23.         "url":"jdbc:postgresql://10.99.**.**:5432/apidb"
  24.         "user""****"
  25.         "password":"****"
  26.         "tbspace_ddl""WITH (compression=no, orientation=orc, version=0.12)\ntablespace hdfs\n"
  27.         "encoding":"utf-8" 
  28.     }, 
  29.  
  30.  
  31.     "aarondb":{ 
  32.         "type":"mysql"
  33.         "driver":"com.mysql.cj.jdbc.Driver"
  34.         "url":"jdbc:mysql://localhost:3306/aarondb?useSSL=false&characterEncoding=utf8&serverTimezone=UTC"
  35.         "user""****"
  36.         "password":"****"
  37.         "encoding":"utf-8" 
  38.     }, 
  39.  
  40.     "buffer-rows": 100000 

配置文件说明:

type 表示数据库类型,均为小写:

tbspace_ddl 表示自动建表时指定的表空间,该选项不是必需的,可以删除。

buffer-rows 表示读取多少行时一块写入目标数据库,根据服务器内存大小自己做调整,100000 行提交一次满足大多数情况了。

encoding 用于表结构同步时确定字段长度,比如说源库的字段是 gbk varchar(10),目标库是 utf-8,那么就应该为 varchar(15),这样字段有中文就不会出现截断或插入失败问题,程序这里 2 倍,也就是 varchar(20) ,这样字段长度不会出现小数位。

最后的话

提高数据库间表的复制效率,如果不需要对源表字段进行转换,就丢掉低效的 datastage 和 kettle 吧。

 

来源:Python七号内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯