系统升级需将业务承载在MS SQL Server数据库的同时,数据同步到MySQL数据库。 一段时间内,MS SQL Server和MySQL数据库会同时对外提供访问,且在一定时间范围内保持数据完整一致。即实现异构数据库双向同步,且同步具有一定的实时性。
数据库双向实时同步可行性方案:一是使用云平台的数据传输服务DTS;二是自己开发,可采用第三方开源代码。 经过调研,要实现异构数据库双向同步,目前只能自己开发,此过程中可尝试采用SymmetricDS开源工程。
目前支持数据实时双向同步的只有阿里云,腾讯云公测版本只有数据迁移和数据订阅,未发布数据同步功能。青云没有数据传输服务DTS产品。阿里云只支持MySQL的RDS实例,因此第一种方案没有直接可用的双向同步产品。但是MySQL可以搭建在阿里云,可使用其数据订阅服务,订阅数据库增量数据。
异构数据库双向同步调研,目前提到比较多的有两个开源工程。一是SymmetricDS, java编写的应用,软件可完成不同类型的数据库同步。二是阿里云otter,是数据传输服务DTS的开源代码,但是只支持MySQL、Oracle数据库实例。目前能够满足异构的,也只有SymmetricDS。
一、自行开发
自行开发数据传输服务,完成原MS SQL Server业务库与My SQL新数据库的实时同步,并支持双向数据库可写。
基本过程如下,需实现数据库增量数据订阅,并发送到目标数据库,目标数据库回放所有增量记录,以保证与源数据数据完整一致性。在此过程中,有以下方面需着重考虑。
1、如何实现数据库增量数据订阅
1)数据查询:设置查询语句或者服务定时查询增量数据
2)设置触发器,表数据发生变化时,记录增量数据
3)数据库日志逆向分析:My SQL数据库可使用binlog日志,记录数据库日志。通过日志逆向分析,获取所有数据库增量记录,并回放到目标数据库。
目前SymmetricDS支持1)、2)实现,而阿里云otter采用的是3)中的日志分析方式。阿里云数据传输服务DTS,提供My SQL RDS的增量数据订阅。
2、监测解决冲突,异常数据处理
由于数据库双向可写,需监控监测冲突,并做好对应的日志记录。当出现异常数据,例如要求插入的数据,数据库中已经存在;或者更新数据,发现数据记录并不存在,需根据预定义的规则进行相应的处理。
二、SymmetricDS
SymmetricDS是一个完成不同类型数据库之间同步的开源软件。SymmetricDS是一个java应用,一般支持JDBC驱动的数据库都可以使用。
SymmetricDS采用了自动建立触发器以及定时查询数据的方法,来获取增量数据。每一个数据库同步点都被设置为一个节点,节点间数据可通过HTTP或者HTTPS传输,节点可以被配置为主动推送到其他节点组,或者从节点组拉取数据。数据发送严格按照channel设置进行,一个channel由一组相互依赖的表组成。一个节点可以设置多个channel同步数据信息,这样可以做到channel间的数据不会相互耦合。一个channel失败停止,不会影响其他channel的正常同步。
SymmetricDS还有以下特点:
1、支持扩展,可以与数据库异地部署。
2、节点间数据可通过HTTP或者HTTPS传输,节点可以被配置为主动推送到其他节点组,或者从节点组拉取数据。同时也允许其他方式的接口。
3、channel可设置同步超时时间,或者发送后立即删除,以清理同步后的数据。 channel同步方法,可以让表同步间不会相互干扰。
4、数据完整性错误,可以设置冲突检测和处理。
5、支持双向同步。
6、change notification可配置,默认为一分钟。
7、管理功能是通过JMX来处理。
三、附件:
《资料查阅笔记》
1、阿里云
阿里云目前的数据传输服务DTS,只支持MySQL间的实时同步,无法满足业务需求。但是,MySQL搭建在阿里云,可以采用订阅的方式,获取MySQL的增量数据。增量数据则可以通过其他服务,同步到SQL Server。阿里云同时支持,SQL Server上云迁移。
1)操作只支持双向实例均为MySQL
2)数据库使用RDS实例
支持两种数据引擎:MySQL、SQLServer、PostgreSQL
需迁移数据库到云上
3)是否可以通过“数据订阅”实现增量数据的实时获取
此功能是指可以实时获取RDS实例的增量数据。目前,只支持RDS For MySQL实例。
数据传输只提供JAVA版SDK,一个订阅通道只可以被一个SDK消费。
订阅的本质是使用了MySQL的binlog日志。
数据订阅包年1800美元左右。
4)是否支持SQL Server数据迁移
支持
2、腾讯云:数据传输服务DTS
腾讯云的数据传输服务DTS目前处于公测阶段,可免费使用。但是不支持实时同步功能,且数据迁移、数据订阅只支持MySQL。
与阿里云相比,功能少,且无法迁移SQL Server上云,因此还是选择阿里云。
1)与阿里云一样,实时同步功能只支持MySQL实例。但是没有发现实时同步的任何资料,还没有上线。
2)灾备实例同步,主实例只支持MySQL。
数据迁移目前支持的数据库无SQL Server、可支持 MySQL 、 Redis、MongoDB、PostgreSQL 和 MariaDB。
SDK支持JAVA版本
《参考文章网址》
序号 |
标题 |
网址 |
备注 |
1 |
使用SyncNavigator轻松实现数据库异地同步、断点续传、异构同步 |
https://yq.aliyun.com/sqlarticle/52767 |
|
2 |
mysql实时同步到mssql的解决方案 |
http://www.cnblogs.com/liweis/p/4749961.html |
|
3 |
不同数据库之间的实时同步 |
https://wenku.baidu.com/view/9fe06e8baef8941ea66e055d.html |
|
4 |
饿了么异地双活数据库实战 |
https://yq.aliyun.com/articles/313844?utm_content=m_38049 |
|
5 |
数据库相关中间件介绍 |
http://www.cnblogs.com/grefr/p/6087942.html |
|
6 |
阿里云:云上灾备和多活架构 |
https://m.aliyun.com/doc/document_detail/71881.html |
|
7 |
创建 RDS for MySQL 实例间数据实时同步作业
|
https://help.aliyun.com/document_detail/26633.html?spm=a2c4g.11186623.3.3.I917ju
|
|
8 |
阿里云数据库 |
https://www.alibabacloud.com/zh?spm=a2c5t.11065259.1097650.1.2ec1664cPRLmn0
|
|
9 |
数据传输DTS |
https://www.alibabacloud.com/zh/product/data-transmission-service?spm=a2796.7919406.1023987.dzproductd5.51d06ecfXZv7Vh#overview
|
|
10 |
DTS文档 |
https://www.alibabacloud.com/help/zh/product/26590.htm?spm=a2796.126074.638660.9.73683c1fJFkoi7
|
|
11 |
MySQL的binlog日志
|
https://www.cnblogs.com/martinzhang/p/3454358.html
|
|
12 |
腾讯云-数据传输服务DTS |
https://cloud.tencent.com/document/product/571/13708
|
|
13 |
多源异构数据转换技术 |
http://topwalk.com/index.php?id=169 |
|
14 |
《SymmetricDS 数据库双向同步开源软件入门》 |
http://www.cnblogs.com/jyh317/p/4259635.html |
|
15 |
SymmetricDS官网 |
https://www.symmetricds.org/
|
|
16 |
阿里巴巴开源otter |
https://github.com/alibaba/otter |
|
17 |
SymmetricDS 异构数据库同步软件部署案例
|
http://www.cnblogs.com/bobozhu/p/3694599.html
|
|