SymmetricDS 异构数据库同步软件部署案例

SymmetricDS是一个开源的同步软件,该软件是基于java环境编写的,在运行的时候需要安装JDK。SymmetricDS可以同步文件和数据库,本文的重点是数据库方面的同步。

SymmetricDS支持多种数据库的同步,支持的数据库如下:

Oracle, MySQL, MariaDB, PostgreSQL, MS SQL Server (including Azure), IBM DB2,
H2, HSQLDB, Derby, Firebird, Interbase, Informix, Greenplum, SQLite (including
Android), Sybase ASE, and Sybase ASA (SQL Anywhere) databases.

数据库的同步可以按照计划同步,也可以实现准实时同步。

SymmetricDS是如何抓取源数据库的数据的变化然后再同步到目标数据库呢?

官方文档上介绍了三种方式来捕捉数据的变化:

? Lazy data capture queries changed data from a source system using some SQL
condition (like a
time stamp column).

通过sql的查询来捕捉数据的变化,比如说通过时间戳的变化来捕捉变化的数据。
? Trigger-based data capture
installs database triggers to capture changes.

通过在数据库中建立触发器来捕捉每张表的数据的变化。(在部署SymmetricDS的时候,所选中的需要同步的表,会由SymmetricDS自动建立触发器来捕捉该表中数据的更新,插入以及删除。)
?
Log-based data capture reads data changes from proprietary database recovery
logs.

基于日志的数据变化。通过读取数据库中日志的变化来捕捉变化的数据。

所有以上三个方面都有自己的优势和缺点,并且以上三种捕捉数据变化的方式,SymmetricDS在将来都会实现。但在目前,SymmetricDS只支持前两种方式来捕捉数据的变化。

下面通过一个官方的一个demo来实现sql server 到
Mysql的同步功能,该Demo是corp和store之间的同步,即公司和商店之间的数据库的同步。


 安装并配置SymmetricDS  

1.首先,从http://www.symmetricds.org/ 下载symmetric-ds-3.x.x-server.zip 文件。

2.在本地建立两个文件夹以此来代表两台机器。一个文件夹安装corp的SymmetricDS软件,另一个文件夹下也安装SymmetricDS软件代表store。

然后拷贝下载的symmetric-ds-3.x.x-server.zip文件分别到这两个文件夹下,并解压缩到当前文件夹到这两个文件夹下。

3.拷贝配置文件到相应路径下。

从F:\sync\sym-corp\samples路径下拷贝corp-000.properties到F:\sync\sym-corp\engines下,同样在F:\sync\sym-store001\samples下拷贝store-001.properties到F:\sync\sym-store001\engines下。

4.修改配置文件使SymmetricDS连接到数据库。

  Corp的配置:

    打开F:\sync\sym-corp\engines下的corp-000.properties,可以看到里面都是数据库连接的配置。

    第22行 :engine.name=corp-000,这个是该engine的名字。

    我这个demo中,公司的数据库是sql server,那么在这个文件中的配置应该如下:


 1 #数据库驱动的类名
2
3       db.driver=net.sourceforge.jtds.jdbc.Driver
4
5       #jdbc连接
6
7       db.url=jdbc:jtds:sqlserver://localhost:1433/corp000;useCursors=true;bufferMaxMemory=10240;lobBuffer=5242880
8
9       #数据库的登陆账号
10
11       db.user=sa
12
13       #数据库的登陆密码
14
15       db.password=Administrator
16
17       #主节点的注册地址
18       registration.url=
19       sync.url=http://localhost:8050/sync/corp-000
20
21       #设置的group id
22
23       group.id=corp
24
25       #分配的一个ID
26       external.id=000

  store的配置:

    打开F:\sync\sym-store001\engines下的store-001.properties,可以看到里面都是数据库连接的配置。

    第22行 :engine.name=store-001,这个是该engine的名字。

    我这个demo中,公司的数据库是sql server,那么在这个文件中的配置应该如下:


 1  #数据库驱动的类名
2
3       db.driver=com.mysql.jdbc.Driver
4       #jdbc连接
5
6       db.url=jdbc:mysql://localhost/store001
7       #数据库的登陆账号
8
9       db.user=root
10       #数据库的登陆密码
11
12       db.password=root
13       #需要连接主节点的SymmetrcDS来注册,只有注册通过之后,才能同步
14       registration.url=http://localhost:8050/sync/corp-000
15       #设置的group id
16
17       group.id=store
18
19       #分配的一个ID
20       external.id=001


 建立数据库并创建相应的业务表和系统表         
 
       
                     
                     
                     
                     
                     
               
 

△ 配置corp000的数据库信息

1.打开命令窗口并定位到F:\sync\sym-corp\bin路径下

2.建立业务表

在cmd窗口中输入以下命令,并按回车:


dbimport --engine corp-000 --format XML F:\sync\sym-corp\samples\create_sample.xml

以上命令代表运行bin路径下的 dbimport.bat并调用engine路径下的corp-000.properties配置文件,并执行F:\sync\sym-corp\samples路径下的create_sample.xml脚本,在执行之后会在sql
server的corp数据库中创建四张以下表:

item,item_selling_price,sale_return_line_item,sale_transaction

3.在corp数据库中创建SymmetricDS的系统表

因SymmetricDS的运行需要一些系统表来装载数据同步的相关信息,因此需要创建一些SymmetricDS需要的系统表。

在cmd窗口中继续输入以下命令,并按回车:


symadmin --engine corp-000 create-sym-tables

在执行以上命令之后会在sql server的corp数据库中创建多张以sym_ 开头的SymmetricDS的系统表。

4.最后,需要在业务表中插入一些数据以做同步测试用。

继续在cmd命令窗口中运行以下命令:


dbimport --engine corp-000 F:\sync\sym-corp\samples\insert_sample.sql

△ 配置store001的数据库信息

1.另外打开一个cmd窗口(上面那个cmd窗口先开着,后边会用到,就不需要重新打开了),定位到F:\sync\sym-store001\bin路径下。

2.在cmd窗口中运行以下命令以创建与corp一样的业务表


dbimport --engine store-001 --format XML F:\sync\sym-store001\samples\create_sample.xml

以上corp和store的相关表的配置已经完成,请确认corp和store的数据库的以下相关信息:

1.从corp数据库向store数据库同步的以下两张表是否在两个数据库中都存在:

item , item_selling_price

2.从store向corp数据库同步的以下两张表是否在两个数据库中都存在:

sale_transaction , sale_return_line_item

3.在corp数据库中,是否存在以sym_开头的系统表,比如sym_channel,sym_trigger, sym_router, 和
sym_trigger_router表。

4.确认corp数据库中的item表中有测试数据。


启动SymmetricDS并同步数据                
                     
                     
                     
                     
                     
       

1.上一步骤中,我们打开了两个cmd的窗口,分别将路径定位到F:\sync\sym-corp\bin和F:\sync\sym-store001\bin,如果关闭的话,请重新打开两个cmd命令窗口,并将路径定位到corp和store的bin文件夹路径下,以代表corp机器和store机器。

2.在corp的cmd窗口中,运行以下命令:


sym --engine corp-000 --port 8050

以上命令在第一次运行的时候,将会对相应的需要同步的表在数据库中建立触发器,可以查看数据库中的该表的触发器。如下图所示,建立了三个触发器来捕捉该表的数据的删除,插入和更新操作。

之后,SymmetricDS将会监听8050端口,来监听同步的请求和向corp发来注册请求的信息。

3.在store的cmd窗口中,运行以下命令:


sym --engine store-001 --port 8010

在store机器上第一次运行以上命令时,将会自动创建SymmetricDS的系统表,然后会根据F:\sync\sym-store001\engines下的store-001.properties中的registration.url来取得主机的注册地址(即corp的注册地址),并一直向该url发送注册请求。


注册节点                   
                     
                     
                     
                     
                     
                     
                     
                     
      

当一个没有注册的节点启动后,它将会尝试根据engines文件下的*.properties中的registration.url向该url发送注册信息,只有注册之后才能够同步数据。但是root节点(这儿是corp节点)的注册功能并没有打开,所以需要打开root节点的注册功能才可以接收注册请求。

1.在上一步骤中,我们打开了两个cmd窗口分别代表corp节点和store节点,上一步中,现在store节点每隔一定时间就尝试向corp节点发送注册信息,因为corp的注册功能并没有打开,所以store节点的注册请求一直失败,请看下图中的最后一行:RegistrationService
- Could not register.  Sleeping for 28000 ms before attempting again.

现在打开第三个cmd命令窗口,并定位到F:\sync\sym-corp\bin,然后运行以下命令:


symadmin --engine corp-000 open-registration store 001

以上命令是运行bin文件下的sysadmin命令,并调用engine文件下的corp-000配置文件,对group
node为store,编号为001的节点打开注册窗口。

然后查看store节点的cmd窗口的输出,发现注册成功。


初始化数据                    
                     
                     
                     
                     
                     
                     
            

1.打开一个cmd窗口,定位到corp的F:\sync\sym-corp\bin 路径下,运行以下命令:


symadmin --engine corp-000 reload-node 001

以上命令就是将数据从corp节点上初始化到
编号为001的节点上,初始化之后,可以在store节点上的数据库中的item和item_selling_price表中查找到数据。

2.在corp节点pull data到store节点

打开sql server的corp库,并运行以下sql:


1  insert into item (item_id, name) values (110000055, ‘Soft Drink‘);
2  insert into item_selling_price (item_id, store_id, price)
3  values (110000055, ‘001‘,0.65);
4  insert into item_selling_price (item_id, store_id, price)
5  values (110000055,‘002‘, 1.00);

运行完毕之后,可以查看mysql上的store库的item和item_selling_price表,数据已经同步过去了。

在以上sql的第4行和第5行,是一条insert语句,因为其插入的是002节点,而store是配置的001节点,所以这条数据并未插入到mysql的store数据库中,而corp节点并未找到002节点,因此该条数据被丢弃。

从corp节点往store节点是用pull的方式同步数据的,即corp节点有新的数据插入后,并不主动同步到store节点,而是等待store节点来取数据。

3.store节点push data到corp

在mysql的store库中,打开一个查询窗口,运行以下代码:


1 insert into sale_transaction (tran_id, store_id, workstation, day, seq) values
2 (1000, ‘001‘, ‘3‘, ‘2007-11-01‘, 100);
3 insert into sale_return_line_item (tran_id, item_id, price, quantity) values
4 (1000, 110000055, 0.65, 1);

数据将会同步到corp节点。当store数据库中的表插入新的数据时,数据将会主动push到corp节点。

先写到这儿吧,写了一下午,歇歇了,如果有人关注这个软件的话,有时间再继续写吧。如果有不对的地方,请指正O(∩_∩)O~

欢迎转载,转载请注明转载地址:http://www.cnblogs.com/bobozhu/

SymmetricDS 异构数据库同步软件部署案例,布布扣,bubuko.com

时间: 2024-10-22 05:49:40

SymmetricDS 异构数据库同步软件部署案例的相关文章

SyncNavigator数据库同步软件8.4.1 中文版

SyncNavigator是一款专门用于SqlServer.Mysql数据同步的软件,由国内顶级开发团队开发完成,经历8年逐步完善,目前具备强大的数据同步功能,国内很多大型连锁超市,企业,公司都在用SyncNavigator数据同步软件进行着数据同步服务. 它可以为我们提供智能化数据同步,对您重要的数据库进行实时同步操作,也可以设置定时任务传输,即使您的来源数据库和目标数据库版本不一样,表结构不一样,甚至是字段不一样,SyncNavigator也可以轻松帮您实现高效传输同步. 如果来源数据库和目

数据库同步软件免费下载

SyncNavigator数据库同步软件是一款 SQLSERVER,MYSQL 数据库同步软件.它为您提供一种简单智能的方式完成复杂的数据库数据同步,分发操作. SyncNavigator 可以帮助您快速的完成数据库的数据同步.不需要专业的数据库知识,只需要进行简单的设置即可实现数据库的同步,分发以及热备份.即使是大容量数据库也能快速完成同步.它对数据库的支持非常完整,您可以将 SQLServer/MYSQL 数据库同步到其他不同版本的数据库上而不需要考虑其数据库结构.它支持断点续传功能,即使出

SyncNavigator(数据库同步软件)v8.4.1官方版

SyncNavigator是一款 SQLSERVER,MYSQL 数据库同步软件.它为您提供一种简单智能的方式完成复杂的数据库数据同步,分发操作. SyncNavigator 可以帮助您快速的完成数据库的数据同步.不需要专业的数据库知识,只需要进行简单的设置即可实现数据库的同步,分发以及热备份.即使是大容量数据库也能快速完成同步.它对数据库的支持非常完整,您可以将 SQLServer/MYSQL 数据库同步到其他不同版本的数据库上而不需要考虑其数据库结构.它支持断点续传功能,即使出现网络中断或者

一种异构数据库同步的简单方法

标题有点高大上,是为了解决实际应用中的一个问题.做了一个Android应用,用于记录日常消费账单,开始是单机版的,我老婆说太low了,起码要能看到彼此的消费情况吧.为此,我还专门写了一套基于protobuf的RPC组件,用于网络通信,http://www.cnblogs.com/zmkeil/p/5176758.html. 应用本身比较简单,几张简单粗暴的UI,涵盖了增.删.改各种功能,外加一个后台service组件,用于上传账单,并同步他人账单.也算是麻雀虽小五脏俱全吧,看几张效果图.代码见h

MSSQL数据库同步软件(SyncNavigator) v8.4.1 免费版下载

HKROnline SyncNavigator 是一款数据库分发,同步,备份软件.它为您提供一种简单的方式完成复杂的数据库数据传输操作.并且免费. 1. 更好的Windows平台兼容性: 支持 Win XP / Win 2003 / Win Vista / Win Server 2008 / Win 7 及以上平台. 2. 完整支持 Microsoft SQL Server: 完整支持 Microsoft SQL Server 2000 2005 2008 数据库类型.并能在不同数据库版本之间相

数据库同步工具HKROnline SyncNavigator SQL Server互同步MySQL

需要联系我QQ:786211180 HKROnline SyncNavigator 是一款专业的 SQL Server, MySQL 数据库同步软件.它为您提供一种简单智能的方式完成复杂的数据库数据同步,分发操作. 支持 Windows XP / Windows 2003 以上所有操作系统 支持同构数据库同步,异构数据库同步,定时同步,增量同步,断点续传 完整支持 Microsoft SQL Server 2000, 2005, 2008 支持 Mysql 4.1 5.0 5.1 5.4 5.5

mysql数据库同步工具

? ?客服QQ1793040 ? 关于HKROnline SyncNavigator 注册机价格的问题 HKROnline SyncNavigator?8.4.1 企业版数据同步软件 自2009年第一个版本开发出来以来,经过8年不断地根据客户需求,加强功能,修复bug,现在已经具备强大的数据库同步功能,以前官方syncnavigator授权码的价格是2800元一套,授权码是绑定电脑硬件的,更换硬件或者电脑,软件无法正常运行,需要重新购买授权码. 今年官方团队有其他项目,没有重点开发市场,其中一个

关于SyncNavigator数据库实时同步软件新手使用教程【推荐阅读】

购买事宜请联系QQ:1793040 WWW.syncnavigator.cn HKROnline SyncNavigator企业版 8.4.1 使用教程 首先,SyncNavigator现在没有试用版了,试用版在2018年起就停止运营了,需要正式激活之后,软件才能新建项目,功能才算正常. SyncNavigator的基本功能:自动同步数据/定时同步数据无论是实时同步/24小时不间断同步 SyncNavigator是一款高效的数据库同步工具,支持sqlserver数据库和mysql数据库,采用增量

使用教程 - BestSync同步软件 - SQL2008R2 数据库定时备份解决方案

需求: 1.      某公司的管理软件,数据库为SQL2008R2.2.      将整个数据库作为一个文件,定时同步到FTP 服务器3.      需要有多个备份,每同步一次,都备份上次的文件到备份文件夹. 要点:1.      执行同步任务前需要关闭SQL Server服务.用户添加数据条目到数据库后,数据库文件的修改时间不会同步改变.2.      勾选“影子复制”功能.BestSync将能同步正在编辑的数据库文件.3.      只能设置定时同步. 数据库文件修改时间需要通过预先执行批