mysql数据迁移

Posted MAX_VALUE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql数据迁移相关的知识,希望对你有一定的参考价值。

背景:随着时间的推移,交易系统中的订单表越来越大,目前达到500w+数据。为了防止数据量过大导致的查询性能问题,现将订单表进行拆分,分为实时库和历史库。实时库保留近6个月的数据,用于退款业务需求,其余订单数据全部迁移到历史库中。

方式一:复制表(结构与数据)

可通过navicat右键选择复制表(结构与数据)进行全量同步数据。但是该操作会锁表,导致其他事务的新增、修改、删除操作都被挂起,慎用!

方式二:dbf文件方式导入导出数据

可通过navicat菜单进行dbf格式导出。此操作数据完整性最高;导出文件大(500w数据可达到30G);不锁表(导出过程中可新增、修改、删除)。
测试:500w数据
导出时间:30min+
导入时间:字段映射存在问题(导入失败)

方式三:txt文件方式

可通过navicat菜单进行txt格式导出。数据完整性中等;导出文件不大(500w数据不到1G);不锁表。
测试:500w数据
导出时间:8min
导入时间:约2h

方式四:导入导出命令(推荐)

注意:当前用于需要有该导入导出命令权限,。

导出时不锁T_UNION_ORDER

select * from T_UNION_ORDER into outfile 'b.txt';  

导入时锁T_UNION_ORDER_copy1表

load data infile 'b.txt' into table T_UNION_ORDER_copy1;

测试:500w数据
导出时间:1min
导入时间:8min

方式五:程序迁移(推荐)

先插入数据到新表中,再删除原表数据,两组操作作为一个事务来处理。可参考以下步骤执行:
步骤一:定时任务开启时间:2点~3点 1小时内每10s触发一次同步任务。

步骤二:一个批次的数据量为300条,1h同步10.8w条数据。

insert_time 条件值取第前180天。insert_time没有创建索引走的全表扫描,sql语句耗时时间和符合条件的记录条数占全量数据的百分比相关,占比越大耗时越短,占比越小耗时越长。因此程序上线初期一次同步任务的执行时间较短,后期随着需要同步的数据越来越少,sql执行的时间也越来越长。
select * from T_UNION_ORDER where insert_time < '2023-01-01 00:00:00' limit 300;

批量进行数据插入,一个批次的数据量要适中,太大会导致字符串长度超长报错,太小频繁访问数据库导致可能的性能问题。
insert into T_UNION_ORDER_HISTORY ('') values (''),(''),('');

批量删除,删除操作会加锁。虽然是行锁,如果in的数据量太大可能会造成索引失效,行锁升级为表锁。
delete from T_UNION_ORDER where order_no in ('');

步骤三:增加手工触发订单数据同步机制。

MYSQL 到MYSQL 分表数据迁移

一 背景

  通常情况下,还是做业务需求为主,很少会遇到迁移数据的机会,之前做的迁移《MYSQL数据库 单表亿级数据不停机迁移_bohu83的博客-CSDN博客_mysql亿级数据迁移

业务场景是阿里云 的数据库,迁移用了dts.在线不停机迁移,还是自己去做。

二  技术选型

如果运行停止服务,dba 可以使用MYSQL官方的mysqldump 或者Percona的备份工具进行迁移。

mysqldump 对于大表迁移速度很慢,不支持分表。所以只能考虑其他办法。

datax: 介绍

阿里云开源离线同步工具DataX3.0介绍-阿里云开发者社区

datax 也可以实现分表,本身没有实践,因为这是Python 的。我对这个不熟悉。所以本次 没采用。

otter:

GitHub - alibaba/otter: 阿里巴巴分布式数据库同步系统(解决中美异地机房)

阿里开源数据迁移工具(背景解决中美异地机房同步)。

相对 复杂。

yugong

GitHub - alibaba/yugong: 阿里巴巴去Oracle数据迁移同步工具(全量+增量,目标支持MySQL/DRDS)

阿里开源oracle数据迁移工具。java 版本,开源版本不支持MYSQL,但是技术上有改动基础

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=96m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
2022-02-28 15:57:45.739 [main] INFO  com.taobao.yugong.YuGongLauncher - ## start the YuGong.
2022-02-28 15:57:45.816 [main] INFO  com.taobao.yugong.controller.YuGongController - check source database connection ...
2022-02-28 15:57:45.865 [main] INFO  com.taobao.yugong.controller.YuGongController - check source database is ok
2022-02-28 15:57:45.865 [main] INFO  com.taobao.yugong.controller.YuGongController - check target database connection ...
2022-02-28 15:57:45.866 [main] INFO  com.taobao.yugong.controller.YuGongController - check target database is ok
2022-02-28 15:57:45.867 [main] INFO  com.taobao.yugong.controller.YuGongController - check source tables read privileges ...
2022-02-28 15:57:45.934 [main] INFO  com.alibaba.druid.pool.DruidDataSource - dataSource-1 inited
2022-02-28 15:57:46.358 [main] INFO  com.alibaba.druid.pool.DruidDataSource - dataSource-2 inited
2022-02-28 15:57:46.513 [main] INFO  com.taobao.yugong.controller.YuGongController - check source tables is ok.
2022-02-28 15:57:46.524 [main] ERROR com.taobao.yugong.YuGongLauncher - ## Something goes wrong when starting up the YuGong:
com.taobao.yugong.exception.YuGongException: unsupport MYSQL
    at com.taobao.yugong.controller.YuGongController.chooseExtractor(YuGongController.java:339)
    at com.taobao.yugong.controller.YuGongController.start(YuGongController.java:168)
    at com.taobao.yugong.YuGongLauncher.main(YuGongLauncher.java:32)

 

yugong开源版本目的:从oracle到MYSQL迁移。支持异构结构。(背景是阿里的去IOE)可能处于商业考虑,不支持MYSQL到MYSQL迁移.

三  效果

考虑到它是Java框架,框架比较完善,只是缺了MYSQL的抽取,可以参照Oracle的去改。

效果,在配置20个线程读原表,单次读取2000情况下,往16个新库分表迁移。tps在50000以上。

表里有单主键无text大字段。

 速度很快,3300W 数据10分钟就跑完了。

这只是全量数据迁移 ,还有很多细节要考虑,比如迁移 期间增量数据处理,一对多的数据比对不能很好支持。

 

以上是关于mysql数据迁移的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL 到MYSQL 分表数据迁移

MySQL 数据文件迁移至新硬盘

数据库迁移 - MySQL 迁移到 HBase

mysql迁移之巨大数据量快速迁移方案

oracle数据迁移到mysql中去,数据类型不一致

MySql到MySql数据迁移