SQLServer 远程链接MySql数据库详解

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: SQLServer 远程链接MySql数据库详解

SQLServer远程链接MySql数据库详解


测试环境:

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,查看如下。

 


点击配置的系统DNStest为例),点击配置

 

 

注意:必须根据实际要远程连接的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*FROMOPENQUERY(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->即席远程查询->勾取启用OPENROWSETOPENDATASOURCE支持

 

 

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.01433的信息,

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

参数说明:

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

-p proto显示proto指定的协议的连接;proto可以是: TCPUDPTCPv6UDPv6之一

 

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][ODBC3.51 Driver]Accessdeniedforuser: 'root@...(Using password: YES)……错误提醒

EXECSP_DROPSERVER'mylink','droplogins'

 

EXECSP_ADDLINKEDSERVER

 @server ='mylink',

 @srvproduct ='testmysql',

 @provider ='MSDASQL',--SQLOLEDB

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

 

EXECSP_ADDLINKEDSRVLOGIN

 @rmtsrvname ='mylink',

 @useself ='false',

 @locallogin =NULL,

 @rmtuser =NULL,

 @rmtpassword =NULL

 

SELECT*FROMOPENQUERY(mylink,'select * from tobj_operate')

成功了。

 

删除登陆

execsp_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 MemoryNamedPipesTCP/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 AdapterVIA)的意思,具体的实现随提供商的不同而不同。一般来说,他是一种网络接口,是两个系统之间性能极高的,专业的连接。这种高性能部分是由于特殊的专用硬件知道系统之间有专用的连接,因此无需处理普通的网络寻址问题。一般禁用它。

 

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

关于IP地址设置:

IP地址从IP1IP2IP3……IPn,还有个IPALL

IP1IP地址,设置为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的每个实例提供实例名称和版本号

 

目录
相关文章
|
14天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
15天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
29天前
|
存储 数据挖掘 数据库
数据库数据恢复—SQLserver数据库ndf文件大小变为0KB的数据恢复案例
一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。 存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。 虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。
|
1月前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
29 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
1月前
|
数据库连接 网络安全 数据库
网站链接数据库失败,重启网站好了
网站链接数据库失败,重启网站好了
|
1月前
|
Java 关系型数据库 数据库连接
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第3天】Spring Boot项目中数据库连接问题可能源于配置错误或依赖缺失。YAML配置文件的格式不正确,如缩进错误,会导致解析失败;而数据库驱动不匹配、连接字符串或认证信息错误同样引发连接异常。解决方法包括检查并修正YAML格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
206 10
|
1月前
|
Java 关系型数据库 MySQL
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第4天】本文分析了Spring Boot应用在连接数据库时可能遇到的问题及其解决方案。主要从四个方面探讨:配置文件格式错误、依赖缺失或版本不兼容、数据库服务问题、配置属性未正确注入。针对这些问题,提供了详细的检查方法和调试技巧,如检查YAML格式、验证依赖版本、确认数据库服务状态及用户权限,并通过日志和断点调试定位问题。
|
1月前
|
Oracle Java 关系型数据库
使用DataGrip链接达梦数据库
使用DataGrip链接达梦数据库
83 0
|
2月前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
35 4
|
14天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
29 1
下一篇
无影云桌面