线上mysql大表数据迁移到备库

本文介绍如何通过批处理方式,从线上未分表的大表中迁移半年前的历史数据到备份库,以提升查询性能。涉及数据筛选、多数据源操作、异常处理和线程并行处理,以加速历史数据备份过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线上mysql大表数据迁移到备库

由于项目中线上有很多表(古老,未作分表)数据量比较大,页面接口查询时经常超时,已经在索引方面不能提高查询速度了,因此考虑将部分数据(半年之前)迁移到备份库中,备份的表结构和数据和原始表相同,这部分数据基本上已经不使用了,所以只做了数据迁移。

迁移方案:跑批处理
1.从原始表中查出需要备份的数据

返回一个List<map>
 <select id="queryByxxx"  resultType="java.util.HashMap">
    select *
    from ${tableName}
    where ${tableColumnName} = #{tableColumnValue}
  </select>

2.将数据插入到备份库表中
遍历上面查出来的List
使用备份库数据源

 <insert id="insertData" >
        insert into
        ${tableName}
        (
        <foreach collection="data" item="value" index="key" separator=",">
            ${key}
        </foreach>
        )
        values (
        <foreach collection="data" item="value" index="key" separator=",">
            #{value}
        </foreach>
        )
    </insert>
其中的 collection="data" 中的data就是上面list中的元素

3.删除原始表中的数据

<delete id="deleteByxxx" >
    delete from ${tableName} where  ${tableColumnName} = #{tableColumnValue}
  </delete>

上述只是简单的实现流程,其中涉及多数据源配置,也要从本身业务逻辑做异常处理,比如异常中断可继续备份。使用线程池多线程并且可以根据时间段分段处理历史数据,加快处理速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值