mysql实时同步到mssql的解决方案

数据库在应用程序中是必不可少的部分,mysql是开源的,所以很多人它,mssql是微软的,用在windows平台上是非常方便的,所以也有很多人用它。现在问题来了,如何将这两个数据库同步,即数据内容保持完全一致。

MySQL Migration Toolkit是MySQL提供的开源GUI软件工具,可以针对Microsoft Access、Microsoft SQL Server、Oracle、MySQL、Sybase Server、MaxDB Database Server数据库向MySQL数据库迁移数据,这就解决了mssql同步到mysql的问题了;SQL Server迁移助手(SSMA)团队开发了针对MySQL的迁移助手Microsoft SQL Server Migration Assistant 2008 for MySQL。微软同时发布了其他三个迁移助手: SSMA for Access, SSMA for Oracle, and SSMA for Sybase (all v4.2),所以它可以解决mysql到mssql的问题,方法详见:MySQL到MsSQL的迁移工具——SSMA,实现了,结束。

……

开个玩笑,上面说的工具非常好用,可以留着备用。现在才是真正的问题:如何将这两个数据库实时同步(mysql到mssql),即数据内容实时保持完全一致。说白了,就是mysql插入(或修改、删除)一条记录,mssql也跟着同时插入(或修改、删除)该条记录,实时同步,不得有误。

问题

所谓mysql到mssql的实时同步数据。其要求是:

(1)当mysql数据库中插入一条记录,mssql数据库也同时插入对应记录;

(2)当mysql数据库中更新某些记录,mssql数据库也同时更新对应记录;

(3)当mysql数据库中删除某条记录,mssql数据库也同时删除对应记录;

这些记录变更的时间和方式都是随机的,不确定的,所以需要随时监测它的变化。同时,如下约定:

A.    在数据库同步之前,mysql和mssql数据库结构和内容完全一致;

B.    只对数据进行插入、更新和删除操作,不更改主键和结构。

分析

要实现数据库实时同步,解决方案一般有三种:一是编写程序来操作两个数据库,先将目标数据库删除,再根据原数据库进行重新生成目标数据库,但这种方法对于数据量大的数据库操作显然不可行;二是使用SQL中的触发器、存储过程和定时作业来完成实时同步;三是借助第三方的软件,如SyncNavigator,但综合经济性、稳定性和易维护性等因素,此方案慎用。

实现

(1)新建mysql临时和mssql临时数据库,数据结构与对应正式数据库相当,仅在每一个表中增加新字段OpType(用于记录数据修改的操作方式);

(2)在mysql数据库中建立触发器,作用是当mysql数据库中更改,mysql临时数据库相应表生成相应记录,并记录OpType字段(I表示插入记录,U表示修改记录,D表示删除记录);

(3)新建mysql临时数据库与mssql临时数据库之间的连接;

(4)在mssql临时数据库新建存储过程,当执行存储过程时,更新mssql临时数据库的内容,使之与mysql临时数据库内容完全一致,同时删除mysql临时数据库的内容;

(5)新建定时作业,定时调用mssql临时数据库中的存储过程;

(6)在mssql临时数据库建立触发器,根据OpType字段类型,更新mssql数据库的内容,同时删除mssql临时数据库的内容。

至此,实现了mysql数据库到mssql数据库的实时同步,其中,mysql临时数据库和mssql临时数据库只是过程数据,在同步完成后,数据表中的记录将被删除。这里所谓的实时,还取决于mssql中定时作业的计划。

Mssql连接mysql的方法

EXEC sp_addlinkedserver
@server = 'MySQL',
@srvproduct='MySql' ,
@provider = 'MSDASQL',
@provstr = 'Driver={MySQL ODBC 5.2 UNICODE Driver};
Server=localhost;
Database=mysql_temp;
User=root;
Password=****;
Option=3;'

  增加权限:

EXEC sp_addlinkedsrvlogin
@rmtsrvname='MySql' ,
@useself='false' ,
@locallogin='sa' ,
@rmtuser='root' ,
@rmtpassword='****'

  优化

由于实际数据库可能在极短时间内对一条记录进行多次频繁更新,为防止同步错误,可以两张临时表中再建立状态字段(IsUpdate)。具体操作方法:

(1)当mysql修改记录时,触发的mysql_temp表中的IsUpdate字段值标记为0;

(2)当存储过程调用时,将mysql_temp表中更新到mssql_temp的同时,将mysql_temp表中的IsUpdate字段值标记为1,并删除值为1的记录;(先更新值,再复制,最后删除,下同。)

(3)mssql_temp触发器运行时,除了将mssql_temp的记录更新到mssql外,还将删除mssql_temp表中IsUpdate字段值标记为2,并删除值为2的记录。

这样,可达到两个效果:一是更新永远是实时同步,不会有误;二是可减少存储过程的调用频率,可节省资源。

 

参考:

http://blog.csdn.net/orichisonic/article/details/46557965

http://blog.csdn.net/orichisonic/article/details/46557835

时间: 2024-08-03 13:35:33

mysql实时同步到mssql的解决方案的相关文章

sqlserver数据实时同步到mysql

1.安装安装mysqlconnector2.配置mysqlconnectorODBC数据管理器->系统DSN->添加->mysql ODBC 5.3 ANSI driver->填入data source name如jt,mysql的ip.用户名.密码即可3.新建链接服务器exec sp_addlinkedserver@server='jt', --ODBC里面data source name@srvproduct='mysql', --自己随便@provider='MSDASQL'

MySQL准实时同步到PostgreSQL, Greenplum的方案之一 - rds_dbsync

标签 PostgreSQL , Greenplum , rds_dbsync , binlog 背景 rds_dbsync是阿里云数据库内核组开源的一个数据实时同步工具. 可以解析MySQL的binlog,或者PostgreSQL的WAL日志,实现增量的实时同步.同时支持全量不落地迁移功能. rds_dbsync功能介绍 1.全量不落地迁移(从mysql到pgsql,从pgsql到pgsql,从mysql或pgsql到Greenplum). 支持并行. 2.DDL转换 3.增量实时同步(从mys

如何对MySQL数据库中的数据进行实时同步

数据传输(Data Transmission) 支持以数据库为核心的结构化存储产品之间的数据传输. 它是一种集数据迁移.数据订阅及数据实时同步于一体的数据传输服务.数据传输致力于在公有云.混合云场景下,解决远距离.毫秒级异步数据传输难题. 通过阿里云数据传输,并使用 dts-ads-writer 插件, 可以将您在阿里云的云数据库RDS for MySQL中数据表的变更实时同步到分析型数据库中对应的实时写入表中(RDS端目前暂时仅支持MySQL引擎). 前提条件 您需要在您RDS for MyS

Elastic Search 与 mysql数据库实时同步的问题

问题描述 Elastic Search 与 mysql数据库实时同步的问题 我知道有一个工具叫ElasticSearch-jdbc,也看了官方文档,根据官方文档写了个测试(命令见最下),但是不能实时同步,它会隔差不多1分钟左右再更新.不知道是什么地方出问题了.还请路过大神不吝赐教!命令: {type"" : ""jdbc""jdbc"" : {url"" : ""jdbc:mysql:/

MYSQL实时触发SQL SERVER实现同步实例

我们对MYSQL数据表更新实时触发sql server里面对应表的增删改操作,首先,增加原来的mysql的表的触发器,包括以下三个:     插入数据:            delimiter ||      DROP TRIGGER IF EXISTS t_afterinsert_on_accounts ||      CREATE TRIGGER t_afterinsert_on_accounts      AFTER INSERT ON sugarcrm642ce.accounts   

多屏时代的App实时同步,BackWire为开发者提供后台跨屏数据同步的BaaS解决方案

移动互联网时代,要想给用户提供一个完整.无缝的产品体验,开发者必须为自己的产品开发支持多个终端的应用.同时在多终端环境下,还要解决各终端间数据实时同步的问题.而昨天在InnoSpace 的首届DemoDay 上,就出现了一家为开发者提供App 多终端数据实时同步服务的创业公司:Backwire. 宏观上来说,Backwire 是一家BaaS(Backend as a Service,后端即服务)创业公司.而公司要解决的首要问题,是开发者的跨平台跨设备App如何通过后台服务(Backend Ser

【技术实验】mysql准实时同步数据到Elasticsearch

实验背景 Elasticsearch在阿里云商业化已经有一段时间,它作为大数据场景下搜索和分析的引擎,可以用于很多场景.前两天有同学提到需要将MySQL中的数据准实时的同步到ElasticSearch中的需求,由于自己对ES也很感兴趣但一直没有机会实操,恰好趁这个机会学习验证了一下,并把过程记录下来,方便新人尽快上手少走弯路. 本次实操采用Logstash实现将MySQL数据实时同步到ElasticSearch,过程中主要以实操步骤为主,并没有详细介绍这两个产品本身,所以文档适合对Logstas

企业Linux服务器数据实时同步备份的解决方案

数据是最宝贵的财产!公司的服务器都是需要对数据有着完整的备份策略,利用脚本.计划任务.开源软件等等,无论那种途径,能够对数据的实时同步,才是最理想的效果!下面详细介绍利用rsync配合inotify实现数据实时的触发同步. rsync:可以镜像保存整个目录树和文件系统.可以很容易做到保持原来文件的权限.时间.软硬链接等等.第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件. 方案:起初用rsync进行数据备份是利用计划任务,定时执行一下命令实现rsync的同步,但最近开发这边

阿里云-两台机器的mysql数据同步

问题描述 两台机器的mysql数据同步 阿里云的云服务有提供数据同步吗?例如是把云服务器的数据库数据实时同步到本地数据库,不使用程序或软件.就是实现两个Mysql数据库之间的主从同步,主数据库是阿里云的mysql数据库. 解决方案 可以做个订阅与发布,实现主从同步.