小微数据量数据迁移方案

1. 将历史数据表和目标数据表转移到同一库

如果历史数据库和目标数据库是同一数据库,如都是mysql,可以使用一些工具软件如sqlyog等进行转移,或者导入导出即可;
如果历史数据库和目标数据库是不同的数据库,可以使用ETL工具kettle进行转移,kettle作为ETL工具功能非常强大,复杂的数据迁移可以全部在kettle中进行,由于我对kettle不够熟悉,这里仅仅使用到了它跨数据库进行数据复制的功能,数据的整理工作都是通过sql脚本实现的。

2. 清理多余字段(如全null字段,固定值字段)

ALTER TABLE Person
DROP COLUMN Birthday

3. 清理多余记录(如status=0)

4. 备份目标表

create table my_table_copy like my_table;
insert into my_table_copy select * from my_table;

5. 对应复制到目标表,顺便填写默认值

truncate table target_table;
INSERT INTO target_table (target_field)
select history_field from history_table;

如果存在类似“类型”的键值的列,新的key值与之前不同,迁移的时候存在一个对应关系,如果这个类型只有几种,可以迁移过来后update即可,如果较多,可以建立一张临时的对应关系表,在select的时候进行转换即可。

6. 做必要的进一步处理(如update某些特殊字段)

特殊字段如:

  • 如前台有每页10条的新闻图片,目前仅准备了10张图片,需要给每条新闻设置一个缩略图,在前台看起来每页没有重复图片
set @rownum=-1;
update news set thumb = CONCAT('/images/news_',(@rownum:=(@rownum+1)%10)+1,'.jpg');

这个迁移过程虽然简单,但实际操作也挺麻烦的,各种字段对应感觉非常乱套,本来想写篇博客梳理出一个清晰可操作性的步骤方案来,但是又好像没什么可总结的了,无非就是把数据复制过来整理整理而已,那就这样吧。

你可能感兴趣的:(数据库)