zoukankan      html  css  js  c++  java
  • 实战:sqlserver 数据实时同步到mysql

    1.安装安装mysqlconnector


    2.配置mysqlconnector

    ODBC数据管理器->系统DSN->加入->mysql ODBC 5.3 ANSI driver->填入data source name如jt,mysql的ip、username、password就可以


    3.新建链接server


    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 server链接

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


    --设置server链接选项,阻止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


     

  • 相关阅读:
    input[type="checkbox"]与label对齐
    JS 中 JSON 对象与字符串之间的相互转换
    ashx 一般处理程序中使用 Session
    “性能监视器”监视系统性能的基本设置
    Android 之 获取地理位置及监听
    Android 之 Fagment 完全解析
    PLT redirection through shared object injection into a running process
    Linux动态链接之GOT与PLT
    站点参考设计
    bash shell for循环1到100
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5334995.html
Copyright © 2011-2022 走看看