最近着手设计手机充值和流量充值两个项目的数据库迁移,是由db2迁移至mysql。现在将方案记录下来。
整个迁移方案分成了两大块。系统切换、生产迁移
一.系统切换
包括搭建mysql数据库,修改代码。
创建数据库:可以在db2 ddl 的基础上进行修改。这块需要注意db2和mysql数据类型的对应关系。
修改代码:db2 的sql里面有会有一些mysql 的关键字,如key、type 等,需要用``,另外db2还有一种特殊的sql即select * from new table (insert into table....) 或者select * from new table (update table set....),将新插入或更新后的记录返回出来,mysql 没有改功能,还有db2 里面有with ur,表示不加行锁。在mysql 里面去掉即可。
二.数据迁移
我们这里有两个系统,表总共有200+张,需要全部迁移,原则是尽量减少停止交易的时间。
归档:
归档数据分两种类型,1.全部归档,2.部分归档
1.对于一些请求历史、日志、发送记录等无关交易、仅用来做日后问题查询的数据可以全部归档
优点:速度快,秒级
2.对于一些数据量大的,比如订单、流水等,按照业务需要保留一定时间的数据。有两种方案供参考,比如保留三个月的数据。
2.1 动三个月前的数据,将三个月之前的数据导出,然后再进行delete。
优点:不对交易有任何影响。 缺点:数据量大,时间长
2.2 动三个月内的数据,将三个月之内的数据导出,然后再进行delete。
优点:数据量小,时间快。 缺点:短时间内查不出来以前数据。
数据迁移:将数据分成两部分,交易数据和基础数据,交易数据包括订单、流水等,基础数据包括用户、账户、权限等。分开的目的是保证重要数据的一致性。
比如25号生产切换,24号开始迁移。
24号:迁移20号之前的数据,迁移完毕关闭用户对这些数据的写权限
25号:停止交易。迁移所有基础数据+5天内的交易数据。
至于迁移工具,可以采用文件导出导入的形式,也可以找第三方工具如etl。
以上就是迁移方案,如有问题,欢迎拍砖。
补充一点:
今天发现一个问题,归档后,如果做历史数据查询,特别是涉及到多表、联表查询的时候,在归档的时候需要注意。
网友评论