datax 持续数据同步_采用DataX实现多表增量数据同步
這兩天驗證了一下阿里的DataX數據同步工具,覺得DataX可以用來做管理數據的多級數據同步。DataX用來做批量數據遷移很適合,能夠保證數據的一致性,性能也很好,結合時間戳字段,用來實現數據定時增量同步也是可以的,如每分鐘或每5分鐘增量同步一次數據。用DataX這個方案做增量同步要求每個表帶一個時間戳字段,刪除數據采用邏輯刪除,這個要求也比較容易做到。
增量同步實現
實現增量同步需要在表中增加一個時間戳字段,如update_time,在同步配置文件中,通過where條件,根據時間戳字段篩選當前時間向前一段時間內的增量數據。{
"job":?{
"content":?[
{
"reader":?{
"name":?"mysqlreader",
"parameter":?{
"column":?[
"doc_id","title","file_path","approval_id","page_count","version"
],
"connection":?[
{
"jdbcUrl":?["jdbc:mysql://192.168.81.1:3306/bootdo?useUnicode=true&characterEncoding=utf8"],
"table":?["es_approval_doc"]
}
],
"password":?"123456",
"username":?"root",
"where":?"version?>?FROM_UNIXTIME(${start_time})?and?version?
}
},
"writer":?{
"name":?"mysqlwriter",
"parameter":?{
"column":?[
"doc_id","title","file_path","approval_id","page_count","version"
],
"writeMode":"update",
"connection":?[
{
"jdbcUrl":?"jdbc:mysql://192.168.81.1:3306/bootdo?useUnicode=true&characterEncoding=utf8",
"table":?["es_approval_doc_copy"]
}
],
"password":?"123456",
"username":?"root"
}
}
}
],
"setting":?{
"speed":?{
"channel":?"1"
}
}
}
}
json文件中,${start_time}和${end_time}為調用datax.py時傳入的參數。
如datax/bin/datax.py?../../mysql2mysql.json?-p?"-Dstart_time=1546337137?-Dend_time=1546337237"
定時同步實現
定時同步可以采用操作系統的定時任務+shell腳本實現。以下為在linux系統中的方案:
1、編寫shell腳本,命名為syntask.sh:#!/bin/bash
#?source?/etc/profile
#?截至時間設置為當前時間戳
end_time=$(date?+%s)
#?開始時間設置為120s前時間戳
start_time=$(($end_time?-?120))
#?datax/bin/datax.py?../../mysql2mysql.json?-p?"-Dstart_time=$start_time?-Dend_time=$end_time"
這里通過腳本獲取用于篩選條件中的開始時間start_time和結束時間end_time,將兩個時間作為參數傳給datax.py。
2、在crontab中,添加任務計劃:
$crontab -e*?*/1?*?*?*?/syntask.sh
DataX不適合實時數據同步或太頻繁的定時同步,因為同步都需要去讀取源表,頻率過大對源表會造成壓力。
此外,最好每次增量同步的時間段比定時任務時間間隔大一些,以保證所有時間產生的數據都被覆蓋到。
異常情況下的補救措施:
如果某段時間內由于服務器、操作系統、網絡等原因造成某個時間段內數據沒有正常同步,那么可以通過手動執行同步的方式進行補救,執行同步時,將篩選的時間段加大大覆蓋異常發生的整個時間段。
多表同步實現
通常我們的業務系統存在有多個表,表之間有外鍵關系。為實現多表的數據同步,我們需要理清外鍵依賴關系,為每個表分別編寫json同步配置文件,并按外鍵依賴關系逐個調用datax.py。
如對于主表es_approval和子表es_approval_doc,可以對應寫兩個json配置文件:mysql2mysql-approval.json和mysql2mysql-approval-doc.json,在syntask.sh中先調用主表配置文件,再調用子表配置文件。#!/bin/bash
source?/etc/profile
#?截至時間設置為當前時間戳
end_time=$(date?+%s)
#?開始時間設置為120s前時間戳
start_time=$(($end_time?-?3600))
/datax/bin/datax.py?/mysql2mysql-approval.json?-p?"-Dstart_time=$start_time?-Dend_time=$end_time"
/datax/bin/datax.py?/mysql2mysql-approval-doc.json?-p?"-Dstart_time=$start_time?-Dend_time=$end_time"
多級多路同步
要實現多級同步,可以在每兩級之間搭建一個datax實例實現這兩級之間的數據同步。
要實現多路同步,可以為同一個表編寫多個配置文件,向多個目標庫同步。
總結
以上是生活随笔為你收集整理的datax 持续数据同步_采用DataX实现多表增量数据同步的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 好看的网名女生145个
- 下一篇: 看不懂的网名98个