我必须将表从 MSSQL Server 迁移到 MySql。问题是表很大(6500 万条记录),整个过程耗时太长。有谁知道如何加快速度?有什么有用的工具可以改善这一点吗?
7 回答
只需要做一次吗?不要浪费太多时间优化,等到它完成后再继续。
需要更频繁地进行吗?然后详细说明您当前使用的工具/技术会有所帮助。
这是我将 800K 记录表从 MS Sql Server 迁移到 MySQL 的方法。
创建查询以表格格式显示数据:
SELECT [PostalCode] + ' ' +
[StateCode] + ' ' +
[Latitude] + ' ' +
[Longitude] + ' ' +
[CityName]
FROM [dbo].[PostalCode]
使用 SQL Server Management Studio 执行查询,并选择将结果输出到文件中(菜单:查询 -> 结果到 -> 结果到文件)
文件名必须是 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 load 语句:
将数据本地 infile 加载'/somefolder/text_file_with_data.txt'
到表 some_table 字段中,这些字段由终止的'\t'
行终止'\n'
或者,如果您将数据文件放在 mysql 服务器上,您可以:
将数据 infile 加载'/somefolder_on_the_mysql_server/text_file_with_data.txt'
到表 some_table 字段中,这些字段由终止的'\t'
行终止'\n'
我不确定要导出 mssql 的语法是什么
您始终可以以 10,000 或 100,000 个为一组导出。
确保 mysql 表最初没有索引;加载完成后添加它们。
通过在 my.ini 文件中使用这样的语句,在开始插入之前确保 MySQL 表存储文件足够大:
innodb_data_file_path=ibdata1:1000M:autoextend
尝试使用 SQL Server 的导入/导出向导生成的 SSIS/DTS 包是否可以将数据从 mssql 中取出并导入 mysql。(使用适当的 OLEDB/ADO 提供程序连接到 MySQL。
周五回家时开始,周末后再回来查看;)
确保没有列上有索引,并删除任何外键(如果您使用 InnoDB 作为表类型)以进行导入。