欢迎投稿

今日深度:

【实战】:sqlserver 数据实时同步到mysql,sqlserver

【实战】:sqlserver 数据实时同步到mysql,sqlservermysql


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

 


 


怎将SQL 2005中的数据实时同步到MYSQL中

mysql和sqlserver存在语法差异,直接导sql是不行的,不过可以通过sqlserver的bcp命令把 表里的数据导成指定格式的txt文件,比如列之间用逗号分割,行之间用\n\r分割
这样的数据,mysql 就可以通过 load data infile命令来导入到库里

因为sqlserver 不熟悉,所以bcp命令需要你自己研究下,
mysql的 load data语法你可以参考:
load data infile '/tmp/result.text' into table test_table fields terminated by ',' lines terminated by '\n' ;
意思是字段之间用逗号分割,行之间用\n分割,数据文件是result.text
 

数据库mysql里的数据 与sqlserver里的数据同步

我将两个思路提供给你:
1、首先,你要有一个业务层和一个数据访问接口层和数据层(后两层可以合并),业务层中有数据操作时同时操作其它两层的数据,只有同时成功了才提交事务。这样可以确保数据一致。
2、设计和实现一个数据同步工具,我实现了一个SQL Server和Oracle之间数据同步的工具,利用一个定义表(主键,字段,表名,同步标识等)和DataSet做中转,能够将两个数据库中需要同步的表同步成相同的内容,你可以根据要求指定同步周期。
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/4051.html NewsArticle 【实战】:sqlserver 数据实时同步到mysql,sqlservermysql 1.安装安装mysqlconnector 2.配置mysqlconnector ODBC数据管理器-系统DSN-添加-mysql ODBC 5.3 ANSI driver-填入data source name如jt,mysql的ip、用户名、密码...
评论暂时关闭