您的位置:首页 > 数据库 > MySQL

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

2014-10-21 09:53 776 查看
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 ,

orderno char(20) 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', @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

----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,@orderno,@ordertime,@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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: