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插件

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

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Windows.Forms; using System.Data.SqlClient; using System.Text; using MySql.Data; using MySql.Data.MySqlClient; //本程序的功能是实时从mysql中读取一条记录中的一个字段,插入到sqlserver 中,经过长时间的运行,基本无错了, 而这数据同步,目前没有实时性强的软件,至少1分钟,太久了,自己写了一个, //可以自己设置同步时间,字符连接串等,给了源码,而且对程序进行了很多优化 容错性很强,懂点程序的 就可以直接修改源码 就可以用了。由于没有时间按做界面,只能自己修改了,不过已经很稳定了,为了给大家提供点方便,免得还去查大量的资料。 namespace tool { public partial class Form1 : Form { public string mysql_Conn = "Database='cmccbbs';Data Source='211.139.22.124';UserId='cmcc';Password='CMCC2014cmcc2014';charset='utf8';pooling=true"; public string mysql_sql = "select max(id) from pre_sms_tempsend"; // public string sql_server_Conn = "Data Source=lei; DataBase=test; User=sa;PWD=123456"; 211.222.229.124 public string id, phone, verify, last_id; SqlConnection my_sql_con; MySqlConnection con; MySqlCommand cmd; DataSet ds; public string sql_server_Conn = "Data Source=222.85.144.112,14444; DataBase=DB_CustomSMS; User=sms;PWD=sms2014"; // public string sql_sql = "select max(id) from pre_sms_tempsend"; MySqlDataAdapter md; public int ii = 0; public Form1() { InitializeComponent(); timer1.Interval = 1000; //连接mysql con = new MySql.Data.MySqlClient.MySqlConnection(mysql_Conn); con.Open(); cmd = new MySqlCommand("select * from pre_sms_tempsend order by id desc limit 1", con); cmd.Connection = con; md = new MySqlDataAdapter(); ds = new DataSet(); //这样做避免一直new,导致内存泄露 } private void button1_Click(object sender, EventArgs e) { if (button1.Text == "start") { timer1.Enabled = true; button1.Text = "stop"; }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值