MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 6767|回复: 0
打印 上一主题 下一主题

[迁移&移植] MS SQL迁移MySQL详细过程 (4)-迁移数据

[复制链接]
跳转到指定楼层
1#
发表于 2010-10-20 17:07:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在完成数据库表(包括索引,键),存储过程, 以及java工程的重构后, 接下来就是比较大的一块就是数据的迁移了,不过在进行数据的导出导入之前, 对前面的几大步有几个地方要补充一下, 为什么到现在说,也是在迁移到后来时,发现出现的错误,因此而做出的修正.

一个是有类似identity属性的字段, 因为数据尚未导入, 这时不能设为auto_increament, 我是在导数据时发现了,不得已又回头再把所有的auto_increament取消, 然后再次建表和索引, 这次重复, 相当于浪费了一个小时的时间

一个是工程的重构, 在前面的重构中, 我们将原有的dao类分离成代理和实现类,实现类有MS和MySQL两批,但是,MS和MySQL的所有DAO实现类并没有implements相同的接口, 这导致在dao代理类中, 无法方便的在两种数据库之间进行切换, 因此, 首先需要建立接口层, dao代理类只调用接口,而接口实现又由一个工厂类创建. 为了快速,我新建一个package,名为it,把所有的dao代理类copy一份进去, 并把这些代理类全部修改成接口. 然后再让MS DAO和MySQL DAO分别实现对应的接口, 最后在原来的DAO代理类中实现由工厂调用,把MS和MySQL的切换开关放在这个工厂中. 这样,代理类就跟MS,或者MySQL DAO完全解藕, 并且通过工厂,可以方便的进行切换. 还有一点,就是要记得把连接池的getConnection也放进工厂中, 毕竟, 连得的是不同的数据库!

现在来说说数据迁移!

数据迁移, 首先,就是选择导出格式。我们知道, MS SQL导出向导支持导出为.csv, access,excel,dbf等, 这几种格式都能够被EMS MySQL 支持.不过,经过我的试验,其实兼容得最好的仍然时csv, 我试过excel, 导入后中文为乱码, 不知道是不是我还没有把MySQL的4种字符集和编码都设为GB2312的原因. 这里说一下,如果要支持中文,必须将它们都设为GB2312, 否则,即使是csv数据,也不保证不会出错.

选择了csv,然后开始生成csv,不过,csv只能一个一个导出和导入, 有点繁琐, 当然也有好处, 就是通过这样的单个导入,可以实时发现问题(对每一条数据发生的错误, EMS MySQL都会记录在error.log), 进而马上解决, 如果没有问题, 由于EMS MySQL可以在导完后即时打开该表数据, 这样还顺便验证了导入的数据是否正确(中文是否乱码, 时间类型的是否错误,记录数是否与原有MS相同). 要么改错,要么验证,导完后,所有的数据心都保证了正确性和完整性!

我大部分数据表导出,都选择了csv格式! 但是, 这时碰到大数据量的问题了, 我有几个表有将近上百万行数据, 它们如果用EMS MySQL,何时能完成? (EMS MySQL的速度: 我其中一个表,15万行, 大概用一个小时). 没办法, 在网上查了资料, 提到的解决方式要么是用source命令, 要么是使用mysql front(与EMS类似的一个my sql维护工具), 最后,我使用了了bigdump(一个专门用于导入大数据量的php工具), 我试过,一个有1000行的数据,用了不到1秒, 这个速度,很令人满意了!

使用了csv格式和bigdump, 这样就可以完全将数据迁移到MySQL了, 我的这个项目,数据格式还不算很复杂(也有text大字段), 不过,整个数据迁移还正常,没有发现无法迁移的问题(前面在单个迁移时,碰到的主要问题就是编码,后来设置mysql为gb2312后即可).

数据迁移虽然不是最复杂,但却是最需要小心的一步,  因为,数据,是最重要的!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享淘帖 顶 踩
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-5-5 15:06 , Processed in 0.063835 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表