使用Kettle实现MySQL数据库定时同步数据

一、需求背景

由于项目场景原因,需求将A库(MySQL)中的表a、表b、表c中的数据守时T+1 增量的同步到B库(MySQL)。这儿阐明一下,不是数据库的主从备份,便是普通的数据同步。经过技术调研,发现Kettle挺合适的,原因如下:

  1. Kettle (数据抽取、清洗、转化、装载)是由java 编写,能够在 Window、Linux、Unix 上运转。支撑多数据源, 多种中间件的专业ETL 工具;
  2. 可视化界面支撑图形化GUI规划界面,组件多样性,支撑组件拖拉拽,不必写额定的代码;
  3. Kettle的流程图本质上都是装备文件,如.ktr/.kjb文件。这种规划的优点便是,当我们把转化流程图像完之后,能够直接仿制到别的一个环境中运转,如:在Windows电脑上画好流程图,仿制到Liunx体系上运转
  4. 免费、组件多、支撑开源,一般处理T+1的数据同步是没有问题的。假如并发高、实时性高、数据量大就主张运用Flink了。

二、运用方法

1. 安装包下载

官网地址:sourceforge.net/projects/pe…

使用Kettle实现MySQL数据库定时同步数据

2. 发动方法

Windows点击Spoon.bat发动

使用Kettle实现MySQL数据库定时同步数据

出现以下图片表明正在发动,假如一直没有反应,运用管理员身份运转

使用Kettle实现MySQL数据库定时同步数据

主界面如下:

使用Kettle实现MySQL数据库定时同步数据

三、衔接MySQL数据库

1. 预备MySQL衔接驱动jar包

由于Kettle自身是不带任何数据库驱动包的,所以这儿我们需求先自己预备好驱动包,版本最好挑选5.1.49。下载好jar包后,拷贝到lib目录下(Windows和Linux同理)。假如已经发动了Kettle,则需求关掉重新发动,否则驱动包不会被加载。

使用Kettle实现MySQL数据库定时同步数据

2. 创立数据源

顺次点击:转化——>主对象树——>DB衔接——>点击新建——>测验

使用Kettle实现MySQL数据库定时同步数据

使用Kettle实现MySQL数据库定时同步数据

使用Kettle实现MySQL数据库定时同步数据

同上操作,创立好两个数据源:源数据库、目标库;目的便是将源数据库中的表数据同步到目标库中去

3. 装备转化流程

① 加入输入节点:转化——>输入——>表输入

使用Kettle实现MySQL数据库定时同步数据

② 双击输入节点翻开装备页,输入一下信息

这儿由于我是守时T+1 增量同步数据,所以我加了个同步条件WHERE gmt_create >= CURDATE()表明该数据创立时刻大于当天才会进行查询。

使用Kettle实现MySQL数据库定时同步数据

点击预览,正好有一条数据

使用Kettle实现MySQL数据库定时同步数据

③加入转化节点:转化——>插入/更新——>按住shift建立衔接

使用Kettle实现MySQL数据库定时同步数据

④ 双击插入/更新节点,翻开装备页

使用Kettle实现MySQL数据库定时同步数据

⑤ 点击运转测验

使用Kettle实现MySQL数据库定时同步数据

四、仿制ktr文件到Liunx上守时运转

在Linux上,ktr文件运用Kettle的pan.sh脚本运转,指令大致如下: sh /home/admin/kettle/data-integration/pan.sh -file=/home/admin/kettle/ktr/table_transfer.ktr -norep。一起为了实现守时履行这个脚本,我打算用Linux自带的corntab功用设置守时。

首要我编写了一个shell脚本,命名为cornSql.sh,用于保存ktr的履行指令,内容如下:

#!/bin/bash
export KETTLE_HOME=/home/admin/kettle/data-integration
export JAVA_HOME=/usr/java/jdk1.8.0_131
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin:${KETTLE_HOME}
export JRE_HOME=${JAVA_HOME}/jre
TIME=$(date "+%Y%m%d")
sh /home/admin/kettle/data-integration/pan.sh -file=/home/admin/kettle/ktr/table_transfer.ktr -norep >>/home/admin/kettle/log/transfer-"$TIME".log

其次,将ktr脚本拷贝到指定目录下,也便是/home/admin/kettle/ktr目录下。然后输入crontab -e翻开指令界面,输入0 1 * * * /home/admin/kettle/cornSql.sh,这句话的意思是每天清晨1点守时履行cornSql.sh脚本

为了查看守时装备是否收效,这儿能够运用 crontab -l -u root指令,假如刚才的守时指令有打印出来,则证明装备收效。

最后,第二天查看一下履行日志文件有没有生成,在/home/admin/kettle/log目录下,这儿我把每天履行的日期打印出来了,如下图:

使用Kettle实现MySQL数据库定时同步数据