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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 数据库在应用程序中是必不可少的部分,mysql是开源的,所以很多人它,mssql是微软的,用在windows平台上是非常方便的,所以也有很多人用它。现在问题来了,如何将这两个数据库同步,即数据内容保持完全一致。

数据库在应用程序中是必不可少的部分,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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
关系型数据库 MySQL Java
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
444 0
|
关系型数据库 MySQL 数据库连接
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
2829 82
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
关系型数据库 MySQL 索引
MySQL in 太多的解决方案
MySQL in 太多的解决方案
1641 0
|
监控 Java 关系型数据库
Spring Boot整合MySQL主从集群同步延迟解决方案
本文针对电商系统在Spring Boot+MyBatis架构下的典型问题(如大促时订单状态延迟、库存超卖误判及用户信息更新延迟)提出解决方案。核心内容包括动态数据源路由(强制读主库)、大事务拆分优化以及延迟感知补偿机制,配合MySQL参数调优和监控集成,有效将主从延迟控制在1秒内。实际测试表明,在10万QPS场景下,订单查询延迟显著降低,超卖误判率下降98%。
548 5
|
监控 关系型数据库 MySQL
MySQL自增ID耗尽应对策略:技术解决方案全解析
在数据库管理中,MySQL的自增ID(AUTO_INCREMENT)属性为表中的每一行提供了一个唯一的标识符。然而,当自增ID达到其最大值时,如何处理这一情况成为了数据库管理员和开发者必须面对的问题。本文将探讨MySQL自增ID耗尽的原因、影响以及有效的应对策略。
773 3
|
SQL DataWorks 关系型数据库
阿里云 DataWorks 正式支持 SelectDB & Apache Doris 数据源,实现 MySQL 整库实时同步
阿里云数据库 SelectDB 版是阿里云与飞轮科技联合基于 Apache Doris 内核打造的现代化数据仓库,支持大规模实时数据上的极速查询分析。通过实时、统一、弹性、开放的核心能力,能够为企业提供高性价比、简单易用、安全稳定、低成本的实时大数据分析支持。SelectDB 具备世界领先的实时分析能力,能够实现秒级的数据实时导入与同步,在宽表、复杂多表关联、高并发点查等不同场景下,提供超越一众国际知名的同类产品的优秀性能,多次登顶 ClickBench 全球数据库分析性能排行榜。
842 6
|
存储 监控 关系型数据库
MySQL自增ID耗尽解决方案:应对策略与实践技巧
在MySQL数据库中,自增ID(AUTO_INCREMENT)是一种特殊的属性,用于自动为新插入的行生成唯一的标识符。然而,当自增ID达到其最大值时,会发生什么?又该如何解决?本文将探讨MySQL自增ID耗尽的问题,并提供一些实用的解决方案。
674 1
|
关系型数据库 MySQL 数据库
一个 MySQL 数据库死锁的案例和解决方案
本文介绍了一个 MySQL 数据库死锁的案例和解决方案。
985 3
|
消息中间件 监控 关系型数据库
MySQL数据实时同步到Elasticsearch:技术深度解析与实践分享
在当今的数据驱动时代,实时数据同步成为许多应用系统的核心需求之一。MySQL作为关系型数据库的代表,以其强大的事务处理能力和数据完整性保障,广泛应用于各种业务场景中。然而,随着数据量的增长和查询复杂度的提升,单一依赖MySQL进行高效的数据检索和分析变得日益困难。这时,Elasticsearch(简称ES)以其卓越的搜索性能、灵活的数据模式以及强大的可扩展性,成为处理复杂查询需求的理想选择。本文将深入探讨MySQL数据实时同步到Elasticsearch的技术实现与最佳实践。
798 1

推荐镜像

更多