首页 > 数据库 >通过链接服务器从 SQL Server 访问 MySQL 数据

通过链接服务器从 SQL Server 访问 MySQL 数据

时间:2022-10-17 11:36:42浏览次数:80  
标签:选项 SQL ODBC Server MySQL 服务器 连接

问题

有时您需要从 SQL Server 中访问 MySQL 中的数据。您可以导出和导入数据,但另一种选择是创建一个从 SQL Server 到 MySQL的链接服务器。在本技巧中,我们将介绍如何从 SQL Server 为 MySQL 完成此操作。

解决方案

在本技巧中,我们将展示 SQL Server 如何通过 链接服务器访问 MySQL 数据。您可以从http://dev.mysql.com/downloads/connector/odbc/获取最新版本的 Connector/ODBC 二进制文件和源代码的副本 。

在 Windows 上安装 Connector/ODBC 驱动程序之前:

  • 确保您的 Microsoft 数据访问组件 (MDAC) 是最新的。
  • 确保您的系统上有 Microsoft Visual C++ 2013 Redistributable Package。

完成安装的步骤非常简单,按照工具中的安装​​步骤操作即可。

MySQL 连接器/ODBC 5.3 - 安装向导

安装驱动程序后,您将在 ODBC 数据源管理器中看到该驱动程序。

安装驱动程序后,您将在 ODBC 数据源管理器中看到该驱动程序。

要从 SQL Server 连接,我们将通过链接服务器创建连接,在此之前我们需要了解我们将使用的连接字符串。

例如:

Driver={MySQL ODBC 5.3 ANSI Driver};DATABASE=database_name;OPTION=134217728;PWD=user_password;UID=user_identification;SERVER=server_name

下表包含可用于连接字符串的参数。

范围默认值评论
用户 ODBC 用于连接 MySQL 的用户名。
uid ODBC 与用户同义。在 3.51.16 中添加。
服务器 本地主机 MySQL 服务器的主机名。
数据库   默认数据库。
选项 0 指定连接器/ODBC 工作方式的选项。
港口 3306 如果服务器不是 localhost,则要使用的 TCP/IP 端口。
初始化   初步声明。连接到 MySQL 时要执行的语句。在 3.51 版中,该参数称为 stmt。驱动程序支持仅在初始连接时执行的初始语句。
密码   服务器上用户帐户的密码。
密码   与密码同义。在 3.51.16 中添加。
插座   如果服务器是 localhost,则要连接的 Unix 套接字文件或 Windows 命名管道。
sslca   包含信任 SSL CA 列表的文件的路径。在 3.51.16 中添加。
sslcapath   包含 PEM 格式的受信任 SSL CA 证书的目录的路径。在 3.51.16 中添加。
sslcert   用于建立安全连接的 SSL 证书文件的名称。在 3.51.16 中添加。
密码器   用于 SSL 加密的允许密码列表。密码列表与 openssl ciphers 命令的格式相同。在 3.51.16 中添加。
sslkey   用于建立安全连接的 SSL 密钥文件的名称。在 3.51.16 中添加。
rsakey   包含使用 MySQL 的 SHA256 身份验证插件的 RSA 公钥的 PEM 文件的全路径名。在 5.3.4 中添加。
验证   如果设置为 1,SSL 证书将在与 MySQL 连接一起使用时进行验证。如果未设置,则默认行为是忽略 SSL 证书验证。
字符集   用于连接的字符集。在 3.51.17 中添加。
读取超时   尝试从服务器读取的超时时间(以秒为单位)。每次尝试都使用这个超时值,并且在必要时会重试,因此总有效超时值是选项值的三倍。您可以设置该值,以便在 TCP/IP Close_Wait_Timeout 值 10 分钟之前检测到丢失的连接。此选项仅适用于 TCP/IP 连接,并且仅适用于 MySQL 5.1.12 之前的 Windows。对应 MySQL 客户端库的 MYSQL_OPT_READ_TIMEOUT 选项。在 3.51.27 中添加。
写超时   尝试写入服务器的超时时间(以秒为单位)。每次尝试都使用此超时值,并且如有必要会进行 net_retry_count 次重试,因此总有效超时值为 net_retry_count 次选项值。此选项仅适用于 TCP/IP 连接,并且仅适用于 MySQL 5.1.12 之前的 Windows。对应 MySQL 客户端库的 MYSQL_OPT_WRITE_TIMEOUT 选项。在 3.51.27 中添加。
交互的   如果设置为 1,则启用 mysql_real_connect 的 CLIENT_INTERACTIVEconnection 选项。
预取 0 当设置为非零值 N 时,会导致连接中的所有查询一次返回 N 行而不是整个结果集。对于查询非常大的表很有用,在这种情况下一次检索整个结果集是不切实际的。您可以一次滚动浏览结果集,N 条记录。此选项仅适用于只进游标。设置选项参数 MULTI_STATEMENTSis 时不起作用。它可以与选项参数 NO_CACHE 结合使用。它在 ADO 应用程序中的行为是未定义的:预取可能发生也可能不发生。
no_ssps 0 在 Connector/ODBC 5.2 中,默认情况下使用服务器端准备好的语句。当此选项设置为非零值时,在客户端模拟准备好的语句,这与 5.1 和 3.51 中的行为相同。在 5.2 中添加。
can_handle_exp_pwd 0 指示应用程序可以处理过期密码,该密码由 SQL 状态 08004(“服务器拒绝连接”)和本机错误代码 ER_MUST_CHANGE_PASSWORD_LOGIN (1862) 表示。该连接是“沙盒”的,除了发出 SET PASSWORD 语句之外什么也做不了。要在这种情况下建立连接,您的应用程序必须在开始时使用 initstmt 连接选项设置新密码,或者在连接后立即发出 SET PASSWORD 语句。一旦过期密码被重置,对连接的限制就会被解除。有关 MySQL 服务器帐户密码过期的详细信息,请参阅 ALTER USER 语法。在 5.2.4 中添加。

