2011-08-15 64 views
9

我想在常量和連續的基礎上從SQL Server數據庫傳輸批量數據到MYSQL數據庫。我想使用SQL Server的SSMS複製,但這顯然只適用於SQL Server到Oracle或IBM DB2的連接。目前,我們正在使用SSIS來轉換數據並將其推送到MYSQL數據庫的臨時位置,並將其複製到該位置。我希望以最快的方式傳輸數據並且是複雜的幾種方法。SQL Server到MySQL的數據傳輸

我有一個新的方法,我計劃對數據進行轉換,我相信這些數據可以解決大部分時間問題,但我希望確保我們未來不會遇到時間問題。我建立了一個使用MYSQL ODBC驅動程序在SQL Server和MYSQL之間進行通信的鏈接服務器。這似乎很慢。我有一些代碼也使用Microsoft的ODBC驅動程序,但使用量很少,無法評估性能。有誰知道減輕這兩個數據庫之間通信的快速方法嗎?我一直在研究似乎與OleDB層進行通信的MYSQL數據提供者。我不太確定要相信什麼以及走向哪個方向,有什麼想法?

回答

1

我在過去使用Java中的jdbc-odbc橋來做到這一點,但通過ODBC的性能並不好。我建議在尋找的東西像http://jtds.sourceforge.net/這是一個純Java驅動程序,你可以拖放到一個簡單的Groovy腳本如下所示:

import groovy.sql.Sql 
sql = Sql.newInstance('jdbc:jtds:sqlserver://serverName/dbName-CLASS;domain=domainName',  
'username', 'password', 'net.sourceforge.jtds.jdbc.Driver') 
sql.eachRow('select * from tableName') { 
    println "$it.id -- ${it.firstName} --" 
    // probably write to mysql connection here or write to file, compress, transfer, load 
} 

下的性能數字給你一個感受它會如何執行: http://jtds.sourceforge.net/benchTest.html

您可能會發現將數據轉儲到mysql轉儲文件格式並使用mysql loaddata代替逐行寫入的性能優勢。如果您加載infile和執行諸如原子表交換之類的操作,MySQL對於大型數據集有一些顯着的性能改進。

我們使用類似這樣的方法將大型數據文件快速加載到從一個系統到另一個系統的mysql中,例如這是將數據加載到mysql的最快機制。但是,實時逐行可能是一個簡單的循環,可以在groovy +某個表中跟蹤哪些行已被移動。

的MySQL>

select * from table into outfile 'tablename.dat'; 
myisamchk --keys-used=0 -rq '/data/mysql/schema_name/tablename' 
load data infile 'tablename.dat' into table tablename; 
myisamchk -rq /data/mysql/schema_name/tablename 
flush tables; 
exit; 

RM「tablename.dat

1

我發現傳輸SQL數據(如果有空間的話)的最佳方式是使用一種語言的SQL轉儲,然後使用轉換軟件工具(或perl腳本,兩者都很流行)轉換SQL轉儲從MSSQL到MySQL。請參閱我的回答this關於您可能感興趣的轉換器的問題:)。

0

我們在ssis上使用了ado.net驅動程序來獲取相當多的成功。基本上,在安裝了集成服務的計算機上安裝驅動程序,重新啓動出價,並在創建ado.net連接管理器時顯示在驅動程序列表中。

至於複製,你到底想要完成什麼?

如果您正在監視更改,請將其視爲類型1緩慢更改的維度(數據倉庫術語,但適用相同的主體)。插入新記錄,更新更改的記錄。

如果您只對新記錄感興趣並且沒有計劃更新以前加載的數據,請嘗試增量加載策略。在source.id> max(destination.id)處插入記錄。

測試完包後,在sql server代理中安排一項作業,每x分鐘運行一次包。

0

Cou還可以嘗試以下操作。 http://kofler.info/english/mssql2mysql/

我試過這個更長的時間,它爲我工作。但我不會向你推薦它。 什麼是真正的問題,你試圖做什麼? 您是否從Linux獲得MSSQL DB連接?

相關問題