SQLServer 远程链接MySql数据库详解

by:授客 QQ:1033553122

测试环境:

Microsoft Windows XP Professional 版本2000 Service Pack 3

SQL_2005_x86简体中文企业版

MySql数据库远程服务器

第一步:安装MySQL odbc driver

在SQL SERVER所在主机上安装MYSQL ODBC Driver;

第二步:配置ODBC数据源

安装好后,在管理工具-ODBC数据源-系统DSN-添加-选择安装的MYSQL ODBC Driver,比如 MYSQL ODBC 3.51 DRIVER-完成

点击完后跳出如下界面,填写MYSQL连接参数

说明:

  Data
Source Name:数据源名称,自定义

  Decription:描述,自定义

  Server:MYSQL服务器的IP

User:连接账号(在MYSQL上授权的账号,同时给予相应权限)

Password:密码

Database:选择链接的数据库

Port:MYSQL的端口,默认的是3306.可以根据实际的MYSQL服务器端口,在如下界面中更改

填好之后,点下test.成功了则会如图跳出提示框.

填好后,点击OK,查看如下。

点击配置的系统DNS(test为例),点击配置

注意:必须根据实际要远程连接的MYSQL数据库服务器的ip,端口,授权用户名,密码,要访问的数据库来填写。


第三步:连接
SQL
Server
数据库

开始-所有程序-Microfsoft
SQL Server 2005-SQL Server Management Studio

登陆方式1-图1

登陆方式2-图2

注:登陆方式有两种

服务器名:计算机名\实例名,如下图,这里实例名是安装时,,选择“命名实例”输入的名称

如果选择“登录方式2-图2”中的登录方式,Server身份验证方式登录,如以sa用户登录,则需要输入对应的密码,该密码默认也是在如下图示安装的时候输入的密码。

据说,EXPRESS版第一次登陆默认只能为Windows身份验证登陆,我没注意这个问题,如果真遇到这个问题,参考文档“SQLServer 2005Windows验证如何改为混合模式验证”。


第四步:创建链接服务器

这里我们以sa用户,登陆本地SQL
Server服务器,找到链接服务器,创建链接服务器

点击绿色的那个实例->服务器对象->链接服务器->右键->新建链接服务器->弹出界面

注意

1访问接口:Microsoft
OLE DB Provider for ODBC Drivers”;

2数据源,就是我们之前配置的odbc数据源test
,必须存在;

其它可不填,点击“确定”


 


第五步:测试

语法:OPENQUERY(链接服务器名,

'查询语句')

如:

SELECT
* FROM OPENQUERY (test,

'select * from tobj_operate')

执行能成功则可以。

