一、连接效果
如下图: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:///sql/relational-databases/errors-events/mssqlserver-7303-database-engine-error
------------------------------
BUTTONS:
&Yes
&No
------------------------------
解决办法:
- 新增用户名并分配权限
- 需要对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( using UTF8 ) as cc from city c')