由於專案場景原因,需要將A庫(MySQL)中的表a、表b、表c中的資料定時T+1
增量
的同步到B庫(MySQL)。這裡說明一下,不是資料庫的主從備份,就是普通的資料同步。經過技術調研,發現Kettle挺合適的,原因如下:
官網地址:https://sourceforge.net/projects/pentaho/files/Data%20Integration/
出現以下圖片表示正在啟動,如果一直沒有反應,使用管理員身份執行
。
主介面如下:
由於Kettle自身是不帶任何資料庫驅動包的,所以這裡我們需要先自己準備好驅動包,版本最好選擇5.1.49。下載好jar包後,拷貝到lib目錄下(Windows和Linux同理)。如果已經啟動了Kettle,則需要關掉重新啟動,否則驅動包不會被載入。
同上操作,建立好兩個資料來源:源資料庫、目標庫;目標就是將源資料庫中的表資料同步到目標庫中去
這裡因為我是定時T+1
增量
同步資料,所以我加了個同步條件WHERE gmt_create >= CURDATE()
表示該資料建立時間大於當天才會進行查詢。
點選預覽,正好有一條資料
在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目錄下,這裡我把每天執行的日期列印出來了,如下圖:
本文來自部落格園,作者:sum墨,轉載請註明原文連結:https://www.cnblogs.com/wlovet/p/17514420.html