一、连接效果

如下图:LinkServer上可以看到我通过ODBC创建的数据源LPTEST,以及数据源中的数据库world,还有相应的三张表;通过下面的sql可以查看数据。

二、安装Mysql的ODBC

1. 下载MYsqlODBC

官网下载地址

一般是选最新的版本下载。
选64位还是32位,要保证和你的sqlserver版本一致,利用下面sql查看:

select @@VERSION

我的结果为64位,如下图:

2. 安装MYsqlODBC
双击msi文件即可安装,但是可能提示需安装Redistributable for Visual Studio 2019的提示,导致安装不了。按照下面步骤安装下就好了。
Redistributable for Visual Studio 2019下载地址
点击下载地址拉到最下面other tools(如下图) 然后找到名字一样的下载即可。

三、配置ODBC

1. 找到ODBC

2. 在系统DSN中点击添加


3. 然后就能看到我们安装的mysqlODBC了,选择Unicode driver的,点击完成

4. 接着配置连接(这一步就不多说了,很简单)

特别注意:这个地方的账号密码尽量不要使用安装Mysql时的root账户,否则会产生很多问题。

- root账户可能遇到的问题:错误Connection Failed.如下图

解决办法:
这个报错是因为root用户的问题,root用户默认是localhost身份,不支持远程连接。需按下面sql修改:

//如果报了上面的错,那第一次执行这个sql显示的应该是localhost,那就执行下面的update语句
select host from user where user = 'root'
//执行完这个update语句一定要重启mysql服务
update user set host = '%' where user = 'root';

一定要重启mysql服务后再次尝试上面的连接过程。

5. 连接成功

四、打开ssms增加linked servers



经过上面两步,就可以连接成功了,连接成功是没有成功窗口的。

- linkedserver可能报错问题

如果上面连接linkedserver时可能报如下错误:

TITLE: Microsoft SQL Server Management Studio
------------------------------

The linked server has been updated but failed a connection test. Do you want to edit the linked server properties?

------------------------------
ADDITIONAL INFORMATION:

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

------------------------------

无法初始化链接服务器“LPTEST”的 OLE DB 访问接口“MSDASQL”的数据源对象。
链接服务器"LPTEST"的 OLE DB 访问接口 "MSDASQL" 返回了消息 "[MySQL][ODBC 8.0(w) Driver]Access denied for user 'ea'@'10.72.66.8' (using password: YES)"(Microsoft SQL Server, Error: 7303)

For help, click: https://docs.microsoft/sql/relational-databases/errors-events/mssqlserver-7303-database-engine-error

------------------------------
BUTTONS:
&Yes
&No
------------------------------

解决办法:

  1. 新增用户名并分配权限
  2. 需要对root账户做些操作,这个方法不建议,就不做解释了。

五、linkedserver查询语句

利用OPENQUERY

//LPTEST就是Linkedserver的名字;第二个参数就是相关语句,
SELECT * FROM OPENQUERY(LPTEST,'select * from city') 

特别注意:OPENQUERY中的sql语法是mysql的,而不是sqlserver的。

- 查询报错问题,如下图:

明确指明了列名District,而且能看到返回行数,就是数据有问题,。

解决办法:
1.修改源数据
2.将OPENQUERY中的查询语句中的列转下类型,如下

  SELECT * FROM OPENQUERY(LPTEST,'select convert( c.District using UTF8  ) as cc from city c') 

更多推荐

SqlServer利用ODBC连接Mysql数据库