mysql 最近5分钟_体验一下5分钟快速迁移mysql近亿数据量大表的速度!!!

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:24   1518   0

案例场景:

需求将 源库 A服务器mysql实例下日志表t_service_log 迁移到 目标库 B 服务器 mysql实例下

t_server_log

f652173725f8bffaffab06fbc809e5a5.png

数据量:

9e8854e809d46a8333ed4ccd8a22dde3.png

详细操作步骤:

1、在服务器B 目标库下 创建表结构 并执行 ALTER TABLE t_service_log DISCARD TABLESPACE;

此时表 t_service_log 只剩下 frm 文件

2. 源库,开启 2 个会话

a) session1:执行 FLUSH TABLES t_service_log FOR EXPORT ,该命令会对 t_service_log 加锁,将 t_service_log 的脏数据从 buffer

pool 同步到表文件,同时新生成 1 个文件 t_service_log .cfg ,该文件存储了表的数据字典信息

b) session2:保持 session1 打开状态,此时将 t_service_log.cfg 和 t_service_log.ibd 远程传输到目标库的数据目录,

如果目标库是主从结构,需要分别传输到主从两个实例,传输完毕后修改属主为 mysql:mysql

内网传输可采用 nc 隧道模式 ,30G 传输完成大约在3分钟左右完成

c490c94c6252e990c55862b3b0a33110.png

c) 源库,session1 执行 unlock tables ,解锁表 t_service_log ,此时 t_service_log 恢复正常读写

d) 目标库,执行 ALTER TABLE t_service_log IMPORT TABLESPACE ,如果是主从结构,只需要在主库执行即可

f6297b9a761314ba60635cfdcc3b8f87.png

e) 此时目标库 t_service_log 已可用,迁移完成

88191144c3f97c82cd7f1ce42fd85848.png

总结:

此次利用 mysql 可传输复制表空间方案,复制大表 t_service_log 到目录库 整个过程耗时在 5分钟左右 ,主要耗时在 传输 ibd 文件

耗时3分钟左右与 目标库 "ALTER TABLE t_service_log IMPORT TABLESPACE " 耗时 2分钟左右;对比dump+source sql 方案在时间成本上有大利

缺点:在源库上需要锁表 传输ibd文件的时间;所以对于业务低峰期或日志表可考虑使用,值适用innodb存储引擎,切源库与目标库版本及表结构一样

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP