1. 前言🔥
在我们的认知中,我们会使用 SVN 或 Git 进行代码的版本管理。但是,我们是否好奇过,数据库也是需要进行版本管理的呢?
在每次发版的时候,我们可能都会对数据库的表结构进行新增和变更,又或者需要插入一些初始化的数据。而我们的环境不仅仅只有一套,一般来说项目会有 dev、test、pred、prod四套环境,会对应 dev、test、prod 三个数据库。pred 环境,一般连接 prod 数据库,做准生产的验收。
那么,就意味着我们需要对 dev、test、prodD 数据库都做一遍初始化操作。“人,是系统最大的 BUG”。很多时候,我们并不能保证像机器一样,每次都操作都正确,这就导致在不同的环境下,因为数据的每个版本的初始化,带来额外的验收成本。
甚至说,因为我们常常是手动操作 dev 数据库,没有整理一个完整清单,保证我们在 test、prod 数据库中执行相同的操作。
基于以上种种,如果我们能像管理代码版本一样,来管理我们的数据库版本,是不是这些问题可以得到很好的解决?答案是,绝大多数是的。
目前,技术社区已经提供了很多解决方案。比如:
-
Flyway
-
Liquibase
-
dbdeploy
-
SQL Source Control
-
dbv
-
MyBatis Migrations