我必须将表从MSSQL Server迁移到MySql。问题是表格很大(6500万条记录),整个过程需要花费太多时间。有谁知道如何加快速度?有什么有用的工具可以改善这个吗?

有帮助吗?

解决方案

您可以将数据导出到文本,然后使用mysql加载语句:

将数据本地infile '/ somefolder / text_file_with_data.txt'加载到表中由'\ t'终止的some_table字段由'\ n'<

或者如果您将数据文件放在mysql服务器上,您可以:

将数据infile '/ somefolder_on_the_mysql_server / text_file_with_data.txt'加载到表中由'\ t'终止的some_table字段由'\ n'终止的行

我不确定mssql的语法是什么导出

您始终可以导出10,000或100,000套。

其他提示

只需要做一次吗?不要浪费太多时间进行优化,等待它直到完成并继续前进。

需要更频繁地做吗?然后详细说明您目前使用的工具/技术会有所帮助。

以下是将800K记录表从MS Sql Server迁移到MySQL的方法。

创建一个查询以表格格式显示数据

SELECT [PostalCode] + ' ' +
  [StateCode] + '   ' +
  [Latitude] + '    ' +
  [Longitude] + '   ' +
  [CityName]  
FROM [dbo].[PostalCode]

使用SQL Server Management Studio执行查询,并选择将结果输出到文件中(菜单:查询 - &gt;结果到 - &gt;结果到文件)

文件名必须是MySQL中表的名称。文件扩展名无关紧要。

然后使用 mysqlimport.exe (在Windows上)导入数据(该表必须存在于MySQL数据库中):

mysqlimport.exe --user=user_name
  --columns=postalcode,statecode,latitude,longitude,cityname 
  --ignore-lines=2 databaseName pathToFile

导入后,我不得不删除表的最后2条记录,因为文件末尾包含一些垃圾:(818193行受影响)

对于800K,它非常快:导出10秒,然后导入10秒。

希望这有帮助。

确保mysql表最初没有索引;加载完成后添加它们。

通过在my.ini文件中使用这样的语句,确保MySQL表存储文件足够大,然后再开始插入:

innodb_data_file_path=ibdata1:1000M:autoextend

尝试使用可以使用SQL Server的导入/导出向导生成的SSIS / DTS包,从mssql和mysql中获取数据。 (使用适当的OLEDB / ADO提供程序连接到MySQL。

周五回家后开始,周末后回来查看;)

确保没有列上有索引,并删除任何外键(如果您使用InnoDB作为表类型)进行导入。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top