SSIS向MySQL目標(Destination)寫資料--Step By Step
前言(廢話)
最近的工作中涉及到SQLSERVER向MySQL的資料遷移同步,團隊中理所當然準備用開發C#微服務介面的方式實現,我覺得這個路子曲折了,推薦SSIS的方式並自告奮勇接下了這個活.不過以前都是sqlserver間互相傳資料,還沒往MySQL寫過資料,沒想到處理的過程遇到很多問題,網路上搜索SSIS往MySQL導資料要麼說不確定是否可行,要麼就說不可行,搞得我都一度懷疑是不是往MySQL寫資料本就不可行.為了交付工作,只好放棄了SSIS方案,用SqlServer的"生成指令碼"連帶整個表的資料批量匯出指令碼,然後放到MySQL中修改為MySQL的語法再批量執行,算是曲線完成了工作.過了幾天因為要做成自動同步,於是又搬出來研究了一番.所幸一堆的踩坑和填坑後,總算解決了.
主要分以下幾步實現:
1. 建立ODBC 連線
-
從MySQL官方網站下載安裝ODBC連線驅動Connector/ODBC 8.0
注意是選擇32位版本 -
建立DSN ODBC資料來源
訪問到控制面板,檢視方式選擇小圖示
依次選擇 管理工具/ODBC Data Source(32-bit)/系統DSN/新增 -
建立ODBC連線
①在連線管理器中右鍵點選"新建連線";
②選擇ODBC;
③在新建介面選擇"使用使用者名稱或系統資料來源名稱",下拉項中選擇前面維護的DSN,輸入使用者名稱,密碼;
④設定屬性RetainSameConnection=True.
2. 建立ODBC Destination
資料來源元件選擇普通的"OLE DB源"元件即可.目標元件選擇比較多,"OLE DB Destination","ADO NET Destination","ODBC Destination",搜了些資料貌似"ADO NET Destination"是可以的,但我一番踩坑沒試出來,我的驗證只有"ODBC Destination"是可行的.
3. 建立執行SQL任務
執行時會提示語法錯誤,需要設定一下Mysql的sql_model,建立"執行SQL任務"元件,執行以下語句即可:
SET sql_mode ='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES'
注意連線和"ODBC目標"的連線保持一致.
參考:
使用SSIS更新MYSQL中的記錄
Writing to a MySQL database from SSIS
Connecting to MySQL from SSIS
Creating a Destination with the Script Component