【问题标题】:SQL Server to MySQL data transferSQL Server 到 MySQL 数据传输
【发布时间】:2011-08-15 22:01:29
【问题描述】:

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

我有一个新的方法来转换数据,我确信这将解决大多数时间问题,但我想确保我们将来不会遇到时间问题。我已经建立了一个链接服务器,它使用 MYSQL ODBC 驱动程序在 SQL Server 和 MYSQL 之间进行通信。这似乎很慢。我有一些代码也使用 Microsoft 的 ODBC 驱动程序,但使用的太少以至于我无法衡量性能。有谁知道这两个数据库之间的快速通信方式?我一直在研究似乎与 OleDB 层通信的 MYSQL 数据提供程序。我不太确定该相信什么以及该朝哪个方向发展,有什么想法吗?

【问题讨论】:

    标签: mysql sql-server connection odbc oledb


    【解决方案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】:

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

      【讨论】:

        【解决方案3】:

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

        至于复制,您到底想完成什么?

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

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

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

        【讨论】:

          【解决方案4】:

          你也可以试试下面的。 http://kofler.info/english/mssql2mysql/

          我之前尝试过更长的时间,它对我有用。但我不会向你推荐它。 真正的问题是什么,你想做什么? 您没有获得 MSSQL DB 连接,例如来自 Linux 的吗?

          【讨论】:

            猜你喜欢
            • 2010-12-22
            • 2010-10-29
            • 1970-01-01
            • 2016-01-13
            • 1970-01-01
            • 2016-03-17
            • 1970-01-01
            • 2012-09-29
            • 1970-01-01
            相关资源
            最近更新 更多