基于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初始化数据文件如下 ![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTYwNjYxNi8yMDE5MTAvMTYwNjYxNi0yMDE5MTAxNTEwNTczNTk0NS0xODQyNjk3MDk5LmpwZw==.png)
其他定制项目可以用同一个结构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表
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTYwNjYxNi8yMDE5MTAvMTYwNjYxNi0yMDE5MTAxNTEwNTc0NjI3Ny0xMDYzMDk5NzM4LmpwZw==.png)
3.2.1.2 右击表名,选择运行SQL文件
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTYwNjYxNi8yMDE5MTAvMTYwNjYxNi0yMDE5MTAxNTEwNTc1NTU5NS0xNzI3NTg3NTEwLmpwZw==.png)
3.2.1.3 选择表结构SQL文件
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTYwNjYxNi8yMDE5MTAvMTYwNjYxNi0yMDE5MTAxNTEwNTgwMjM1MC0xNzk3MTg1ODYzLmpwZw==.png)
3.2.1.4 运行表结构SQL文件
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTYwNjYxNi8yMDE5MTAvMTYwNjYxNi0yMDE5MTAxNTEwNTgxMTQyMi0xNTA1ODI1NjQ4LmpwZw==.png)
3.2.1.5 完成后错误为0
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTYwNjYxNi8yMDE5MTAvMTYwNjYxNi0yMDE5MTAxNTEwNTgyMDE3Ni04MDAwNzQyNTUuanBn.png)
3.2.1.6 右击表,选择刷新后可看到表
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTYwNjYxNi8yMDE5MTAvMTYwNjYxNi0yMDE5MTAxNTEwNTgyOTA4NS0xNDM2MDMyNDQzLnBuZw==.png)
3.2.2 表初始化数据
IBMS_InitData.sql
导入步骤
同上。
3.3 将上述两个文件托管在Git平台上
具体可参照Git管理代码类文章
3.4 数据库字段的新增修改,初始化数据的修改。
无论是A或者B或者C修改了数据库的结构或初始化,导出两份文件,一份结构,一份初始化数据(需要删除其他非初始化的垃圾脏数据)
3.4.1 导出结构
右键要导出的表,单击数据传输
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTYwNjYxNi8yMDE5MTAvMTYwNjYxNi0yMDE5MTAxNTEwNTgzNzQzMS03OTczNzkyOTYuanBn.png)
3.4.1.1 选择文件
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTYwNjYxNi8yMDE5MTAvMTYwNjYxNi0yMDE5MTAxNTEwNTg0Mzg4OC0xNDkxNTQwNjAzLmpwZw==.png)
3.4.1.2 选择导出路径到桌面
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTYwNjYxNi8yMDE5MTAvMTYwNjYxNi0yMDE5MTAxNTEwNTg1MDU0NS0zMzMxNTI1OC5qcGc=.png)
3.4.1.3 输入导出名称为IBMS_Structure
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTYwNjYxNi8yMDE5MTAvMTYwNjYxNi0yMDE5MTAxNTEwNTg1OTY5Mi0xNTE3NTg4MjM3LmpwZw==.png)
3.4.1.4 选择创建表,取消插入记录
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTYwNjYxNi8yMDE5MTAvMTYwNjYxNi0yMDE5MTAxNTEwNTkwNzMxMi0zMjE3MzYzMi5qcGc=.png)
3.4.6最后点开始点确定即可
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTYwNjYxNi8yMDE5MTAvMTYwNjYxNi0yMDE5MTAxNTEwNTkxMjI5OS03NjcyMDI2NTkuanBn.png)
3.4.7 0错误,100%数据传输
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTYwNjYxNi8yMDE5MTAvMTYwNjYxNi0yMDE5MTAxNTEwNTkxNjk5MC0xNTY0MzI4NzY0LmpwZw==.png)
3.4.2 导出初始化数据文件
3.4.2.1 注意要勾选存储过程与事件
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTYwNjYxNi8yMDE5MTAvMTYwNjYxNi0yMDE5MTAxNTEwNTkyMjk3NC0yMDY0OTk2NTc5LnBuZw==.png)
3.4.2.2 取消创建表,勾选插入记录
![](https://www.codeprj.com/image/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTYwNjYxNi8yMDE5MTAvMTYwNjYxNi0yMDE5MTAxNTEwNTkyNzA0NS00Nzg1NDEwNjguanBn.png)
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到本地,重新导入自己独立的数据库以达到同步。 |