线上数据迁移操作-附阿里云DTS数据迁移介绍

 一、项目背景

    系统统一规范整理,将数据集中到本系统中统一对外输出。故涉及到其他地区的用户数据一并迁移到本系统DB中。

    两张表的迁移工作,数据2千万+,从旧表fit in新表,两表不同字段命名不同,含义类似,均以新表字段为准。

 二、前期准备

1、确认迁表数量级,是否全量迁移

2、旧系统、新系统是否有针对该两张表的调用量。若有,确认数据操作最低峰(可通过一段时间内update_time字段确认更新频率进行筛选)。公司有接口调用量监控系统也可进行查看。

3、编写db表描述文档,写清楚怎么迁,编写对应sql脚本。最后提工单,协作DBA操作。

 三、执行数据迁移

通过与DBA同事的沟通,了解到数据迁移他们常采用的几种方式。

方案一、使用sqldump命令,把旧表数据全部导出,导入新库,再修改字段。

脚本mark:

mysqldump -hip  -P3306 -u用户名 -p密码 --default-character-set=utf8 dbname  t_app_driver_task_assign >t_app_driver_task_assign.sql;

sed -i 's/t_app_driver_task_assign/t_app_driver_task_assign_new/g' t_app_driver_task_assign.sql

use dbname

source /路径/文件.sql;

方案二、使用阿里云提供的DTS服务直接同步数据。无需手动执行脚本新建表。DTS会直接将本地数据库迁移至目标实例。

具体详见操作文档

https://help.aliyun.com/document_detail/26132.html?spm=5176.doc26133.6.713.xyhWUi

四、DTS初步认识

1、DTS为阿里云提供的mysql数据库的迁移服务,可实现不停服的情况下平滑的进行数据迁移工作。

2、通过后台管理页创建迁移任务,指定源库、目标库连接信息。并设置迁移属性(全量、表结构迁移)

3、执行任务,等待迁移完成。

具体执行流程大致如上。至于深入原理,有待继续研究。不知同otter是否类似。

五、关于线上数据脚本总结

1、数据库不允许字段为null

2、timestamp类型注意设置default值,不能以0000:00类数据格式存在。

3、旧表数据迁移至新库后,注意检查字段、索引区别。

#删除多余字段

ALTER TABLE TABLENAME DROP COLUMN coupon_code, DROP COLUMN  active_date, DROP COLUMN  coupon_type, DROP COLUMN disable_date, DROP COLUMN service_type;

#添加时间戳

ALTER TABLE TABLENAME ADD update_time timestamp  default CURRENT_TIMESTAMP; 

#删除索引

DELETE INDEX idx_coupon_code ON TABLENAME (coupon_code);

#创建索引

CREATE INDEX idx_uid_serviceid ON TABLENAME (user_id,service_id); 

CREATE INDEX idx_user_id ON TABLENAME (user_id);

#添加索引

CREATE INDEX idx_order_count ON TABLENAME (order_count);



猜你喜欢

转载自blog.csdn.net/daybreak1209/article/details/77369939