Mysql數據結構同步工具

一直從事軟件網站系統開發工作,經常要在本地開發完成後,同步數據庫結構到服務器端,

一般來說新項目就是把本地數據庫直接導出到生產環境即可,但是後續的維護在數據結構同步上就稍顯麻煩,

因此就有了這個項目的由來分享一個自己開發的小工具,方便進行兩個數據庫之間的同步,廢話不多說直接進入正題,

下載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/

如有問題歡迎留言反饋

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章