【问题标题】:MySQL -> SQL Server Migration Assistant with LARGE table issueMySQL -> SQL Server Migration Assistant 与 LARGE 表问题
【发布时间】:2013-01-31 21:17:16
【问题描述】:

我正在尝试将我公司的旧 MySQL 数据库迁移到 SQL Server 2008。

我正在使用 MySQL 软件的 SQL Server 迁移助手,除了大型表(一些包含大约 1.5 亿多行)之外,一切都运行良好 - 它创建架构等,当我选择迁移数据时,我得到它停留在Migrating myTable > myTable with 0 of 159216578 rows processed - 它保持这种状态大约 1-2 小时然后崩溃并说它无法创建错误文件。

我可以更改任何东西/设置来完成这项工作吗? 有没有更好的方法(如果我也可以这样做,我可以访问.frm.MYD.MYI 文件)-只要我迁移这些表,我就可以接受任何事情。

谢谢!!

【问题讨论】:

  • 您使用的是什么版本的 SSMA? MySQL、SQL Server 和运行 SSMA 的位置之间的网络是如何安排的?我这周刚刚迁移了一个有 510 万行的 MySQL 表,效果很好。
  • 您是否使用默认设置,即批量大小 = 1000?我找不到任何关于表大小应该有限制的参考资料,但您的计算机似乎在迁移过程中试图下载太多数据(因此卡在0 然后崩溃)。运行 SSMA 的机器有多少 RAM?这张表单行有多少数据,即有很多宽列或二元列,还是架构相对轻量和简单?
  • 如果 SSMA 已经生成了架构,您可以尝试使用 OpenQuery 通过 ODBC 连接直接从 SQL Server 复制数据到 MySQL,如下所示:blog.jamesrossiter.co.uk/2011/03/07/…。挑战在于您必须自己处理从 MySQL 到 SQL Server 的任何数据转换问题。我想您可以尝试将源表拆分为20 5 百万行表。你的表有自然分区键吗?磁盘上的表有多大?
  • OpenQuery 的一种可能性是,您可以在技术上包含 WHERE 以限制遇到的行数。例如,INSERT SQLServerdatabasename.dbo.tablename SELECT * FROM openquery(MYSQL, ‘SELECT * FROM databasename.tablename WHERE PK BETWEEN 1 AND 1000000’) 之类的东西可以获取前 1,000,000 个 id 值。然后只需更新最小/最大值并运行,直到您一直通过表格(或使用FOR 循环来获取所需的所有数百万)。
  • ...虽然我强烈建议用一个小集合进行测试,比如 100 行,并检查一切是否正常。例如,除非您set identity [TableName] off,否则 PK 值不会直接过来。并且您可能会在必须处理的某些栏目中发现翻译问题。

标签: mysql sql-server database database-migration


【解决方案1】:

我认为您想一次导出大约 1000 万行(取决于 MySQL 硬件),使用 WHERE 子句中允许您分离数据(ID、日期等)的内容。

SELECT * FROM Table1 WHERE ID BETWEEN x and y INTO OUTFILE 'C:\temp\data.csv';

您可以使用 SQL Server 导入/导出向导将其导入 MSSQL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2012-03-09
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多