将SQL Server数据传输到MySQL

9
我正在尝试从SQL Server数据库到MYSQL数据库以恒定和连续的方式传输大量数据。我想使用SQL Server的SSMS复制,但显然只适用于SQL Server到Oracle或IBM DB2连接。目前我们正在使用SSIS转换数据并将其推送到MYSQL数据库的临时位置,然后再复制。我希望找到最快的传输数据的方法,并正在考虑几种方法。
我有一个新的方法来转换数据,我相信这个方法可以解决大部分时间问题,但我想确保我们在将来不会遇到时间问题。我设置了一个链接服务器,该服务器使用MYSQL ODBC驱动程序在SQL Server和MYSQL之间进行通信。这似乎非常慢。我有一些代码也使用微软的ODBC驱动程序,但使用得很少,我无法评估性能。是否有人知道在这两个数据库之间进行通信的超快速方法?我一直在研究MYSQL的数据提供程序,它们似乎与OleDB层通信。我不太确定该相信哪个方向,请问有任何想法吗?
4个回答

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 dumpfile格式并使用mysql loaddata而不是逐行写入,可能会发现一些性能优势。对于大型数据集,MySQL在加载infile和执行原子表交换等操作方面有一些显著的性能改进。
我们使用类似这样的机制,将大型数据文件快速加载到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

1
我发现将 SQL 数据转移的最佳方式(如果您有足够的空间)是使用一种语言的 SQL 转储,然后使用转换软件工具(或 Perl 脚本,两者都很普遍)将 MSSQL 转储转换为 MySQL。请参阅我的答案this关于您可能感兴趣的转换器 :)。

0
你也可以尝试以下方法。 http://kofler.info/english/mssql2mysql/ 我以前尝试过这个方法,对我来说有效。但我不建议你使用它。 你真正的问题是什么?你是不是无法从Linux获取MSSQL数据库连接?

0
我们在SSIS中使用了ado.net驱动程序来连接MySQL,并取得了相当大的成功。基本上,只需要在安装了Integration Services的机器上安装驱动程序,重新启动BIDS,然后在创建ado.net连接管理器时,它应该会出现在驱动程序列表中。
至于复制,您究竟想要实现什么?如果您正在监视更改,请将其视为类型1缓慢变化的维度(数据仓库术语,但同样的原则适用)。插入新记录,更新已更改的记录。
如果您只对新记录感兴趣,并且没有计划更新先前加载的数据,请尝试增量加载策略。插入源.id > max(destination.id)的记录。
在测试完包之后,在SQL Server代理中安排一个作业,以便每隔x分钟运行该包。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接