mysql 数据同步到sqlserver
一、数据库连接
1)、数据库连接原理:
原理:数据库–>ODBC数据源–>数据库
步骤:
1、MySQL 数据库使用mysql connector 插件把数据连接到ODBC数据源
2、sqlserver 使用 OLE DB Provider for ODBC Drivers 连接到数据源ODBC
3、sqlserver 使用openquery 读取数据
2)、构造ODBC数据源
安装MySQL Connector/ODBC插件
配置数据源
win+R --> odbcad32 —> 系统DSN -->添加–>mysql odbc 5.3 ansi driver–> 配置数据源(如下图)
3 )、构造使用SQLServer OLE DB Provider for ODBC Drivers驱动连接数据源
设置连接的服务器
EXEC master.dbo.sp_addlinkedserver
@server = N'mysql', --自定义连接名称
@srvproduct=N'aa', --项目名
@provider=N'MSDASQL', --连接ODBC数据驱动(MSDASQL=OLE DB Provider for ODBC Drivers)
@datasrc=N'mysql3309' --ODBC数据源名称
GO
添加访问的用户
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname=N'mysql', --增加名称到对应的连接
@useself=N'False', --使用当前用户
@locallogin=NULL, --本地登录
@rmtuser=N'root', --用户名
@rmtpassword='12345' --密码
GO
查询语句
select * from openquery(mysql,'select * from ekp.ekp_wlzsjsq_main')
go
select * from openquery(mysql,'show databases')
go
4)、问题解决方案
异常
构建时出现异常
关键有没有先定位到 master 然后再执行构造连接
use master
Ad Hoc Distributed Queries问题
启用
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
关闭
exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure
5)、连接查看
select * from sys.servers; ---查看当前连接
exec sp_helpserver; --显示可用的服务器
exec sp_droplinkedsrvlogin hostnamexxx,null ---先删除已构建连接的用户
exec sp_dropserver hostnamexxx ---再删除连接
--例:
EXEC sp_droplinkedsrvlogin 'mysql',null;
exec sp_dropserver 'mysql';
二、构建过程
ALTER PROCEDURE [dbo].[getdata_plc_stopdata]
@getdate AS date
AS
BEGIN
declare @datestr as varchar(10)
declare @maxdate as date
declare @sqlstr as varchar(1000)
set @maxdate=(select max(create_date) from PLC_stopdata)
IF @getdate>'1990-1-1' BEGIN
set @datestr=convert(varchar(10),@getdate,23)
END
ELSE BEGIN
set @datestr=convert(varchar(10),DATEADD(day, 1, @maxdate),23)
END
set @sqlstr='select create_date, end_date, jitai , stoptime, stop_reason
from PLC_DB.dbo.T_Stoptext
where end_date = '''+@datestr+''''
set @sqlstr='insert into PLC_stopdata(create_date,end_date,jitai,stoptime,stop_reason) select * from OPENQUERY(plcdb,'''+REPLACE(@sqlstr, '''', '''''')+''')';
EXEC(@sqlstr)
END
三、定时任务
打开sqlserver 管理工具:sql server management studio
–>sqlserver 数据库–>sql server 代理–>作业–>(右击)新建作业
–>常规:名称,说明
–>步骤:新建:名称,数据库选择,执行(exec getdata_plc_stopdata)
–>计划:按天/月起始进间
–>完成