數據生命週期管理的思考


這是學習筆記的第 1897 篇文章
mysql


  今天在思考數據生命週期管理的時候,理清了一些思路。sql

做爲DBA,其實須要從更高的一個角度來看待你所管理的數據。數據庫

打個比方,若是我知道我管理的1000個數據庫天天發生了多少張表的變動,哪些是人工觸發的,哪些是程序觸發的,若是咱們知道,那麼咱們處理問題的時候會更加主動,而絕大多數狀況下,其實咱們是不知道的,或者說咱們以爲不須要關注這些。微信

咱們來細化一下,對於表的DML操做,應該是程序端可以處理的,對於這部分的數據,其實咱們能夠經過快照的方式來處理,好比總共有1萬張表,那麼咱們能夠作週期性的抽取,經過細粒度的數據抽取,咱們能夠知道某個表在一段時間內的數據變化狀況,是否存在碎片等,固然這個頻率不宜太高,通常一天一次到兩次便可。學習

對於DDL的操做,其實比較抽象,有CREATE,ALTER,DROP, (不包含TRUNCATE),簡單來講,也是週期性抽取,頻率可能會更高一些,可是數據量要遠比DML的小得多。假設10000張表100天發生了20次變動,那麼總的抽取記錄數就應該是10020,而不是10000*100=100萬,因此相比來講,這是一種因需而動的處理方式,spa

這個DDL的場景怎麼落地,和數據生命週期管理如何關聯起來,咱們舉個例子。好比表test有10個字段,在一個月之後,字段數是20個,那麼能夠經過兩個維度,第一個是時間維度,從10個字段到20個字段,在這段時間範圍內是如何變化的。好比咱們能夠根據數據的變化軌跡定位到10個字段到19個字段的過程,第二個維度,從字段名觸發,某個字段在一段時間裏是否發生了變化,好比類型從varchar(30)變爲varchar(50).net

咱們能夠經過抽取的建表語句來進行比對。orm

好比咱們根據DDL變化作了兩次抽取,能夠理解是兩個快照,那麼經過對比兩個快照就能夠輕鬆的獲得咱們須要的信息,經過時間維度或者字段信息。blog

DDL裏面對於DROP的操做是一個敏感並且模糊的處理,咱們能夠經過標識DDL類型來進行週期維護,如何肯定表被刪除了,必定是經過已有的參考依舊纔可以分辨出來,MySQL不會主動經過數據字典來告知你。生命週期


固然這個列表也能夠經過mysqldump的備份來補充,好比咱們作mysqldump備份,只備份表結構,其實就幾秒鐘的事情,咱們能夠經過dump文件輕鬆獲得一個庫的表信息列表。

能夠使用以下的腳本命令:

grep -E  "^CREATE TABLE|^CREATE DATABASE" devopsdb.sql |sed  's/\/\*\!32312 IF NOT EXISTS\*\///g'|sed 's/IF NOT EXISTS//g'|sed 's/CREATE//g'|awk '{print $1" "$2}'|sed 's/TABLE/--/g'

這個腳本會輸出數據庫的表列表,格式相似這樣的形式:

DATABASE `test`

-- `dept`

-- `emp`

-- `mysql_info`

-- `t`

-- `t1`

-- `t2`

-- `test`

-- `test_data`

-- `tmp`

DATABASE `test2`

-- `test`





本文分享自微信公衆號 - 楊建榮的學習筆記(jianrong-notes)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索