Mysql数据结构同步⼯具
⼀直从事软件⽹站系统开发⼯作,经常要在本地开发完成后,同步数据库结构到服务器端,
⼀般来说新项⽬就是把本地数据库直接导出到⽣产环境即可,但是后续的维护在数据结构同步上就稍显⿇烦,
因此就有了这个项⽬的由来分享⼀个⾃⼰开发的⼩⼯具,⽅便进⾏两个数据库之间的同步,废话不多说直接进⼊正题,压缩包内有个bin⽂件夹,其中到对应的版本
压缩包⽂件⽬录及对应的版本说明如下
/bin
/bin/386/windows      如果是32位Windows系统请使⽤本⽂件夹下的
/bin/386/linux            如果是32位Linux系统请使⽤本⽂件夹下的dbsync
/bin/amd64/windows 如果是64位Windows系统请使⽤本⽂件夹下的
/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"
mysql连接工具
},
"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& sync
如果要将来源数据库结构导出XML⽂件,导出成 l
D:\dbsync_v1.7& export
如果要将XML同步到⽬标数据库
D:\dbsync_v1.7& xsync
将本地的⽂件透过SCP上传服务器
D:\dbsync_v1.7& l /home/yang/
如有问题欢迎留⾔反馈

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。