首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server到MySQL的数据传输

问SQL Server到MySQL的数据传输
EN

Stack Overflow用户
提问于 2011-08-16 06:01:30
回答 4查看 6.2K关注 0票数 9

我正在尝试从SQL Server数据库向MYSQL数据库传输基于常量和连续的批量数据。我想使用SQL Server的SSMS的复制,但这显然只用于SQL Server到甲骨文或IBM的DB2连接。目前,我们正在使用SSIS来转换数据并将其推送到MYSQL数据库中的一个临时位置,在那里将其复制过来。我想要最快的方式来传输数据和复杂的几种方法。

我有一个新的方法,我计划转换数据,我相信这将解决大多数时间问题,但我想确保我们在未来不会遇到时间问题。我已经设置了一个链接服务器,它使用MYSQL ODBC驱动程序在SQL server和MYSQL之间进行通信。这看起来非常慢。我有一些代码也使用微软的ODBC驱动程序,但使用得太少,以至于我无法评估其性能。有谁知道在这两个数据库之间进行通信的快速方法吗?我一直在研究似乎与OleDB层通信的MYSQL数据提供程序。我不太确定该相信什么,该走哪条路,有什么想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-02 09:25:28

在过去,我使用Java中的jdbc-odbc桥来实现这一点,但是通过ODBC实现的性能并不是很好。我建议看一下像http://jtds.sourceforge.net/这样的东西,它是一个纯Java驱动程序,您可以将其放入一个简单的Groovy脚本中,如下所示:

代码语言:javascript
复制
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 +某个表中执行的简单循环,以跟踪移动了哪些行。

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2011-08-16 06:05:31

我找到的传输SQL数据的最好方法(如果您有空间的话)是使用一种语言的SQL dump,然后使用转换软件工具(或perl脚本,两者都很流行)将SQL dump从MSSQL转换为MySQL。有关您可能对什么转换器感兴趣,请参阅我对this问题的回答:)。

票数 1
EN

Stack Overflow用户

发布于 2011-08-16 10:02:19

我们已经在ssis中使用了mysql的ado.net驱动程序,并取得了相当的成功。基本上,在安装了集成服务的机器上安装驱动程序,重新启动bids,当您创建ado.net连接管理器时,它应该会显示在驱动程序列表中。

至于复制,您到底想要实现什么?

如果您正在监视更改,请将其视为类型1缓慢变化的维度(数据仓库术语,但适用相同的原则)。插入新记录,更新更改的记录。

如果您只对新记录感兴趣,并且没有计划更新以前加载的数据,请尝试增量加载策略。在source.id > max(destination.id)的位置插入记录。

测试完包后,在sql server代理中安排一个作业,使其每x分钟运行一次包。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7071333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档