记一次MSSQL到MySQL大数据迁移过程

工作中遇到一个需求 要将MSSQL数据库中共计12张表的数据大概1000W行数据迁移到MySQL数据库中,去年另一个同事负责这件事情,他采用的方法是先将MSSQL数据库里的数据生成同MySQL数据库表结构一致的12张表,然后用我提供的一个delphi写的一个工具来进行迁移。工具用的UniDAC的TCRBatchMove控件批量移动数据控件,开始测试了小批量数据效果还不错。最后在迁移数据汇总时程序运行几个小时也没完,还出现卡死的情况。后来采用生成SQL语句的方式,生成出来的SQL有2G多,在查询工具里执行,也直接执行死了。没办法,把SQL分段执行吧。。。最后折腾1个星期左右才把数据导进去。
今年让我接手这件事情,对于去年这痛苦的经历真是往事不堪回首。这次查阅各种资料,最终解决了问题,处理数据加修正不规则数据用时20分钟,导出导入10分钟总计用时半个小时。不算完美,还是很满意了。
下面就讲讲这次解决问题的过程
1、开始想试试原来的方式,因为原来的程序是delphi7写的换成xe4,并生成64位exe(保证内存不会溢出),效果没有,速度太慢。修改批量迁移控件MovedCount 5000, 10000 DMDst.CRBatchMove.MovedCount := 5000依然没有效果,发现MovedCount无论怎么修改或者设置为默认0数据插入速度均保持在1000条左右。也许是我还没搞明白,也可能性能极限就这样了吧。行不通 Pass
2、查阅资料发现mysql有load data可以快速导入数据 MSSQL有sqlcmd可以快速导出数据测试发现几十W数据的表都是秒级导入导出。
MSSQL导出
MySQL导入
决定用这种方案试试,在进一步测试所有数据过程中发现数据格式问题 在MSSQL导出过程中遇到 ,英文逗号, '单引号 ,\正斜杠, /反斜杠等特殊字符时均要报错,我导出的数据以逗号做为分隔符,当字段数据中今有回车导出文本时会当做一条新记录,导入时便会报字段不匹配。回车符也要处理掉,因为我们有一个字段数据本身就要求要有回车符这个问题困扰我很长时间,开始忽略掉这个问题留到最后解决,一直没找到解决办法,最后换了一个思路先把在MSSQL中将回车用<br>字符替换,导入MySQL后再把<br>替换成回车字符。也算是曲线求国了。
3、这一过程测试通过后就要将所有操作集成在一个程序里了,这最后要反复使用的功能用在cmd里敲命令,显示是不现实的了。在写成程序的过程中又遇到各种问题,一度让我回到重新尝试第1种解决方案。其实这过程中主要是遇到程序里MySQL读取txt路径的问题。
 
下面是整个实现过程
配置SQL
 1 -- 允许配置高级选项
 2 EXEC sp_configure 'show advanced options', 1
 3 GO
 4 -- 重新配置
 5 RECONFIGURE
 6 GO
 7 -- 启用xp_cmdshell
 8 EXEC sp_configure 'xp_cmdshell', 1
 9 GO
10 --重新配置
11 RECONFIGURE
12 GO
13  
14 --执行想要的xp_cmdshell语句
15 Exec xp_cmdshell 'query user'
16 GO

......处理数据表中特殊字符 代码略......

下面两句是关键代码 实现导出和导入,实际项目是10几张表循环执行这一操作

sqlcmd -d DBNAME -E -o "my.ini下的datadir设置的路径\xx.txt" -f 65001 -Q "SELECT * FROM db..xx" -W -w 8000 -s, -h-1

load data infile 'xx.txt' replace into table xx character set utf8 fields terminated by ',' enclosed by '"' lines terminated by '\n' (a, b);

 
 1 --用完后,要记得将xp_cmdshell禁用(出于安全考虑)
 2 -- 允许配置高级选项
 3 EXEC sp_configure 'show advanced options', 1
 4 GO
 5 -- 重新配置
 6 RECONFIGURE
 7 GO
 8 -- 禁用xp_cmdshell
 9 EXEC sp_configure 'xp_cmdshell', 0
10 GO
11 --重新配置
12 RECONFIGURE
13 GO
 MySQL my.ini配置如下,主要注意红色部分
注意:sqlcmd里面的输出路径为my.in配置里的datadir路径,这样MySQL的load data就不需要指定路径会自动找到文件。

猜你喜欢

转载自www.cnblogs.com/DevMuYuer/p/10194871.html
今日推荐