加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

实战:sqlserver 数据实时同步到mysql

发布时间:2020-12-12 12:54:20 所属栏目:MsSql教程 来源:网络整理
导读:1.安装安装mysqlconnector 2.配置mysqlconnector ODBC数据管理器-系统DSN-添加-mysql ODBC 5.3 ANSI driver-填入data source name如jt,mysql的ip、用户名、密码即可 3.新建链接服务器 exec sp_addlinkedserver ?@server='jt',?????? --ODBC里面data source n

1.安装安装mysqlconnector


2.配置mysqlconnector

ODBC数据管理器->系统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',??? --固定这个
?@datasrc=NULL,
?@location=NULL,
?@provstr='DRIVER={MySQL ODBC 5.3 ANSI Driver};SERVER=192.168.5.188;DATABASE=suzhou;UID=root;PORT=3306;',???
@catalog = NULL


exec sp_addlinkedsrvlogin
? @rmtsrvname='jt',
? @useself='false',
? @rmtuser='root',
? @rmtpassword='password';
?
?
? select * from openquery(jt,'SELECT * FROM sz ; ')
? GO
?
?

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


---4.sqlserver和mysql新建库和表

?

create database suzhou;

create table sz(
id int not null? identity(1,1) primary key,
orderno char(20) not null,
ordertime datetime not null default getdate(),
remark varchar(200)
)
go

create table sz(
id int(11) not null,
ordertime datetime(6) not null,
remark varchar(200),
primary key (id)
) engine=innodb? default charset=utf8;

?

---5.建立回环
?--建立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',@optvalue=N'TRUE'
GO
EXEC master.dbo.sp_serveroption @server=N'loopback',@optvalue=N'false'
GO


----6.编写触发器和存储过程

----6.1 insert

--重写触发器
use suzhou
go
alter trigger tr_insert_sz on suzhou.dbo.sz
for insert
as
declare? @id?? int,@orderno? char(20),@ordertime datetime,@remark? varchar(200)
select @id=id,@orderno=orderno,@ordertime=ordertime,@remark =remark from inserted;
begin
print @id
print @orderno
print @ordertime
print @remark
exec loopback.suzhou.dbo.sp_insert @id,@orderno,@ordertime,@remark
end
go

?

?

--存储过程
use suzhou
go
create PROCEDURE sp_insert(
@id?? int,
@orderno? char(20),
@ordertime datetime,
@remark? varchar(200)
)
AS
BEGIN
SET NOCOUNT ON;
Insert openquery(jt,'select * from sz')(id,orderno,ordertime,remark)values(@id,@remark)
END
go


----6.2 update

--重写触发器
use suzhou
go
create trigger tr_update_sz on suzhou.dbo.sz
for update
as
declare? @orderno? char(20),@remark? varchar(200)
select @orderno=orderno,@remark =remark from inserted;
begin
exec loopback.suzhou.dbo.sp_update @orderno,@remark
end
go

?

?

--存储过程
use suzhou
go
create PROCEDURE sp_update(
@orderno? char(20),
@remark? varchar(200)
)
AS
BEGIN
SET NOCOUNT ON;
update openquery(jt,'select * from sz') set remark=@remark where orderno=@orderno
END
go

?


---update数据测试

use suzhou
go
update sz set remark='ocpyang' where orderno='a001'
go


----6.3 delete

--重写触发器
use suzhou
go
create trigger tr_delete_sz on suzhou.dbo.sz
for delete
as
declare? @orderno? char(20)
select @orderno=orderno from deleted;
begin
exec loopback.suzhou.dbo.sp_delete @orderno
end
go

?

?

--存储过程
use suzhou
go
create PROCEDURE sp_delete(
@orderno? char(20)
)
AS
BEGIN
SET NOCOUNT ON;
delete openquery(jt,'select * from sz')? where orderno=@orderno
END
go

?


---delete数据测试

use suzhou go delete from sz where orderno='a001' go

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读