不同配置的推荐连接器/ODBC 选项值

选项参数用于告诉连接器/ODBC 客户端不是 100% 兼容 ODBC 。

配置参数设置期权价值
微软访问,Visual Basic FOUND_ROWS=1; 2
Microsoft Access(改进了 DELETE 查询) FOUND_ROWS=1;DYNAMIC_CURSOR=1; 34
微软 SQL 服务器 COLUMN_SIZE_S32=1; 134217728
行数过多的大表 COMPRESSED_PROTO=1; 2048
Sybase PowerBuilder IGNORE_SPACE=1;FLAG_SAFE=1; 135168
查询日志生成(调试模式) LOG_QUERY=1; 524288
没有缓存结果的大表 NO_CACHE=1;FORWARD_CURSOR=1; 3145728
运行全表“SELECT * FROM ...”查询的应用程序,但仅从结果 PREFETCH=N 中读取少量 (N) 行 不适用  

创建与 MySQL 的 SQL Server 链接服务器

SQL Server Management Studio中,打开对象资源管理器,展开服务器对象,右键单击链接服务器,然后单击新建链接服务器。在“常规”页面上执行以下操作:

  1. 链接服务器- 键入您要链接到的 MySQL 服务器的名称。
  2. 服务器类型- 选择其他数据源
  3. Provider - 指定一个 OLE DB Provider,在这种情况下,我选择 Microsoft OLE DB Provider for ODBC Drivers
  4. Provider string - 输入我们上面讨论的连接字符串 Driver={MySQL ODBC 5.3 ANSI Driver};DATABASE=database_name;OPTION=134217728;PWD=user_password;UID=user_identification;SERVER=server_name)
创建与 MySQL 的 SQL Server 链接服务器

在 Server Options 页面上,我们需要将 RPC 和 RPC Out 设置调整为 True。将 RPC(远程过程调用)视为从服务器 1 远程运行到链接服务器 2 的存储过程。

在 Server Options 页面上,我们需要将 RPC 和 RPC Out 设置调整为 True

您还可以使用以下 T-SQL 命令创建链接服务器:

使用 [主]
去
EXEC master.dbo.sp_addlinkedserver
@server = N'MYSQL'
,@srvproduct=N'MySQL'
,@provider=N'MSDASQL'
,@provstr=N'Driver={MySQL ODBC 5.3 ANSI 驱动程序};DATABASE=test;OPTION=134217728;PWD=P@ssw0rd;UID=test;SERVER=srvtest'
去

