簡體   English   中英

SQL 服務器到 MySQL 數據傳輸

[英]SQL Server to MySQL data transfer

我正在嘗試將基於常量和連續的批量數據從 SQL 服務器數據庫傳輸到 MYSQL 數據庫。 I wanted to use SQL Server's SSMS's replication but this apparently is only for SQL Server to Oracle or IBM DB2 connection. 目前,我們正在使用 SSIS 來轉換數據並將其推送到 MYSQL 數據庫中的臨時位置,然后將其復制過來。 我想要最快的數據傳輸方式,並且使幾種方法復雜化。

我有一種新的方法來轉換數據,我相信這將解決大多數時間問題,但我想確保我們將來不會遇到時間問題。 我已經設置了一個鏈接服務器,它使用 MYSQL ODBC 驅動程序在 SQL 服務器和 Z14498B83DD16AF67BZF77 之間進行通信。 這似乎很慢。 我有一些代碼也使用 Microsoft 的 ODBC 驅動程序,但使用得很少,以至於我無法衡量性能。 有誰知道這兩個數據庫之間的快速通信方式? 我一直在研究似乎與 OleDB 層通信的 MYSQL 數據提供程序。 我不太確定該相信什么以及該轉向哪種方式,有什么想法嗎?

The best way I have found to transfer SQL data (if you have the space) is a SQL dump in one language and then to use a converting software tool (or perl script, both are prevalent) to convert the SQL dump from MSSQL to MySQL . 請參閱我對這個問題的回答,了解您可能對什么轉換器感興趣:)。

過去我使用 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 加載數據而不是逐行寫入的一些性能優勢。 如果您加載 infile 並執行諸如原子表交換之類的操作,MySQL 對大型數據集有一些顯着的性能改進。

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

mysql> select * from table into outfile 'tablename.dat';  

shell> myisamchk --keys-used=0 -rq '/data/mysql/schema_name/tablename'

mysql> load data infile 'tablename.dat' into table tablename;

shell> myisamchk -rq /data/mysql/schema_name/tablename

mysql> flush tables;
mysql> exit;

shell> rm tablename.dat

我們已經在 ssis 中使用了 mysql 的 ado.net 驅動程序並取得了相當大的成功。 基本上,在安裝了集成服務的機器上安裝驅動程序,重新啟動投標,當您創建 ado.net 連接管理器時,它應該顯示在驅動程序列表中。

至於復制,您到底想完成什么?

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

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

測試 package 后,在 sql 服務器代理中安排一個作業,以每 x 分鍾運行一次 package。

湊也可以試試下面的。 http://kofler.info/english/mssql2mysql/

我之前嘗試了更長的時間,它對我有用。 但我不會向你推薦它。 真正的問題是什么,你想做什么? 您是否沒有獲得 MSSQL DB 連接,例如來自 Linux?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM