一直從事軟件網站系統開發工作,經常要在本地開發完成後,同步數據庫結構到服務器端,
一般來說新項目就是把本地數據庫直接導出到生產環境即可,但是後續的維護在數據結構同步上就稍顯麻煩,
因此就有了這個項目的由來分享一個自己開發的小工具,方便進行兩個數據庫之間的同步,廢話不多說直接進入正題,
下載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/
如有問題歡迎留言反饋