一、连接效果
如下图: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 hostfromuserwhereuser='root'//执行完这个update语句一定要重启mysql服务updateuserset host='%'whereuser='root';一定要重启mysql服务后再次尝试上面的连接过程。
5. 连接成功
四、打开ssms增加linked servers


经过上面两步,就可以连接成功了,连接成功是没有成功窗口的。
- linkedserver可能报错问题
如果上面连接linkedserver时可能报如下错误:
TITLE: MicrosoftSQL Server Management Studio------------------------------
The linked server has been updated but failed a connection test.Do you wantto edit the linked server properties?------------------------------
ADDITIONAL INFORMATION:
An exception occurredwhile executing a Transact-SQL statementor 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)"。(MicrosoftSQL Server, Error:7303)For help, click: https://docs.microsoft.com/sql/relational-databases/errors-events/mssqlserver-7303-database-engine-error------------------------------
BUTTONS:&Yes&No------------------------------解决办法:
- 新增用户名并分配权限
- 需要对root账户做些操作,这个方法不建议,就不做解释了。
五、linkedserver查询语句
利用OPENQUERY。
//LPTEST就是Linkedserver的名字;第二个参数就是相关语句,SELECT*FROMOPENQUERY(LPTEST,'select * from city')特别注意:OPENQUERY中的sql语法是mysql的,而不是sqlserver的。
- 查询报错问题,如下图:
明确指明了列名District,而且能看到返回行数,就是数据有问题,。
解决办法:
1.修改源数据
2.将OPENQUERY中的查询语句中的列转下类型,如下
SELECT*FROMOPENQUERY(LPTEST,'select convert( c.District using UTF8 ) as cc from city c')