基於Git的數據庫sql文件的管理——完美解決團隊sql操作協同問題
1.產生背景
公司開發項目過程中,后台會分為很多種服務,比如web服務,采集服務,都需要去操作數據庫,有的時候甚至前端也會去操作數據庫,修改字段,增加字段,刪除字段,修改初始化數據等。怎么在各方之間進行同步?本文介紹了一種基於Git(騰訊雲(原Coding))的數據庫sql文件管理方式。
2.之前沒用Git管理數據庫出現的問題
2.1 用同一個庫調試帶來的問題
- 前端A,web服務端B,采集端C共用一個數據庫調試。前端A調試時,修改了數據庫的某些數據,導致服務端B跟采集端C出現異常,因為A在調試問題沒有及時通知到大家。浪費了B跟C的調試時間。
- 前端A,web服務端B,采集端C共用一個數據庫調試。采集端C增加了字段,調試過程中,沒及時通知到大家,導致服務端B取該表數據不成功,前端顯示異常,浪費了A跟B的時間
2.2 數據庫sql版本不統一帶來的問題
采集端C由於1個月沒更新,但是數據庫版本已經發布了多個,采集端編碼好,統一發布之后,采集端不能運行成功,因為數據庫在服務端B增加修改了字段,而采集端沒有同步造成。
3.解決方案
3.1 Sql文件的創建
怎么把各方的數據庫版本同步,根據代碼管理規范,我想到了Git,用Git來管理Sql文件。Sql分成兩份文件,一份是IBMS_Structure.sql,數據庫結構文件;另一份是IBMS_InitData.sql初始化數據文件如下
其他定制項目可以用同一個結構sql,但是不同的初始化數據文件,如南通項目IBMS_InitDataNT.sql;銀川項目用IBMS_InitDataYC.sql
3.2 Navicat將兩份文件導入Mysql
3.2.1 表結構文件
原則:所有人都需要自己建立獨立的數據庫來調試
IBMS_Structure.sql
導入步驟
打開數據庫管理工具navicat.exe,
3.2.1.1 找到ipbms_sync表
3.2.1.2 右擊表名,選擇運行SQL文件
3.2.1.3 選擇表結構SQL文件
3.2.1.4 運行表結構SQL文件
3.2.1.5 完成后錯誤為0
3.2.1.6 右擊表,選擇刷新后可看到表
3.2.2 表初始化數據
IBMS_InitData.sql
導入步驟
同上。
3.3 將上述兩個文件托管在Git平台上
具體可參照Git管理代碼類文章
3.4 數據庫字段的新增修改,初始化數據的修改。
無論是A或者B或者C修改了數據庫的結構或初始化,導出兩份文件,一份結構,一份初始化數據(需要刪除其他非初始化的垃圾臟數據)
3.4.1 導出結構
右鍵要導出的表,單擊數據傳輸
3.4.1.1 選擇文件
3.4.1.2 選擇導出路徑到桌面
3.4.1.3 輸入導出名稱為IBMS_Structure
3.4.1.4 選擇創建表,取消插入記錄
3.4.6最后點開始點確定即可
3.4.7 0錯誤,100%數據傳輸
3.4.2 導出初始化數據文件
3.4.2.1 注意要勾選存儲過程與事件
3.4.2.2 取消創建表,勾選插入記錄
3.4.2.3 其他同上3.4.1 導出結構
3.5 修改之后的兩份sql上傳到Git平台
git add .
git commit -m "B修改了xxx字段"
git push origin master
具體可參照Git管理代碼類文章
3.6 修改者發送郵件給大家
修改者以郵件形式發送大家修改了哪些字段,其他項目成員可以去看Git,上面會有對比不同的記錄
3.7 同步
其他被同步者把結構跟初始化數據兩份sql pull到本地,重新導入自己獨立的數據庫以達到同步。