最近完成了初版的數據邏輯備份恢復的功能,和業務方做了一些交流和演示,發現他們對於備份恢復側的一些東東還是不夠敏感,因為因為一些術語的差異,他們不大理解所謂的備份恢復能幹什麼,所以我們做了一些討論,最後決定改為「數據克隆」。
1.產品定位:
數據克隆是高效,安全的從通過從線上指定資料庫/表克隆數據,從而快速構建虛擬環境,提供更高效的數據交付服務。從效率上可以支持業務自助提取數據,分鐘級快速構建環境,可以通過workbench等工具訪問數據,整個過程基本不需要DBA手工操作介入。從安全上,支持數據操作日誌審計,提供庫/表訪問過濾,隨機虛擬環境和臨時密碼交付,此外會對虛擬環境使用時長進行限制,儘可能保證數據的使用安全。
2.適用場景:
目前數據克隆功能支持如下的場景:
1)線上配置數據的快速查看
2)提取線上表結構
3)日誌數據查詢,線上大表
4)線上SQL異常,快速構建虛擬環境進行SQL優化,壓測等
5)指定大表的變更和數據操作影響評估
6)數據補丁合併,基於業務邏輯的數據操作和數據補丁整理
整個實現的過程有很多考慮的細節,不過還是在設計和實現中由同事和我一併解決了。
到了交付的時機了,我們想到還有一個關鍵的地方需要補充,那就是資料庫和用戶的權限關聯,也就意味著每個人可以看到和使用的資料庫應該是不大一樣的,因為做一些權限隔離,所以接下來我會說說數據克隆方向的用戶權限設計。
數據克隆的用戶權限設計是面向業務使用的基礎功能,目前對於用戶權限的設計可以基於資料庫級別。
權限的實現可以分兩個階段來完成:
1)數據初始化階段,可以使用用戶組批量初始化的方式,部分數據可以從工單歷史中獲取
2)定製化配置階段,根據業務需求變更和組織架構調整進行資料庫和用戶映射關係的微調
其中,
實例信息和庫信息可以基於資料庫基線表 mysql_db_baseline
用戶組信息和用戶信息可以基於用戶表 user_info
資料庫-用戶關係表需要新建,表名為:mysql_db_user_rel(id,ip_addr,db_port,db_name,user_id)
需要實現四個子功能:
1)資料庫-用戶關係映射,實現單一資料庫和單一用戶的關係,在關係表中為一條記錄
2)資料庫-用戶關系列表,通過資料庫維度(IP+埠+資料庫名)查看相關用戶列表信息
3)資料庫-用戶組關係映射,實現單一資料庫和單一用戶組的關係,具體邏輯為:
a) 輸入資料庫信息(IP+埠+資料庫名),UserID
b) 根據UserID關聯用戶組信息
c) 根據用戶組信息得到組內的UserID列表
d) 循環用戶列表,根據資料庫-用戶關係建立映射,需要考慮重複記錄的過濾
4)實例列表信息,根據用戶UserID得到歸屬的實例列表,具體邏輯為:
a) 輸入UserID
b) 根據UserID在資料庫-用戶關係表中得到相關的資料庫列表,進一步過濾得到實例IP+埠信息