SqlServer数据实时同步到mysql

一、首先要装一个ODBC的驱动用来建立mysql的连接。http://www.mysql.com/products/connector/

注意:一定要用32位的可用cmd执行这个命令:

c:\windows\syswow64\odbcad32.exe

配置【用户DSN】和【系统DSN】

二、打开sqlserver建立链接服务器
右键新建链接服务器
1、点击【常规】

填上在ODBC建立的服务器名称,访问接口选择ODBC
2、点击【安全性】

选择最后一个,并填上mysql的账户密码
最后点确定就会看到链接服务器多了一个名为“mysqltest”的链接服务器

三、建立允许远程访问连接操作

USE [master]
GO
EXEC master .dbo. sp_serveroption @server =N'MYSQLTEST' , @optname= N'rpc out', @optvalue=N'TRUE'
GO
EXEC master .dbo. sp_serveroption @server =N'MYSQLTEST' , @optname= N'remote proc transaction promotion', @optvalue =N'false'
GO

四、建立LOOPBACK 服务器链接

EXEC sp_addlinkedserver @server = N'loopback' , @srvproduct = N' ' , @provider = N'SQLNCLI',
@datasrc = @@SERVERNAME
go

五、设置服务器链接选项,阻止SQL Server 由于远过程调用而将本地事务提升为分布事务(重点)

USE [master]
GO
EXEC master .dbo. sp_serveroption @server =N'loopback', @optname= N'rpc out', @optvalue=N'TRUE'
GO
EXEC master .dbo. sp_serveroption @server =N'loopback', @optname= N'remote proc transaction promotion' , @optvalue=N'false'
GO

到这就可以测试一下这个能不能链接上

select * from OPENQUERY(MYSQLTEST,'SELECT * FROM users ')

六、建立存储过程和触发器

1、insert

--存储过程
USE [master]
GOSET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[insert_user]
@id INT ,
@name varchar(50)
AS
BEGINSET NOCOUNT ONinsert OPENQUERY(MYSQLTEST,'SELECT * FROM user')(id,name) values(@id,@name);SET NOCOUNT OFF
END
--触发器
USE [master]
GOSET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[insert_trigger] ON [master].[dbo].[user]
FOR INSERT
AS
DECLARE @id INT,@name VARCHAR(50)SELECT @id =id, @name=name FROM INSERTED;BEGINEXEC loopback .master. dbo.insert_user @id, @name;END

2、update

--存储过程
CREATE PROCEDURE [dbo].[update_user]
@id INT ,
@name varchar(50)
AS
BEGINSET NOCOUNT ONUPDATE OPENQUERY (MYSQLTEST,'SELECT * FROM users ') set id =@id where name =@nameSET NOCOUNT OFF
END
--触发器
CREATE TRIGGER [dbo].[update_trigger] ON [master].[dbo].[user]
FOR UPDATE
AS
DECLARE @id INT,@name VARCHAR(50)SELECT @id =id, @name=name FROM INSERTED;
BEGINEXEC loopback .master. dbo.update_user @id, @name;
END

3、delete

--存储过程
CREATE PROCEDURE [dbo].[delete_user]
@id INT
AS
BEGINSET NOCOUNT ONDELETE OPENQUERY ((MYSQLTEST, ,'SELECT * FROM users ') where id =@idSET NOCOUNT OFF
END
--触发器
CREATE TRIGGER [dbo].[delete_trigger] ON [master].[dbo].[user]
FOR DELETE
AS DECLARE @ID INTSELECT @ID =ID FROM DELETED ;
BEGINEXEC loopback .master. dbo.delete_user @id;
END

给存储过程添加异常机制

如果遇到不正确的数据导致无法更新同步,则可以做一个异常机制记录。在sqlserver中建一张记录异常的表:LogTable
这里用insert做示范

CREATE PROCEDURE [dbo].[insert_user]
@id INT ,
@name varchar(50)
AS
BEGINSET NOCOUNT ONBEGIN  tryinsert OPENQUERY(MYSQLTEST,'SELECT * FROM user')(id,name) values(@id,@name);END tryBEGIN catch
INSERT INTO LogTable values(ERROR_NUMBER(),ERROR_SEVERITY(),ERROR_STATE(),ERROR_PROCEDURE(), ERROR_LINE() ,ERROR_MESSAGE());END catchSET NOCOUNT OFF
END

这样就可以把一些错误的数据记录在LogTable 表里

小结

//MSDTC不可用解决办法
报错MSDTC(分布式交易协调器),协调跨多个数据库、消息队列、文件系统等资源管理器的事务。该服务的进程名为Msdtc.exe,该进程调用系统Microsoft Personal Web Server和Microsoft SQL Server。该服务用于管理多个服务器 .
位置:控制面板--管理工具--服务--Distributed Transaction Coordinator
依存关系:Remote Procedure Call(RPC)和Security Accounts Manager
建议:一般家用计算机涉及不到,除非你启用Message Queuing服务,可以停止。
解决办法: 1. 在windows控制面版–>管理工具–>服务–>Distributed Transaction Coordinator–>属性–>启动
2.在CMD下运行"net start msdtc"开启服务后正常。
注:如果在第1步Distributed Transaction Coordinator 无法启动,则是因为丢失了日志文件,重新创建日志文件,再启动就行了。重新创建 MSDTC 日志,并重新启动服务的步骤如下:
(1) 单击"开始",单击"运行",输入 cmd 后按"确定"。
(2) 输入:msdtc -resetlog (注意运行此命令时,不要执行挂起的事务)
(3) 最后输入:net start msdtc 回车,搞定!

SqlServer数据实时同步到mysql相关推荐

  1. 使用Streamsets将Oracle数据实时同步到MySQL中

    相关环境: Oracle 11g:11.2.0.1.0  MySQL:8.0.22 前期准备: 1.打开Oracle的logminer a.在SQL Shell中,以具有DBA的用户身份登录数据库: ...

  2. 多台SQLServer数据实时同步工具

    下载网站:www.SyncNavigator.CN   客服QQ1793040 ----------------------------------------------------------   ...

  3. Oracle 数据怎么实时同步到 MySQL | 亲测干货分享建议收藏

      摘要: 这段时间负责一个老项目开发的数据库管理工作,这个项目中开发库与测试数据库分离,其中有些系统表数据与基础资料数据经常需要进行同步,相信很多 DBA 同学经常会遇到要从一个数据库实时同步到另一 ...

  4. binlog流程 mysql_小米 MySQL 数据实时同步到大数据数仓的架构与实践

    背景MySQL由于自身简单.高效.可靠的特点,成为小米内部使用最广泛的数据库,但是当数据量达到千万/亿级别的时候,MySQL的相关操作会变的非常迟缓:如果这时还有实时BI展示的需求,对于mysql来说 ...

  5. 小米 MySQL 数据实时同步到大数据数仓的架构与实践

    背景 MySQL由于自身简单.高效.可靠的特点,成为小米内部使用最广泛的数据库,但是当数据量达到千万/亿级别的时候,MySQL的相关操作会变的非常迟缓:如果这时还有实时BI展示的需求,对于mysql来 ...

  6. oracle和mysql数据实时同步_异构数据源的CDC实时同步系统——最终选型实战

    引言: <异构数据源的CDC实时同步系统> 系列第一篇 (已完成) <零编码打造异构数据实时同步系统--异构数据源CDC之2> 系列第二篇(已完成) <零编码打造异构数据 ...

  7. Docker安装部署MySQL+Canal+Kafka+Camus+HIVE数据实时同步

    因为公司业务需求要将mysql的数据实时同步到hive中,在网上找到一套可用的方案,即MySQL+Canal+Kafka+Camus+HIVE的数据流通方式,因为是首次搭建,所以暂时使用伪分布式的搭建 ...

  8. 小米技术分享:Mysql数据实时同步实践

    背景 MySQL由于自身简单.高效.可靠的特点,成为小米内部使用最广泛的数据库,但是当数据量达到千万/亿级别的时候,MySQL的相关操作会变的非常迟缓:如果这时还有实时BI展示的需求,对于mysql来 ...

  9. mysql 同步到es_mysql数据实时同步到Elasticsearch

    业务需要把mysql的数据实时同步到ES,实现低延迟的检索到ES中的数据或者进行其它数据分析处理.本文给出以同步mysql binlog的方式实时同步数据到ES的思路, 实践并验证该方式的可行性,以供 ...

最新文章

  1. 用NVIDIA Tensor Cores和TensorFlow 2加速医学图像分割
  2. 《用Python进行自然语言处理》第 9 章 建立基于特征的文法
  3. 抓老鼠啊~亏了还是赚了?
  4. 第五天学习Java的笔记(if,switch顺序结构)
  5. angular学习笔记之父子传值
  6. Linux时间子系统之二:表示时间的单位和结构【转】
  7. html5手机网站照片查看器,PhotoSwipe
  8. SPS用户管理的问题
  9. Eclipse调试进入JDK源码
  10. FreeRTOS源码分析与应用开发04:消息队列
  11. 动态加载JS过程中如何判断JS加载完成
  12. Java 阶乘(BigInteger)
  13. python 重命名文件出现乱码_python处理文件名乱码
  14. 基础篇——树莓派通用引脚定义
  15. python的power,Python numpy.power()函数使用说明
  16. Apache Flink®极简教程: 架构及原理 Stateful Computations over Data Streams
  17. 计算机自检后反复重启 主引导,电脑开机老是重复重启的解决方法
  18. 大型网站图片服务器架构的演进
  19. 关于zip压缩包日志查询、统计、导出
  20. Java健康档案管理系统

热门文章

  1. 计算机本地用户删除后怎么恢复,电脑本地连接不见了怎么恢复(win10怎样找回本地连接)...
  2. 怎么关闭win7计算机一键还原系统,如何进行win7系统一键还原
  3. 64岁的清华教授火了!他悄悄在街头画了几笔,却温暖了所有人……
  4. Vulnhub:Digitalworld.local (Mercy v2)靶机
  5. opencv-3.4.3 交叉编译并且移植到高通820开发板(包括Qt 5.11.2部分交叉编译及移植),NEON OpenCV编译
  6. COMSOL安装教程
  7. 1 WoWmapview:魔兽世界地形查看器,附带源码!(Author: ufoz)
  8. H5 --- 动画属性 / 3d属性
  9. JS 获取某个时间距离现在时间有多少时分秒
  10. 浪潮ERP GS 6.0安装教程