SQLServer2012連接mysql5.5


網站由於歷史原因,使用了sqlserver和mysql兩種數據庫,數據庫版本是SQLServer2012和MySql5.5,兩庫間交換數據以前都是走的接口,太麻煩。一下子把mysql遷移到sqlserver也不太合適,於是就想通過數據庫連接的形式讓sqlserver側可以直接訪問mysql的數據。

從網上東拼西湊,一步步搞通了,整理如下:

一、從mysql網站上下載ODBC驅動

http://dev.mysql.com/downloads/connector/odbc/

找到合適自己操作系統的版本下載並安裝,我的是WINDOWS64位版本,

二、配置ODBC數據源

打開【管理工具】—>【數據源(ODBC)】,選擇【系統DSN】,點擊【添加】,選擇【MySQL ODBC 5.3  Unicode Driver】,完成

輸入自定義的數據源名稱XXX和描述,輸入要連接的mysql服務器ip地址/端口/用戶名/密碼及數據庫實例名,點擊test,測試成功,OK。

三、配置數據庫鏈接

打開sqlserver management studio,選擇【服務器對象】,右擊【鏈接服務器】,選擇【新建鏈接服務器】,

【常規】選項卡中輸入自定義的服務器鏈接名稱,選擇【其它數據源】

【提供程序】項,選擇【Microsoft OLE DB Provider For ODBC Drivers】,別選錯

輸入產品名稱(自定義)、數據源名稱(上一步定義的名稱XXX)

【安全性】選項卡,選擇【使用此安全上下文建立連接】,輸入遠程登錄用戶名和密碼

確定!

如果沒有報錯,刷新【鏈接服務器】節點,右擊新增的鏈接名稱,選擇【測試鏈接】,沒有問題。

四、使用:

1、OPENQUERY方式;

SELECT *  FROM  OPENQUERY(dblink名稱, 'select   *   from t_table');

 

2、OPENROWSET方式;

先打開OPENROWSET:

exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure;

執行示例:

SELECT * FROM OPENROWSET(
'MSDASQL',
'DRIVER={MySQL ODBC 5.3 Unicode Driver};
SERVER=111.222.222.111;
PORT=3306;DATABASE=mysqldb;
USER=root;PASSWORD=xxxyyyzzz;
STMT=set names gb2312;
OPTION=2049',
'select * from t_table;'
)
go;

 

 

第三步可能會報一個錯誤:

[MySQL][ODBC 5.3(w) Driver]Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)"。 (Microsoft SQL Server,錯誤: 7303

 

這是數據庫版本對密碼加密方式不同引起的,解決:

打開mysql數據庫的mysql示例,打開user表,可以看到鏈接使用的用戶名root和密碼,

同為root用戶,加密后的密碼串明顯不同。把長的那串復制出來,替換掉短的,提交修改。

PS:網上有說法執行update `user` t set t.`Password`=PASSWORD(xxxyyyzzz) where t.`User`='root' and t.`Host`='111.222.222.111',我試了不能生效,仍然使用的舊加密方式生成的仍然是短密文。

 

然后記得執行FLUSH PRIVILEGES語句,刷新權限信息。

再次到SQLServer執行第3步的配置,問題解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM