5

多人开发时的数据库同步问题

相信各位小伙伴在进行团队开发时都遇到过这个问题:一般开发时,各个团队成员使用的是自己开发环境上的本地数据库,这个数据库只有自己在使用,开发过程中,数据库是会经常变动的,比如其他小伙伴添加了一个字段,或者新增了一张表,那么此时问题就来了,我如何把其他小伙伴进行的数据库变更同步到我本地来?不然我更新代码后很可能各种报错。这个虽然是一个小问题,大不了直接再去拷贝一份最新的数据库出来,但是每次都这样,非常低效和繁琐,那这个问题该如何解决?

解决方式1:

开发时团队成员共用一套数据库,直接把数据库的变更同步到这个数据库上就行了。这个方法简单粗暴,不过还是有不爽的地方: 共用数据库的话,数据就是共用的,我开发测试一个功能时,数据有可能被其他小伙伴改动了;还有这种方式数据库变更也要单独做版本控制。

解决方式2;

每个小伙伴都使用本地库开发,有数据库变更时给其他人发邮件。
这种方式非常繁琐,低效,而且很可能其他小伙伴经常忘记发的情况。

解决方式3:

使用开源的数据库版本控制工具。比如dbv ,这个工具安装配置极其简单,也能满足现在的使用要求,其实我们的需求也并不多,主要是:

  1. 对数据库的变更进行版本控制,这个是必须的,对数据库的变更必须要记录下来。
  2. 我本地的数据库如何同一键同步其他小伙伴做的数据库变动,比如小张增加了一个字段,我可以一键同步到我本地,不至于我本地各种页面报错。
    目前这个工具这两个大需求都能满足,下面就介绍下如何安装使用吧。

安装及配置

其实如何安装和配置文档上说的都很详细,文档传送门, 这里我再重复一遍。

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, 这个工具就介绍完了,各位小伙伴可以尝试一下~,如果大家有更好的管理方式,可以在留言中探讨一下,相互学习。如果我的文章对你有帮助的话,动动手指点个赞吧~ 谢谢!


zhaot
1.2k 声望144 粉丝

努力让技术精进,灵魂有趣