一直从事软件网站系统开发工作,经常要在本地开发完成后,同步数据库结构到服务器端,
一般来说新项目就是把本地数据库直接导出到生产环境即可,但是后续的维护在数据结构同步上就稍显麻烦,
因此就有了这个项目的由来分享一个自己开发的小工具,方便进行两个数据库之间的同步,废话不多说直接进入正题,
下载dbsync工具包 https://download.csdn.net/download/weixin_36441117/12382401 (支持下赚点资源分谢谢)
压缩包内有个bin文件夹,其中找到对应的版本
压缩包文件目录及对应的版本说明如下
/bin
/bin/386/windows 如果是32位Windows系统请使用本文件夹下的dbsync.exe
/bin/386/linux 如果是32位Linux系统请使用本文件夹下的dbsync
/bin/amd64/windows 如果是64位Windows系统请使用本文件夹下的dbsync.exe
/bin/amd64/linux 如果是64位Linux系统请使用本文件夹下的dbsync
/bin/arm64 应该没有arm嵌入式设备的用户吧,忽略此目录
找到对应的执行文件,放到与跟文件加下的config.json相同目录下,如下图
打开命令行工具到对应的目录下,并且执行dbsync如下图
为了方便使用先看下config,json文件如何配置
{
"configure":{
"UseLogFile" : false //是否启用日志文件
,"LogLevel" : 0 //日志等级0:除错模式 1.提醒 2.讯息 3.错误 4.致命错误
},
"source_db":{ //这里设置来源的数据库,如果使用xml模式可不设置
"driver":"mysql"
,"host":"192.168.26.1"
,"port":"3306"
,"user":"test"
,"password":"123456"
,"dbname":"test"
,"charset":"utf8"
},
"target_db":[ //这里设置目标数据库,注意是数组,可以设置多个目标
{
"driver":"mysql"
,"host":"192.168.26.1"
,"port":"3306"
,"user":"test"
,"password":"123456"
,"dbname":"test1"
,"charset":"utf8"
,"definer":"test@localhost"
}
],
"data_sync":[ //这里设置需要数据同步的表跟相对应的字段
{
"table_name" : "config"
,"key_field" : "name,site_uid"
,"exclude_field" : ["cfg_id"]
},
{
"table_name" : "menu"
,"key_field" : "mid"
,"exclude_field" : []
}
],
"scp_remote" :{ //这里设置的使用SCP上传的ssh设置
"host" : "1.2.3.4"
,"port" : 22
,"username" : "root"
,"password" : ""
}
}
(1) source_db 是设置数据库的结构来源,如果使用库对库结构同步,
或者将数据库结构导出成XML文件时,需要设置此部分
(2)target_db 是用来将结构同步到那些数据库,所以注意这里是个数组,每个目标服务器是对象
(3)data_sync 这个设置要特别说一下,因为我们可能除了数据结构需要同步以外,有可能有一些数据也需要同步,
例如菜单表,可能我们系统增加功能之后,也需要在目标库中去新增对应的菜单,如下
{
"table_name" : "menu"
,"key_field" : "mid"
,"exclude_field" : []
}
菜单表的表名为menu,然后为了判断该数据目标数据库是否有重复,所以需要指定 key_field如果目标表,
已经有相同的mid时就不插入该条数据,再看一个例子
{
"table_name" : "config"
,"key_field" : "name,site_uid"
,"exclude_field" : ["cfg_id"]
},
我项目中还有一个环境变量配置表,这张表的目的是项目中,经常需要一些环境配置,这些配置是直接由数据表来生成,
配置的表单的,这张数据表的pk字段是cfg_id,但是因为本地的id可能跟线上不同,另外因为我们的项目是多用户系统,
每个站点使用site_uid来区分,每个变量都是使用 name 这个字段来区分不同变量,因此在数据同步的时候,使用了
"name,site_uid"来判断目标库里是否有相同数据,但是在插入数据的时候要忽略这张表本身的cfg_id主键字段以免重复
(4)scp_remote 为了方便我们经常需要将本地的数据库结构导出成XML文件并且上传到服务器,
因此提供了一个快速的上传命令,这里是配置远端的服务器的SSH设置使用此设置透过scp来上传
当配置完成来看下如何使用吧,命令特别简单
直接库对库的结构同步
D:\dbsync_v1.7>dbsync.exe sync
如果要将来源数据库结构导出XML文件,导出成 schema.xml
D:\dbsync_v1.7>dbsync.exe export
如果要将XML同步到目标数据库
D:\dbsync_v1.7>dbsync.exe xsync
将本地的文件透过SCP上传服务器
D:\dbsync_v1.7>dbsync.exe upload schema.xml /home/yang/
如有问题欢迎留言反馈