mysql数据同步到sqlserver《数据库连接》《存储过程》《定时任务》

mysql 数据同步到sqlserver

  • 一、数据库连接
    • 1)、数据库连接原理:
      • 原理:数据库-->ODBC数据源-->数据库
    • 2)、构造ODBC数据源
      • 安装MySQL Connector/ODBC插件
      • 配置数据源
    • 3 )、构造使用SQLServer OLE DB Provider for ODBC Drivers驱动连接数据源
      • 设置连接的服务器
      • 添加访问的用户
      • 查询语句
    • 4)、问题解决方案
      • 异常
      • Ad Hoc Distributed Queries问题
    • 5)、连接查看
  • 二、构建过程
  • 三、定时任务

一、数据库连接

1)、数据库连接原理:

原理:数据库–>ODBC数据源–>数据库

步骤:
1、MySQL 数据库使用mysql connector 插件把数据连接到ODBC数据源
2、sqlserver 使用 OLE DB Provider for ODBC Drivers 连接到数据源ODBC
3、sqlserver 使用openquery 读取数据

2)、构造ODBC数据源

安装MySQL Connector/ODBC插件

MySQL Connector/ODBC下载地址

配置数据源

win+R --> odbcad32 —> 系统DSN -->添加–>mysql odbc 5.3 ansi driver–> 配置数据源(如下图)
mysql数据同步到sqlserver《数据库连接》《存储过程》《定时任务》_第1张图片

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)
–>计划:按天/月起始进间
–>完成

你可能感兴趣的:(SQL)