SqlServer实时数据同步到MySql

来源:互联网 发布:下载wps软件 编辑:程序博客网 时间:2024/05/17 03:41
---安装安装mysqlconnector
http://www.mysql.com/products/connector/
/*
配置mysqlconnector

ODBC数据管理器->系统DSN->添加->mysql ODBC 5.3 ANSI driver->填入data source name如jt,mysql的ip、用户名、密码即可

*/



--新建链接服务器exec sp_addlinkedserver@server='MySqll_Aggregation',--ODBC里面data source name@srvproduct='MySql',--自己随便@provider='MSDASQL',--固定这个@datasrc='MySqll_Aggregation', ----ODBC里面data source name@location=NULL,--@provstr='DRIVER={MySQL ODBC 5.3 ANSI Driver};SERVER=172.17.29.33;DATABASE=bi;UID=zhaowenzhong;PORT=3306;', --和@datasrc属性二选一@catalog=NULL



---创建连接mysql数据库的账号及密码exec sp_addlinkedsrvlogin@rmtsrvname='MySqll_Aggregation',----ODBC里面data source name@useself='false',@rmtuser='zhaowenzhong',---mysql账号@rmtpassword='mysqldba@2015';--mysql账号其密码


---测试是否可以访问mysql数据库中的表select * from openquery(MySqll_Aggregation,'SELECT * FROM tb; ')-----建立允许远程访问连接操作USE [master]GOEXE Cmaster.dbo.sp_serveroption @server=N'MySqll_Aggregation',@optname=N'rpc out',@optvalue=N'TRUE'GOEXEC master.dbo.sp_serveroption @server=N'MySqll_Aggregation',@optname=N'remote proc transaction promotion',@optvalue=N'false'GO  --建立LOOPBACK 服务器链接 (回路)EXEC sp_addlinkedserver@server=N'loopback',@srvproduct=N' ',@provider=N'SQLNCLI',@datasrc=@@SERVERNAMEgo--设置服务器链接选项,阻止SQL Server 由于远过程调用而将本地事务提升为分布事务(重点)USE [master]GOEXEC master.dbo.sp_serveroption@server=N'loopback',@optname=N'rpc out',@optvalue=N'TRUE'GOEXEC master.dbo.sp_serveroption@server=N'loopback',@optname=N'remote proc transaction promotion',@optvalue=N'false'GO---编写触发器和存储过程--insertCREATE TRIGGER TR_INSERT_TB ON  DB_TY2015.DBO.TBFOR INSERTASDECLARE@ID INT,                                @QTY INT                                SELECT@ID=ID,@QTY=QTY FROM INSERTED;                                BEGIN                                                EXEC loopback.db_ty2015.dbo.sp_insert@id,@qty;                                ENDCREATE PROCEDURE SP_INSERT@ID INT,@QTY INTASBEGIN                SET NOCOUNT ON                                INSERT OPENQUERY(db_ty2015,'select * from tb')(id,qty) values (@id,@qty);                SET NOCOUNT OFFEND---updateCREATE TRIGGERT R_UPDATE_TB ON DB_TY2015.DBO.TBFOR UPDATEASDECLARE @ID INT,@QTY INTSELECT@ID=ID,@QTY=QTY FROM INSERTED;BEGIN                EXEC loopback.db_ty2015.dbo.sp_update@id,@qty;ENDCREATE PROCEDURE SP_UPDATE@ID INT,@QTY INTASBEGIN                SET NOCOUNT ON                                UPDATE OPENQUERY(db_ty2015,'select * from tb') SET qty=@qty WHERE id=@id                SET NOCOUNT OFFEND--deleteCREATE TRIGGER TR_DELETE_TB ON DB_TY2015.DBO.TBFOR DELETEAS                DECLARE @ID INT                SELECT@ID=ID FROM DELETED;BEGIN                EXEC loopback.db_ty2015.dbo.sp_DELETE@id;ENDCREATE PROCEDURE SP_DELETE@ID INTASBEGIN                SET NOCOUNT ON                                DELETE OPENQUERY(db_ty2015,'select * from tb') WHERE id=@id                SET NOCOUNT OFFEND-------初始化数据     表已存在的情况insert  into  penquery(MySqll_Aggregation,'select * from bi.tb') select*from[FSLogin].[dbo].[tb]with(nolock)---从mysql同步表结构及数据到sqlserver上select * into  [SqlServerDBName].dbo.MYTest  from   openquery(localmysql,'select * from mysqldbname.weibosession')

来源:http://blog.csdn.net/zhaowenzhong/article/details/50599372