我正在尝试将基于SQL Server数据库的常量和连续的批量数据传输到MYSQL数据库。我想使用SQL Server的SSMS复制,但这显然只适用于SQL Server到Oracle或IBM DB2连接。目前,我们正在使用SSIS转换数据并将其推送到MYSQL数据库的临时位置,在该位置复制数据。我想以最快的方式传输数据和复杂的几种方法。
我有一种新方法,我计划转换数据,我相信这将解决大部分时间问题,但我想确保我们将来不会遇到时间问题。我已经设置了一个链接服务器,它使用MYSQL ODBC驱动程序在SQL Server和MYSQL之间进行通信。这看起来非常慢。我有一些代码也使用Microsoft的ODBC驱动程序,但使用得太少,我无法衡量性能。有谁知道在这两个数据库之间快速通信的方式?我一直在研究MYSQL的数据提供程序,它们似乎与OleDB层进行通信。我不太确定该相信什么,以及指导哪种方式,任何想法?
答案 0 :(得分:1)
我发现传输SQL数据的最佳方法(如果你有空间)是一种语言的SQL转储,然后使用转换软件工具(或perl脚本,两者都很普遍)来转换SQL转储MSSQL到MySQL。请参阅我对this关于您可能感兴趣的转换器的问题的回答:)。
答案 1 :(得分: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';
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
答案 2 :(得分:0)
我们在ssis中使用了用于mysql的ado.net驱动程序并取得了相当大的成功。基本上,在安装了集成服务的计算机上安装驱动程序,重新启动出价,并在创建ado.net连接管理器时显示在驱动程序列表中。
至于复制,你究竟想要完成什么?
如果您正在监控更改,请将其视为类型1缓慢更改的维度(数据仓库术语,但适用相同的主体)。插入新记录,更新已更改的记录。
如果您只对新记录感兴趣并且没有计划更新以前加载的数据,请尝试增量加载策略。在source.id>中插入记录MAX(destination.id)。
在测试软件包之后,在sql server代理程序中安排一个作业,每x分钟运行一次该软件包。
答案 3 :(得分:0)
Cou也可以尝试以下方法。 http://kofler.info/english/mssql2mysql/
我之前尝试过这段时间,这对我有用。但我不推荐给你。 什么是真正的问题,你尝试做什么? 你不能得到MSSQL数据库连接,例如Linux?