将远程MySQL数据库复制到MS SQL Server 2008


Answers:


9

我个人比较喜欢MS SQL方法和MySQL方法。为什么?Windows可以立即使用32位和64位MySQL ODBC驱动程序,并且设置链接服务器非常简单。我有很多从MS SQL链接到的MySQL服务器。而且,从linux / unix连接到MS SQL并不总是很好,而且您通常无法使用所有功能。FreeTDS有局限性。您可能会早点击打它们,而不是以后击打它们,为什么不跳过它。所有这些都假定您在* nix上运行MySQL。如果不是,它会更接近50/50,但我仍然会选择从MS SQL中拉取,因为听起来它不是“实时”数据库,因此对任何ETL或处理施加负担都比较理想。GoldenGate解决方案听起来很有趣,但是我确定它不是免费的。

考虑到我已经建立了将MySQL和Oracle数据库复制到MS SQL的方案,我将提供一些最适合我的技巧:

  1. 如果可以,请尽最大努力确定如何确保仅带来增量变化。合并命令可以帮助您。截断一个表,然后再将其全部插入,会浪费您的日志,占用网络带宽,并且通常只会浪费时间。
  2. 如果处理大量数据,请确保将事务分解,以免需要大量的日志文件。当您知道自己不需要回滚的步骤时,请使用显式提交或检查点。
  3. 如果MSSQL数据库仅用于报告,则ETL在那里工作,以免影响MySQL服务器。使用登台数据库或架构+文件组可以使事情变得容易。
  4. 将数据导入分为几个步骤。这使得在导入失败和/或进行故障排除时很容易重新启动导入。一种全有或全无的方法很快变得烦人。
  5. 尽可能使用变量来协助远程数据库进行查询计划和索引使用。还请注意主机箱上的事务隔离类型以及“复制”查询将产生什么影响。如果您只是为了报告或沙箱使用而提取数据,则不想在实时数据库上阻止编写器。

希望技巧能有所帮助!


4

此处在StackOverflow上解决了相同的问题: 从MySQL复制到MSSQL

似乎有一些解决方法,但不是一个很简单的解决方案。

我相信您绝对应该尝试构建SSIS包以将必要的数据从MySQL DB导入到MSSQL DB。SSIS允许从各种来源导入数据。然后,您应该能够使用Windows Task Scheduler或sql作业来计划程序包。


3

如果说复制是指日志传送或类似的东西,我相信您很不幸。但是,您当然可以将MySQL数据库设置为链接服务器,并推出自己的复制方案。最简单的就是使用truncate和insert语句对所有表进行定期快照。根据您的要求增加复杂性。


我的意思是我希望一个计划​​的任务每周运行一次,并将所有内容从msqldb复制到sql server 2008 db-可能吗?
Jimmy Collins

1
请记住,每次截断和提取所有数据可能会非常慢,具体取决于所涉及的数据量,网络延迟等。如果两个数据库之间的网络链接较小或较慢,则绝对不是要走的路。我总是试图设计一种方法,使我能够拉三角洲。
AndrewSQL 2011年

1
我同意,三角洲是要走的路。我对MySQL的了解不多,无法与触发器和肮脏的行位对话,但是我确信可以进行一些设置。在SQL Server方面,直接安排作业。
拉里·史密斯米尔

3

您可以将GoldenGate用于MySQLMS SQL来执行此操作。您只需在每侧安装GoldenGate产品,然后进行同质复制。

另外,对于“快照”复制,您可以使用Python(或类似的)脚本简单地连接到两个数据源(使用UnixODBCFreeTDS连接到MS SQL),SELECT在每一行的一侧循环遍历表INSERT在另一。由于MSSQL具有事务并且是您的目标,因此您可以启动事务,DELETE所有表中的所有内容都进行复制,然后COMMIT就涉及目标上的已连接用户而言,它会立即显示,不会出现不一致(除非存在这些不一致)当然在来源上)。


我不知道您可以使用GoldenDate来完成此操作。我将不得不阅读更多有关此的内容。感谢分享!
AndrewSQL 2011年

现在,oracle为此产品提供了支持。甲骨文已经收购了GoldenGate。现在,此产品属于oracle产品。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.