一、简介
DBSyncer(英[dbsɪŋkɜː(r)],美[dbsɪŋkɜː(r) 简称dbs)是一款开源的数据同步中间件,提供MySQL、Oracle、SqlServer、PostgreSQL、Elasticsearch(ES)、Kafka、File、SQL等同步场景。支持上传插件自定义同步转换业务,提供监控全量和增量数据统计图、应用性能预警等。
二、安装
临时启动
docker run -d --name dbsyncer -p 18686:18686 crazylife/dbsyncer-web:latest
拷贝数据
mkdir -p /data/dbsyncer
docker cp dbsyncer:/app /data/dbsyncer/
设置文件权限
chmod 777 -R /data/dbsyncer
正式启动
docker run -d \
--name dbsyncer \
-p 18686:18686 \
-e TZ=Asia/Shanghai \
-v /data/dbsyncer/app:/app \
crazylife/dbsyncer-web:latest
三、配置mysql表实时同步
访问web页面
默认用户名密码,都是admin

登录之后,效果如下:

接下来,要实现,将mid_test库下的表players,同步到dms_test库下的表players2
点击添加链接
选择类型为:MySQL
名称:dev-dms-mid_test
账号:root
密码:***
URL:这里要注意修改为mysql地址,以及数据库名
最后点击保存

然后再添加驱动dev-dms-dms_test

点击添加驱动
数据源,选择:dev-dms-mid_test
目标源,选择:dev-dms-dms_test
名称:test1
点击上面的保存
点击增量同步,注意:全量同步,是一次性任务,因此后续的表修改不会同步,所以这里必须选增量同步。
数据源表,选择players
目标源表,选择players2
点击添加

高级设置,保持默认即可,点击保存按钮

点击齿轮图标

点击运行

这里会出现运行中,总数会显示,这个数字会动态显示,挺不错的。

四、测试数据写入
使用python脚本,直接写入1万条数据
import pymysql
# 替换为您的数据库信息
connection = pymysql.connect(host='mysql-xxx.mysql.database.aliyun.com',
port=3306,
user='root',
password='***',
database='mid_test',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
try:
with connection.cursor() as cursor:
for i in range(0,10000):
# SQL 插入语句
sql = """insert into players (player_id,team_id,player_name,height) values (200%s,200%s,'韦德%s','1%s');"""%(i,i,i,i)
print(sql)
cursor.execute(sql)
# 提交事务
connection.commit()
# print(connection.__dict__)
except pymysql.MySQLError as e:
print(e)
finally:
connection.close()
执行脚本,效果如下:

上面的也会动态显示数字,同步1万条

注意:增量同步,支持表数据的增删改查,但是不支持DDL语句,比如:修改表结构,添加索引,截断表等操作。