在開發項目的時候,我們經常會遇到數據同步的場景。例如將開發環境的數據庫表同步到測試環境,將MySQL中的數據同步到ES中。今天給大家分享一款好用的數據同步工具DBSyncer,自帶可視化界面,希望對你有所幫助!
簡介
DBSyncer是一款開源的數據同步工具,支持MySQL、Oracle、PostgreSQL、Elasticsearch(ES)、Kafka、File等同步場景,目前在Gitee上已有3.1k+Star。
DBSyncer具有如下特性:
- 組合驅動:支持自定義庫與庫的同步組合,例如可以將MySQL中的數據同步到ES。
- 實時監控:支持全量同步和增量同步,可以監控同步運行狀態、結果、同步日誌和系統日誌。
- 開發插件:支持編寫代碼自定義轉化同步邏輯。
下面是DBSyncer使用過程中的效果圖,功能還是挺實用的!
安裝
使用Docker來安裝DBSyncer是非常方便的,我們將採用此種方式。
- 首先通過如下命令下載鏡像;
docker pull registry.cn-hangzhou.aliyuncs.com/xhtb/dbsyncer:latest
- 下載完成後通過如下命令運行對應的容器;
docker run -p 18686:18686 --name=db-syncer \
-e TZ="Asia/Shanghai" \
-v /mydata/db-syncer/data:/app/dbsyncer/data \
-v /mydata/db-syncer/plugins:/app/dbsyncer/plugins \
-d registry.cn-hangzhou.aliyuncs.com/xhtb/dbsyncer:latest
- 容器運行後,就可以訪問DBSyncer的Web控制枱了,默認賬號密碼為
admin:admin,訪問地址:http://192.168.3.101:18686
使用
這裏將以電商系統中商品表的數據同步為例,來介紹下DBSyncer的使用。mall項目是一套基於
SpringBoot3+ Vue 的電商系統(Github標星60K),後端支持多模塊和最新微服務架構,採用Docker和K8S部署。包括前台商城項目和後台管理系統,能支持完整的訂單流程!涵蓋商品、訂單、購物車、權限、優惠券、會員、支付等功能!
- Boot項目:https://github.com/macrozheng/mall
- Cloud項目:https://github.com/macrozheng/mall-swarm
- 教程網站:https://www.macrozheng.com
項目演示:
MySQL數據同步
- 使用的簡化版商品表結構如下;
CREATE TABLE `product` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`sub_title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`price` decimal(10, 2) NULL DEFAULT NULL,
`pic` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
- 這裏創建兩個數據庫
mall_dev和mall_test,mall_dev中的product表包含商品數據,mall_test中的不包含商品數據,我們將把mall_dev中的數據同步到mall_test中去;
- 我們需要在DBSyncer中添加好
mall_dev和mall_test對應的連接;
- 然後再添加驅動,設置好數據源與目標源;
- 然後配置好字段的映射關係,如果是所有字段都需要同步的話全選即可;
- 之後點擊驅動右上角的啓動按鈕即可實現數據同步,同步成功後在數據庫中也可以看到對應的數據了。
MySQL同步到ES
- 在同步數據到ES之前,我們需要先創建好product對應的索引;
PUT /product_index
{
"mappings": {
"properties": {
"id": {
"type": "long"
},
"title": {
"type": "text"
},
"sub_title": {
"type": "text"
},
"pic": {
"type": "text"
},
"price": {
"type": "double"
}
}
}
}
- 在Kibana的
Dev Tools中使用上述命令即可創建,Kibana的訪問地址:http://192.168.3.101:5601
- 然後在DBSyncer中添加ES對應的連接,如果ES未設置密碼的話隨便輸一個就行;
- 之後再添加一個從MySQL同步到ES的驅動;
- 然後配置好驅動中的字段映射關係,注意配置好主鍵;
- 點擊驅動右上角的啓動按鈕進行數據同步;
- 同步成功後可以在ES中查詢到對應的數據。
總結
今天給大家分享了DBSyncer這款可視化數據同步工具的使用,主要是實現了MySQL和ES之間的全量同步,當然DBSyncer還能支持增量同步,以及通過插件自定義同步邏輯,感興趣的小夥伴可以研究下!
項目地址
https://gitee.com/ghi/dbsyncer