• 实战: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


     

  • 相关阅读:
    【郑轻邀请赛 G】密室逃脱
    【郑轻邀请赛 C】DOBRI
    【郑轻邀请赛 F】 Tmk吃汤饭
    【郑轻邀请赛 I】这里是天堂!
    【郑轻邀请赛 B】base64解密
    【郑轻邀请赛 A】tmk射气球
    【郑轻邀请赛 H】 维克兹的进制转换
    解决adb command not found以及sdk环境配置
    adb shell 命令详解,android, adb logcat
    Unexpected exception 'Cannot run program ... error=2, No such file or directory' ... adb'
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5334995.html
Copyright © 2020-2023  润新知