使用Kettle定时从数据库A刷新数据到数据库B
一、需求背景
由于项目场景原因,需要将A库(MySQL)中的表a、表b、表c中的数据定时T+1 增量的同步到B库(MySQL)。这里说明一下,不是数据库的主从备份,就是普通的数据同步。经过技术调研,发现Kettle挺合适的,原因如下:
- Kettle (数据抽取、清洗、转换、装载)是由java 编写,可以在 Window、Linux、Unix 上运行。支持多数据源, 多种中间件的专业ETL 工具;
- 可视化界面支持图形化GUI设计界面,组件多样性,支持组件拖拉拽,不用写额外的代码;
- Kettle的流程图本质上都是配置文件,如.ktr/.kjb文件。这种设计的好处就是,当我们把转换流程图画完之后,可以直接复制到另外一个环境中运行,如:在Windows电脑上画好流程图,复制到Liunx系统上运行。
- 免费、组件多、支持开源,一般处理T+1的数据同步是没有问题的。如果并发高、实时性高、数据量大就建议使用Flink了。
二、使用方式
1. 安装包下载
官网地址:https://sourceforge.net/projects/pentaho/files/Data%20Integration/

2. 启动方式
Windows点击Spoon.bat启动

出现以下图片表示正在启动,如果一直没有反应,使用管理员身份运行。

主界面如下:

三、连接MySQL数据库
1. 准备MySQL连接驱动jar包
由于Kettle自身是不带任何数据库驱动包的,所以这里我们需要先自己准备好驱动包,版本最好选择5.1.49。下载好jar包后,拷贝到lib目录下(Windows和Linux同理)。如果已经启动了Kettle,则需要关掉重新启动,否则驱动包不会被加载。

2. 创建数据源
依次点击:转换——>主对象树——>DB连接——>点击新建——>测试



同上操作,创建好两个数据源:源数据库、目标库;目标就是将源数据库中的表数据同步到目标库中去
3. 配置转换流程
① 加入输入节点:转换——>输入——>表输入

② 双击输入节点打开配置页,输入一下信息
这里因为我是定时T+1 增量同步数据,所以我加了个同步条件WHERE gmt_create >= CURDATE()表示该数据创建时间大于当天才会进行查询。

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

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

④ 双击插入/更新节点,打开配置页

⑤ 点击运行测试

四、复制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定时从数据库A刷新数据到数据库B的更多相关文章
- C# 数据库dataGridView刷新数据和主外键判断
本文主要讲诉在使用VS2012+SQL Server数据库做系统中,通常会遇到几个问题.使用dataGridView控件在修改.删除.插入数据后,怎样刷新数据显示操作后的结果.同时在对数据操作时通常会 ...
- MySQL数据库(1)_MySQL数据库介绍与安装
一.数据库相关概念的简介 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展 ...
- Kettle实现从数据库中提取数据到Excel
因为有个日常提数,工作日每天都要从数据库中提取数据,转换为excel,再以邮件的形式发给用户. 刚好近期同事在研究使用kettle自动提数且完成邮件的发送,觉得很实用又挺有意思的就学了一下这个技能~ ...
- 定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表
最近项目中有一种需求: 大致需求是这样的 通过给定的 用户名和密码 要定时从远程的数据库中取数据,然后把取出来的数据插入或更新本地的oracle数据库的表 项目的结构式struts1 hibernat ...
- Python3.x:定时获取页面数据存入数据库
Python3.x:定时获取页面数据存入数据库 #间隔五分钟采集一次数据入库 import pymysql import urllib.request from bs4 import Beautifu ...
- ETL工具之Kettle的简单使用一(不同数据库之间的数据抽取-转换-加载)
ETL工具之Kettle将一个数据库中的数据提取到另外一个数据库中: 1.打开ETL文件夹,双击Spoon.bat启动Kettle 2.资源库选择,诺无则选择取消 3.选择关闭 4.新建一个转换 5. ...
- Kettle定时执行(ETL工具)【转】
1,Kettle跨平台使用. 例如:在AIX下(AIX是IBM商用UNIX操作系统,此处在LINUX/UNIX同样适用),运行Kettle的相关步骤如下: 1)进入到Kettle部署的路径 ...
- Kettle定时执行
1,Kettle跨平台使用. 例如:在AIX下(AIX是IBM商用UNIX操作系统,此处在LINUX/UNIX同样适用),运行Kettle的相关步骤如下: 1)进入到Kettle部署的路径 ...
- SQLServer存储引擎——01.数据库如何读写数据
一.引言 在SQL Server数据库中,数据是如何被读写的?日志里都有些什么?和数据页之间是什么关系?数据页又是如何存放数据的?索引又是用来干嘛的? 一起看看SQL Server的存储引擎. 二.S ...
- linux上Kettle定时执行(转换的单步执行,job的单步执行,环境变量,kettle定时功能,效率问题等)转自(http://blog.csdn.net/feng19821209/article/details/5800960)
1,Kettle跨平台使用. 例如:在AIX下(AIX是IBM商用UNIX操作系统,此处在LINUX/UNIX同样适用),运行Kettle的相关步骤如下: 1)进入到Kettle部署的路径 ...
随机推荐
- pandas之窗口函数
为了能更好地处理数值型数据,Pandas 提供了几种窗口函数,比如移动函数(rolling).扩展函数(expanding)和指数加权函数(ewm).窗口函数应用场景非常多.举一个简单的例子:现在有 ...
- pandas之去重
"去重"通过字面意思不难理解,就是删除重复的数据.在一个数据集中,找出重复的数据删并将其删除,最终只保存一个唯一存在的数据项,这就是数据去重的整个过程.删除重复数据是数据分析中经常 ...
- stm32报错
1. declaration may not appear after executable statement in block 关于编译错误的小伙伴:error: #268: declaratio ...
- day66:Linux:nginx+uwsgi+django跑python项目
目录 0.uwsgi简述 1.使用uwsgi+django运行demo 2.nginx+uwsgi+django跑pythonav项目 0.uwsgi简述 1.什么是wsgi WSGI,全称Web S ...
- 运行项目报错Cannot read property 'styles' of undefined
原因是安装依赖版本不对,以下是我的解决办法: 1.先删除项目中package-lock.json 文件 及node_modules文件(可使用rimraf指令删除node_modules,直接删文件很 ...
- PHP利用 JSON 将XML转换为数组
在很多开发项目中,我们都会遇到将XML文件转换为数组使用,因此在本篇 PHP教程 中,UncleToo和大家一起学习 如何转换XML为数组 . 现在有一个uncletoo.xml的配置文件,格式如下: ...
- vue自定义组件——split-pane
pre { overflow-y: auto; max-height: 500px } github地址: https://github.com/lxmghct/my-vue-components 组 ...
- 【贪心算法】NO134 加油站
134. 加油站 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升 ...
- 深度学习04-(Tensorflow简介、图与会话、张量基本操作、Tensorboard可视化、综合案例:线性回归)
深度学习04-Tensorflow 深度学习04-(Tensorflow) Tensorflow概述 Tensorflow简介 什么是Tensorflow Tensorflow的特点 Tensorfl ...
- MySQL事务和锁实战篇
文章目录 MySQL事务和锁 事务 事务的控制语句 事务隔离级别设置 脏读 不可重复读 幻读 锁机制 InnoDB的行级锁 锁实战 死锁 总结 MySQL事务和锁 事务 说到关系型的数据库的事务,相信 ...