UPDATE OPENQUERY
(test,
'SELECT id FROM tobj_operate WHERE id =
101')

SET name =
'hello';

INSERT OPENQUERY
(test,
'SELECT id FROM
tobj_operate')

VALUES
('hello');

DELETE OPENQUERY
(test,
'SELECT id FROM tobj_operate WHERE name
= ''hello''');

1,防止执行上述查询时出错,要进行如下设置

如图,点击"SQL
Server外围应用配置器"->”功能的外围应用配置”->Database
Engine->即席远程查询->勾取“启用OPENROWSET和OPENDATASOURCE

支持”

2,可能还会遇到Ad
Hoc Distributed Queries组件被禁用的问题

参见 排错-Ad Hoc Distributed Queries组件被禁用的解决办法

SELECT
* FROM
链接服务器名.远程数据库名.dbo.远程数据库中的表;

SELECT
* FROM test.mydatabase.dbo.tobj_operate;

注:这里用的是可视化的方式来创建远程连接。如果用命令方式呢?

答案如下:

1.新建查询

2.语句代码:

--创建链接服务器

exec sp_addlinkedserver 'test', '', 'MSDASQL
','10.4.120.11';

exec sp_addlinkedsrvlogin 'test', 'false', null, 'rock',
'123456';

或者

exec sp_addlinkedserver

@server = 'test',--被访问的服务器别名

@srvproduct='',

@provider='SQLOLEDB ',

@datasrc=''10.4.120.11'  
--要访问的MySQL服务器(名称或IP)

EXEC sp_addlinkedsrvlogin

'test',
--被访问的服务器别名

'false',
--使用后面的授权用户rock,密码进行登录

NULL, --指定此条目将应用于所有连接到mylink的本地登录

'rock',
 --帐号

'123456' --密码

注意:这里的rock为授权用户。

授权方法:

先要在远程MYSQL服务器中进行授权,让主机能访问MYSQL数据库,如下:

在mysql数据库执行语句如下:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.4.120.11' IDENTIFIED BY
'123456' WITH GRANT OPTION;

注:执行上述字符界面的查询,遇到如下问题:

链接服务器"test"的

OLE DB
访问接口
"SQLNCLI"
返回了消息
"登录超时已过期"。

链接服务器"mylink"的

OLE DB
访问接口
"SQLNCLI"
返回了消息
"建立到服务器的连接时发生错误。连接到

SQL Server 2005
时,默认设置
SQL Server
不允许远程连接这个事实可能会导致失败。"。

消息
53,级别

16,状态

1,第

0

命名管道提供程序:

无法打开与
SQL Server
的连接
[53].

解决方案:

1.cmd命令行,键入

netstat –an –p tcp
没找到0.0.0.0:1433的信息,

2.键入telnet
localhost 1433
测试,连接失败

参数说明:

-an
显示所有连接的端口并用数字表示

-p proto
显示
proto
指定的协议的连接;proto可以是:
TCP、UDP、TCPv6或UDPv6之一

SqlServer查询分析器中键入:print@@version

显示如下:

Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)

Oct 14 2005 00:33:37

Copyright (c) 1988-2005 Microsoft Corporation

Developer Edition on Windows NT 5.1 (Build 2600: Service Pack
3)

3.下载sp4补丁并安装,

再次执行语句:print @@version

Microsoft SQL Server 2005 - 9.00.5000.00 (Intel X86)

Dec 10 2010 10:56:29

Copyright (c) 1988-2005 Microsoft Corporation

Developer Edition on Windows NT 5.1 (Build 2600: Service Pack
3)

4.把服务端和客户端的tcp/ip协议端口都设置成1433,然后cmd执行netstat
–an –p tcp

C:\Documents and Settings\Administrator>netstat -an -p
tcp

能找到端口了,可是执行还是不行,采用'MSDASQL'时,执行下述的查询出现

[MySQL][ODBC 3.51 Driver]Access denied for user:
'root@...(Using password:
YES)……错误提醒

EXECSP_DROPSERVER 'mylink','droplogins'

EXECSP_ADDLINKEDSERVER

@server = 'mylink',

@srvproduct
= 'testmysql',

@provider = 'MSDASQL',--SQLOLEDB

@datasrc = 'test'
--这里的test是DNS系统中的ODBC数据源

EXECSP_ADDLINKEDSRVLOGIN

@rmtsrvname
= 'mylink',

@useself = 'false',

@locallogin
= NULL,

@rmtuser = NULL,

@rmtpassword
= NULL

SELECT*
FROM OPENQUERY(mylink,
'select * from
tobj_operate')

成功了。

删除登陆

exec sp_droplinkedsrvlogin
'test', 'rock'

删除链接,同时删除登陆

execsp_dropserver 'test','droplogins'

说明:

@rmtuser,@rmtpassword的值不为NULL,则表示“使用此安全上下文建立连接”,如把这两个设置为NULL,则不使用安全上下文建立链接,如下图>>

右键“链接服务器名称”->属性


sp_addlinkedserver
语法参考:

http://www.yesky.com/imagesnew/software/tsql/ts_sp_adda_8gqa.htm

sp_ addlinkedsrvlogin语法参考

http://www.yesky.com/imagesnew/software/tsql/ts_sp_adda_6e26.htm

sp_ droplinkedsrvlogin
语法参考:

http://www.yesky.com/imagesnew/software/tsql/ts_sp_drop_59v2.htm

sp_ dropserver
语法参考:

http://www.yesky.com/imagesnew/software/tsql/ts_sp_drop_9c1e.htm


上述过程中可能会遇到的其它问题

问题1,使用SQLOLEDB
provider

链接服务器"xxx"(这里是test)的OLE
DB
访问接口"SQLNCLI"

返回了消息"登录超时已过期"。

链接服务器"xxx"的OLE
DB
访问接口"SQLNCLI"

返回了消息"建立到服务器的连接时发生错误。连接到SQL
Server 2005
时,默认设置SQL
Server
不允许远程连接这个事实可能会导致失败。"。

消息53,级别16,状态1,第0

命名管道提供程序:

无法打开与SQL
Server
的连接[53].

1,连接到SQL
Server 2005
时,默认设置SQL
Server
不允许远程连接这个事实可能会导致失败。

常规检查:

1.1 Microsoft SQL Server 2005 ->
配置工具
-> SQL Server外围应用配置器

->
服务和连接的外围应用配置器
->
远程连接->把"允许TCP/IP和命名管道"勾上,当然"仅TCP/IP"也可以

1.2
如图,Microsoft
SQL Server 2005 ->
配置工具
->SQL Server Configuration Manager,启动协议,并设置网络端口。

点击“SQL2005的协议”,把Shared
Memory,NamedPipes,TCP/IP的状态改为“已启用“(特别是TCP/IP),客户端协议貌似默认开启。


说明:

Shared Memory:

避免了运行在同一台计算机上的客户端和服务器之间的进程间封送(跨越进程边界传送信息之前包装信息的方式).客户端直接访问服务器存储数据的内存映射文件.Shared
Memory去除了大量的管理开销,速度非常快.只有在本地连接服务器时,Shared
Memory才是有用的(例如,web服务器与数据库安装在同一台服务器上),但是它能极大地提高性能.

Named Pipes:

在TCP/IP不可用时,或者没有提供域名服务(DNS)的服务器从而无法把服务器名解析成TCP/IP下的地址时,Named
Pipes可能会非常有用.Named
Pipes的使用正在减少.既然无论如何都要启用TCP/IP协议,为什么还要加入一条协议呢?(多打开一个协议,就多一份风险)

TCP/IP

TCP/IP已经成为事实上的网络标准协议,从SQLserver2000开始,就在Sqlserver中的默认提供,如果你想通过Internet直接连接到Sqlserver上,则它是惟一的选择。

VIA:

VIA是虚拟接口适配器(Virtual
Interface Adapter,VIA)的意思,具体的实现随提供商的不同而不同。一般来说,他是一种网络接口,是两个系统之间性能极高的,专业的连接。这种高性能部分是由于特殊的专用硬件知道系统之间有专用的连接,因此无需处理普通的网络寻址问题。一般禁用它。

右击TCP/IP->
IP
地址,设置服务器监听监听IP和端口

关于IP地址设置:

IP
地址从IP1到IP2,IP3……IPn,还有个IPALL

IP1中IP地址,设置为localhost,即回环地址127.0.0.1

IP1~IPn中的IP地址,为本机上其它IP地址

关于端口设置:

如下图,如果TCP/IP
->
协议,对话框中设置“全部侦听“为是,那么监听端口为IPALL下指定的“TCP

端口”,否则监听端口为IPn中指定的监听“TCP

端口”

注:TCP

动态端口,如果设置0,表示监听动态端口,一般保留为空

接着,设置客户端协议的TCP端口,设置为服务端的TCP修改后的端口3533,操作同上

按照以上设置完成客户端端口更改,在程序中的数据库连接字符串也应该做相应的更改,否则还是无法连接打数据库。

Provider=SQLNCLI.1;Persist
Security Info=True;User ID=****;Password=**;Initial
Catalog=tablename;Data Source=202.000.000.000,3533.

这里所有的设置完成之后,重新启动截图中的”SQL
Server2005服务”

注意:对于客户端端口的修改,若直接修改“客户端协议”的话,会造成连接其他默认端口的数据库出错,可以利用新建别名的方式来解决此问题,如下图所示

客户端连接:

1.3在相应的防火墙新增个例外,比如默认的1433或者刚才修改的服务端的TCP端口(如有修改过默认端口),这样就可以远程连接了

问题2 ODBC驱动不匹配。

这次遇到的“消息53……”问题就是驱动问题,换个版本的MySQL ODBC驱动解决。

问题3 登录问题。

常规性检查,

3.1.
Microsoft SQL Server 2005 ->
配置工具
-> SQL Server外围应用配置器,启动服务,点击Database
Engine->服务,把服务类型改为自动,并启动服务,

对SQL
Server Browser服务,也做同样的操作。

说明:SQL
Server
浏览器程序以服务的形式在服务器上运行。SQL
Server
浏览器侦听对
Microsoft SQL Server
资源的传入请求,为数据库引擎

SSAS
的每个实例提供实例名称和版本号

SQLServer 远程链接MySql数据库详解的更多相关文章

  1. intelliJ IDEA 配置MySQL数据库 详解

    1> 在主界面中,点击右边侧栏的 Database ,在点击 + ,再Data Source 选择数据库   2> 填入 Database 数据库名,在输入 User 和 Password ...

  2. mysql数据库 详解 之 自学成才1

    一.学习目录 1.认识数据库和mysql 2.mysql连接 3.入门语句 4.详解列类型 5.增删改查 INSERT INTO  表名(列1,……  列n)  VALUES(值 1,……  值 n) ...

  3. mysql数据库 详解

    一.学习目录 1.认识数据库和mysql 2.mysql连接 3.入门语句 4.详解列类型 5.增删改查 INSERT INTO  表名(列1,……  列n)  VALUES(值 1,……  值 n) ...

  4. mysql数据库详解

    001 数据库应用系统设计 1.规划   2.需求分析   3.概念模型设计   4.逻辑设计   5.物理设计   6.程序编制及调试   7.运行及维护. 002 创建数据库 CREATE DAT ...

  5. 20.java-JDBC连接mysql数据库详解

    1.JDBC介绍 jdbc(java database connectivity)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成. JDBC需要用到的类和接口有: Dri ...

  6. Jmeter操作MySQL数据库详解

    一.jmeter操作数据库的原理 jmeter不可直接操作数据库,必须通过驱动程序来间接操作,但如果数据库不是在本地而是云服务器上的话就需要通过网络来操作. jmeter通过驱动程序来完成对MySQL ...

  7. 原生jdbc操作mysql数据库详解

    首先给大家说一下使用JDBC链接数据库的步骤 1.加载链接数据库驱动 2.建立数据库链接 3.创建数据库操作对象 4.编写sql语句,执行sql语句 5.获取结果集 6.释放资源 我这边采用的是mav ...

  8. VS Code First使用Mysql数据库详解

    最近电脑出毛病了,自己装显卡驱动给装死了开不了机,自己研究了两天也没解决,只有去修电脑的找专业人员,说起来惭愧,虽然自己是搞计算机的可电脑自己重装系统都还搞不定.重装系统又清理灰尘花了50大洋,现在用 ...

  9. MySQL数据库详解之"双1设置"的数据安全的关键参数案例分享

    mysql的"双1验证"指的是innodb_flush_log_at_trx_commit和sync_binlog两个参数设置,这两个是是控制MySQL 磁盘写入策略以及数据安全性 ...

随机推荐

  1. SQL Server —— 查询数据库、表、列等

    一.查询数据库(sys.databases —— select *from sys.databases where name='<数据库名>') select *from sys.data ...

  2. 微信端支付宝支付,iframe改造,解决微信中无法使用支付宝付款和弹出“长按地址在浏览器中打开”

    微信对支付宝的链接屏蔽了, https://mapi.alipay.com/gateway.do?_input_charset=utf-8&notify_url=http%3A%2F%2Fzh ...

  3. Unity使用Rider作为IDE的体验

    Rider 2017.2.1比较完整的支持Unity开发. 通过添加插件代码实现了直接选择Rider作为编辑器. 支持调试. 支持双击跳转代码. Alt+Insert可以插入Unity event函数 ...

  4. ubuntu图形化配置

    安装图形界面 apt-get install ubuntu-desktop 配置用户目录 udo useradd -s /bin/bash -d /home/wykeinstein -m wykein ...

  5. [转]cximage双缓冲绘图 .

    1.起因 本来是想用gdi绘图的,但是一想到用gdi+libpng,还要自己处理一些比如alpha的效果之类的巨麻烦(而且涉及到处理每一个像素点的计算,一般都很耗时),我对自己处理像素点的能力一直持有 ...

  6. C#基础篇四数组

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace P01A ...

  7. 联系动词Link.V笔记

    这篇单独记录一下联系动词的语法.需要注意的是,只有这个单词在作为联系动词的时候才是这个意思或者才是这样的用法.当然每个单词都会有很多的用法,并不只是这样而已. 第一组:好像…似乎… seem to b ...

  8. 轻量级web富文本框——wangEditor使用手册(2)——扩展一个“缩进”功能 demo

    最新版wangEditor: 配置说明:http://www.wangeditor.com/doc.html demo演示:http://www.wangeditor.com/wangEditor/d ...

  9. Vue笔记:使用 Yarn 管理依赖包

    上年10月份, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm ,它比npm更快.更高效. Yarn VS npm 1.yarn.lock 文件 在 npm 中同样 ...

  10. Hibernate关联关系映射之一对一(主键关联)

    在业务成的域模型中,类和类之间最普遍的关系就是关联关系,而关联也是有方向的. 就以例子来说明:一个人对应一张身份证.对其进行增删改. 对于人在数据创建表的时候,我们就给他两个字段,一个是id号,一个就 ...