網(wǎng)站首頁 編程語言 正文
使用kettle的數(shù)據(jù)庫增量備份與全量備份
- 背景
- 單表對(duì)主表的全量備份
- 使用update_time的增量備份
- 使用Kettle Spoon
背景
冷熱庫備份,熱庫保留最近七天的原始數(shù)據(jù),其余的數(shù)據(jù)都備份到冷庫,平均每天約產(chǎn)生300G的原始數(shù)據(jù)。
熱庫采用業(yè)務(wù)上的id和時(shí)間每一天來分表,并且有一個(gè)分區(qū)的主表,冷庫只按業(yè)務(wù)id來分表,天的數(shù)據(jù)都聚合在一起。
使用kettle進(jìn)行數(shù)據(jù)庫的數(shù)據(jù)備份轉(zhuǎn)移,有對(duì)歷史數(shù)據(jù)做全量備份和對(duì)增量數(shù)據(jù)做每天的增量數(shù)據(jù)的兩種方案。
如下所示:
熱庫:
分區(qū)主表: tableName_業(yè)務(wù)id
分區(qū)子表: tableName_業(yè)務(wù)id_日期
冷庫:
分區(qū)主表: tableName_業(yè)務(wù)id
分區(qū)子表: tableName_業(yè)務(wù)id_日期
對(duì)于某些數(shù)據(jù)量不是太大的表,在熱庫因?yàn)榭紤]性能的原因,依舊會(huì)按天進(jìn)行分表,但是備份到冷庫之后會(huì)很少用到,一般都是原始的ods表,只有項(xiàng)目改了方案或者其他情況,需要重跑數(shù)據(jù)或者做數(shù)據(jù)清洗,才有可能使用到冷庫的數(shù)據(jù)。所以某些數(shù)據(jù)量不是太大的表可以在冷庫直接做主表存儲(chǔ),不做按天分表(不分表或者按月分表)。天表數(shù)據(jù)達(dá)到幾百萬的,冷庫依舊是做按天分表。
單表對(duì)主表的全量備份
由于是全量備份,需要對(duì)所有熱庫的數(shù)據(jù)進(jìn)行備份到冷庫,其中數(shù)據(jù)量會(huì)很大,可能需要很長(zhǎng)的備份時(shí)長(zhǎng),備份過程可能會(huì)出現(xiàn)數(shù)據(jù)庫報(bào)錯(cuò)或者連接數(shù)不足等非意料中的異常,為了方便排查未成功備份的數(shù)據(jù),使用熱庫子表對(duì)冷庫主表備份的方式。當(dāng)備份出現(xiàn)問題時(shí),直接排查log或者郵件,直接重新備份發(fā)生錯(cuò)誤的子表就行。
使用update_time的增量備份
增量備份,如果和全量備份一樣使用子表全量備份到主表的方式的話,因?yàn)闊釒鞎?huì)保留七天的數(shù)據(jù),再加上前幾天的天表,可能會(huì)有歷史數(shù)據(jù)遺留的數(shù)據(jù)插入進(jìn)去,那么可能就需要每一天做增量備份的時(shí)候,都將熱庫存在的七天的表都重新備份一次冷庫中去。但是前面六天絕大部分?jǐn)?shù)據(jù)是不需要再次備份的,這樣會(huì)浪費(fèi)比較多的性能。
一般是使用update_time這個(gè)字段來進(jìn)行備份的,每次備份都會(huì)先查詢冷庫的表中最大的更新時(shí)間maxUpdateTime,然后根據(jù)這個(gè)時(shí)間去熱庫的表中查詢出所有update_time > maxUpdateTime的數(shù)據(jù),再將其備份到冷庫中去,這樣用作同步備份的就只有新增和修改過的這一部分?jǐn)?shù)據(jù)了。
使用Kettle Spoon
1、Kettle Spoon的循環(huán),通過一個(gè)步驟來引入要循環(huán)的變量,另外后面跟一個(gè)步驟來循環(huán)執(zhí)行每一個(gè)變量
通過SQL獲取表名(上圖中的獲取表類型):
表循環(huán)任務(wù):
2、Insert/Update和Table Output
備份的時(shí)候一般就是選用這兩種方式備份,前面一種會(huì)插入數(shù)據(jù)或者更新數(shù)據(jù)(如果主鍵重復(fù)),后面一種就是直接插入數(shù)據(jù),如果主鍵重復(fù)則會(huì)直接報(bào)錯(cuò)。
需要注意的是,Insert/Update及其消耗CPU資源,而Table Output則性能會(huì)好很多,速度也會(huì)快很多。如果確定插入的數(shù)據(jù)完全沒有主鍵重復(fù)的數(shù)據(jù)的話,最好是使用Table Output進(jìn)行備份。
3、對(duì)于容易出錯(cuò)的地方都應(yīng)該做異常處理機(jī)制(如與數(shù)據(jù)庫交互的所有操作),如果某些地方在執(zhí)行的地方報(bào)錯(cuò)了而沒有異常處理機(jī)制,那么這個(gè)任務(wù)就會(huì)直接終止。
4、使用郵件,配置錯(cuò)誤信息
有一個(gè)Mail的組件,可以拉出來直節(jié)配置,對(duì)于郵件地址、賬號(hào)密碼等配置就不多說了,主要是在程序發(fā)生錯(cuò)誤的時(shí)候,將發(fā)生的錯(cuò)誤信息附加在郵件的附件中。
配置好上面兩個(gè)步驟,當(dāng)發(fā)生異常時(shí),就會(huì)發(fā)送一個(gè)異常郵件出來,并且郵件會(huì)攜帶一個(gè)包含錯(cuò)誤日志的附件過來。
原文鏈接:https://blog.csdn.net/weixin_44228698/article/details/123622098
相關(guān)推薦
- 2022-07-18 linux系統(tǒng)安全和應(yīng)用
- 2023-07-09 echarts飄警告[ECharts] There is a chart instance alre
- 2023-10-18 下載文件時(shí)前端重命名的實(shí)現(xiàn)方法將url地址轉(zhuǎn)化為文件實(shí)現(xiàn)重命名
- 2023-03-20 C#中如何限制TextBox控件內(nèi)輸入值的范圍_C#教程
- 2022-04-28 Python中print()函數(shù)的用法詳情_python
- 2022-03-15 巧用Redis實(shí)現(xiàn)分布式鎖詳細(xì)介紹_Redis
- 2022-12-02 python3中join和格式化的用法小結(jié)_python
- 2022-07-21 SpringBoot默認(rèn)開啟AOP,采用Cglib代理方式?(Spring AOP快速入門)
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支