2011-08-15 149 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连接?

相关问题