Code Bye

如何解决SQLServer和MySQL的数据同步问题

 

项目中用到两个DB,通过SQLServer的DBLink将MySQL连接起来查询

现想做到DB数据同步,就是当MySQL的数据变化时,同样将SQLServer的数据进行变动

目前有一想法,就是通过openquery创建一个view放在SQLServer这一边,然后在给这个view创建一个trigger来监视这个view的数据的改变,从而改变SQLServer的数据, 思路可行吗?

#1

20分

可以考虑用MSSQL的复制工具,设为提取方式 同步,即自动从MYSQL端提数据过来同步..
#3
复制工具是SQL Server自带的工具,非第三方.参考 http://www.databasejournal.com/features/mssql/article.php/1438201/Setting-Up-Transactional-Replication-A-Step-by-step-Guide.htm
#4
刚刚尝试linkdb的table创建了一个view,然后又创建了一个view的trigger有以下两个结论

1.更新linkdb上面的table时,不会触发trigger

2.直接修改view,可以触发trigger,但是不会把数据同步到view对应的table里

#5

回复3楼:

你好,刚刚看了一下,这样的工具是不是对db结构有要求啊,比如publisher和subscriber两边的数据库表结构要一样之类的。

好像并不适合,我们这边可能需要一些逻辑来控制数据,然后插入

#6

回复3楼:

另外,现在这个具体情况,MySQL数据库是由一个系统(A)来控制的,SQLServer是另外一个系统(B),

想达到一个这样的目的,系统A的操作,使MySQL数据变化后,通过某种方式,直接影响到SQLServer这边,而且最好是即时的

#7
或者用触发器+dblink解决.1.在MYSQL端建dblink连接到SQL Server.

2.在MYSQL端的数据表上建触发器,当有更新时,自动同步更新SQL Server端的表.

#8

回复7楼:

1.在MYSQL端建dblink连接到SQL Server.

这一点我也想到过,不过mysql有类似于SQLServer的db link吗?请赐教

#9

回复8楼:

没baidu到这样的方法,我想应该可行的.

如果需同步的表数据量不大,可以在SQL Server端建link server连接MYSQL,然后每次同步都全表拿过来,然后比对更新目标表.

#10

回复9楼:

这样做的话输入主动去同步,还是要去触发的。

最好能够做到被动,也就是MySQL发送消息同步SQLServer

我也baidu了依稀,MySQL倒是有一个federated的存储引擎,不过貌似只支持MySQL对MySQL的,哎。

#11
不懂MYSQL,建议LZ转MYSQL版提问比较好喔.
#12

回复11楼:

好的,谢谢你的帮助了~

另外再问你一个问题吧

根据A表创建了一个B视图,根据B视图又创建了一个C触发器,如果A表发生变动,C触发器会触发吗?

查了一些资料,说触发器的触发是由事件所引起的,如果我对A表更新,那么事件本身是发生在A表上的,理论上C触发器不会被触发,是这样的吧?

#14
是不是可以考虑在客户端处理这样的业务
#15

回复14楼:

这样的话就要改代码了。而且涉及到的表的所有功能点都要改

#17
自己写个程序,监控日志的变化,然后把日志中记录的SQL语句转换成T-SQL在SQL SERVER中同时执行一次。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明如何解决SQLServer和MySQL的数据同步问题