EXEC master.dbo.sp_serveroption @server=N'MYSQL', @optname=N'rpc', @optvalue=N'true'
去
EXEC master.dbo.sp_serveroption @server=N'MYSQL', @optname=N'rpc out', @optvalue=N'true'
去

从 SQL Server 访问 MySQL 数据

创建链接服务器后, 您将能够在对象资源管理器中看到远程对象。

从 SQL Server 访问 MySQL 数据

我们还可以运行查询来访问数据。

我们还可以运行查询来访问数据。

连接器/ODBC 性能

连接器/ODBC 驱动程序已经过优化,可提供非常快的性能。如果您遇到连接器/ODBC 的性能问题或注意到简单查询的大量磁盘活动,则需要检查多个方面:

  • 确保未启用 ODBC 跟踪。启用跟踪后,ODBC 管理器会在跟踪文件中记录大量信息。您可以使用 ODBC 数据源管理器的跟踪面板在 Windows 中检查和禁用跟踪。
  • 确保您使用的是标准版本的驱动程序,而不是调试版本。调试版本包括额外的检查和报告措施。
  • 确保未启用驱动程序跟踪(选项值 4)和查询日志记录(选项值 524288)。
 

标签:选项,SQL,ODBC,Server,MySQL,服务器,连接
From: https://www.cnblogs.com/lkj371/p/16798558.html

相关文章

  • SAP HANA SQL系列一:常用数据类型
     数据类型日期时间类型DATETIMESECONDDATETIMESTAMP数字类型SMALLINTINTEGERBIGINTDECIMAL(精度,小数位数)或DEC(p,s)SMALLDECIMALREALDOUBLEFLOAT(n)字符类型VARCHARNVAR......
  • SAP HANA SQL系列三:日期时间函数
    日期时间函数ADD_DAYSADD_MONTHSADD_SECONDSADD_YEARSCURRENT_DATECURRENT_TIMECURRENT_TIMESTAMPCURRECT_UTCDATECURRENT_UTCTIMECURRENT_UTCTIMESTAM......
  • 从 SQL Server 创建到 MySQL 的链接服务器
    问题SQLServer链接服务器用于查询远程数据库,在本技巧中,我们将学习如何从SQLServer为MySQL服务器配置链接服解决方案以下是创建连接到MySQL服务器的链接服务器......
  • MySQL数据库通过cmd窗口导入sql文件
     在使用mysql数据库是,经常需要备份或者恢复数据库数据,最便捷的方式就是通过导出sql文件备份和直接执行sql文件恢复;以下记录如何进行操作的:一、导出sql文件 1、启动My......
  • 【MySQL练习】基本SELECT语句
    表数据:https://www.cnblogs.com/zhishu/p/16452950.html1.查询员工12个月的工资总和,并起别名为ANNUALSALARY别名中有空格的,要用双引号。IFNULL(expr1,expr2),expr1如果......
  • MySQl中关于JOIN的用法全解
    一、一张图看懂MySQL的各种JOIN用法二、准备表和数据,测试1、创建两个表测试CREATETABLE`forlan_class`( `id`bigint(20)NOTNULLAUTO_INCREMENTCO......
  • MySql必知必会
    MySql必知必会初始化数据库创建数据库CREATEDATABASEcrashcourse;创建表#########################################MySQLCrashCourse#http://www.forta.com......
  • MySQL维护之如何查看执行计划
    实际上在MySQL索引原理之索引分析-池塘里洗澡的鸭子-博客园(cnblogs.com)中已经使用到查看执行计划的命令explain,也进行了各列选项的解释。本文进行补充同时介绍......
  • Mysql数据库巡检(二)
    Mysql数据库巡检(二)1.查看数据库版本mysql>selectversion();2.数据库端口mysql>showglobalvariableslike'port';![img](file:///C:\Users\Administrator\App......
  • rsync同步SQLite3文件API返回旧数据
    问题描述EFCorecannotgetnewvalueindocker,ifusersyncreplacesqlitefile基于.NET6开发一个查询SQLite的API,使用Docker进行部署,通过挂载的方式来访问数据库文......