多人开发时的数据库同步问题
相信各位小伙伴在进行团队开发时都遇到过这个问题:一般开发时,各个团队成员使用的是自己开发环境上的本地数据库,这个数据库只有自己在使用,开发过程中,数据库是会经常变动的,比如其他小伙伴添加了一个字段,或者新增了一张表,那么此时问题就来了,我如何把其他小伙伴进行的数据库变更同步到我本地来?不然我更新代码后很可能各种报错。这个虽然是一个小问题,大不了直接再去拷贝一份最新的数据库出来,但是每次都这样,非常低效和繁琐,那这个问题该如何解决?
解决方式1:
开发时团队成员共用一套数据库,直接把数据库的变更同步到这个数据库上就行了。这个方法简单粗暴,不过还是有不爽的地方: 共用数据库的话,数据就是共用的,我开发测试一个功能时,数据有可能被其他小伙伴改动了;还有这种方式数据库变更也要单独做版本控制。
解决方式2;
每个小伙伴都使用本地库开发,有数据库变更时给其他人发邮件。
这种方式非常繁琐,低效,而且很可能其他小伙伴经常忘记发的情况。
解决方式3:
使用开源的数据库版本控制工具。比如dbv ,这个工具安装配置极其简单,也能满足现在的使用要求,其实我们的需求也并不多,主要是:
- 对数据库的变更进行版本控制,这个是必须的,对数据库的变更必须要记录下来。
- 我本地的数据库如何同一键同步其他小伙伴做的数据库变动,比如小张增加了一个字段,我可以一键同步到我本地,不至于我本地各种页面报错。
目前这个工具这两个大需求都能满足,下面就介绍下如何安装使用吧。
安装及配置
其实如何安装和配置文档上说的都很详细,文档传送门, 这里我再重复一遍。
1. 下载安装
下载后解压到apache
的站点目录下,或者把它放到别的目录,配置为一个虚拟站点也行。
比如我就把它配置为了一个虚拟站点,DocumentRoot
指向根目录即可:
httpd-vhosts.conf
Listen 7845
<VirtualHost *:7845>
DocumentRoot "E:\devsofts\DBVC\shangsheng"
ServerName localhost
ErrorLog "logs/localhost_123-error.log"
CustomLog "logs/localhost_123_access.log" common
DirectoryIndex index.html index.php
</VirtualHost>
重启apache
。
2. 配置
php.ini
要打开php_gettext
扩展:
extension=php_gettext.dll
复制dbv
根目下的config.php.sample
一份为config.php
,配置config.php
中的数据库配置。连接到你本地的数据库。
define('DB_HOST', 'localhost');
define('DB_PORT', 3306);
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '123456');
define('DB_NAME', 'shangsheng_offical');
配置完成后,在浏览器中访问你刚才配置的站点就能看到了
3. 使用git或者svn做版本控制
dbv
其实也是使用的git
或者svn做的版本控制,这个和一般的项目是一样的,比如你使用git
的话直接在根目录下执行
git init
就行了,然后把它提交到git
服务器,方便下一步其他小伙伴同步更新。
注意: /data/meta/revision
这个文件存储的是你本地数据库信息,这个文件必须添加到git
的忽略列表,否则会覆盖到其他人的;还有config.php
这个文件也要添加到忽略列表,因为这是你本地的配置。和其他团队成员无关。
4. 如何使用
官方举例了四个使用场景,其实我们需要的就是这个,这个是详细的使用举例,我就不再重复了,看这里
注意:
每个版本都是放在data\revisions
目录下的,每个版本对应一个子目录,注意这里的子目录必须是数字
,否则在浏览下看到的是空串,更不支持中文。官方也有说明:
结语
OK, 这个工具就介绍完了,各位小伙伴可以尝试一下~,如果大家有更好的管理方式,可以在留言中探讨一下,相互学习。如果我的文章对你有帮助的话,动动手指点个赞吧~ 谢谢!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。