mysql迁移指定表历史数据方案

方案一:使用mysqldump导出导入

通过MySQL自带的mysqldump工具导出指定表的历史数据,再导入到目标数据库。适合数据量中等且允许停机迁移的场景。

sql 复制代码
# 导出指定表结构和数据(按条件筛选历史数据)
mysqldump -u username -p dbname tablename --where="create_time<'2023-01-01'" > history_data.sql

# 导入到目标数据库
mysql -u username -p target_db < history_data.sql

方案二:ETL工具同步

使用Kettle、Talend等ETL工具建立数据管道,可实现定时增量同步。适合需要持续同步历史数据的场景。

  • 配置源数据库和目标数据库连接
  • 编写转换流程:添加输入表(带时间条件筛选)、字段映射、输出表
  • 设置定时任务或立即执行

方案三:程序分批迁移

编写脚本分批次查询和插入数据,避免大事务导致数据库负载过高。适合大数据量迁移。

python 复制代码
import pymysql
batch_size = 5000

src_conn = pymysql.connect(source_db_config)
dst_conn = pymysql.connect(target_db_config)

while True:
    with src_conn.cursor() as cursor:
        cursor.execute(f"SELECT * FROM orders WHERE order_date<'2022-01-01' LIMIT {batch_size}")
        batch = cursor.fetchall()
        if not batch: break
        
    with dst_conn.cursor() as cursor:
        cursor.executemany("INSERT INTO orders_archive VALUES(%s,%s,...)", batch)
    dst_conn.commit()

方案四:主从复制过滤

配置MySQL主从复制时设置复制过滤器,仅同步特定表的历史数据。适合实时性要求高的场景。

sql 复制代码
# 在my.cnf中配置
replicate-wild-do-table=dbname.tablename_2020%
replicate-wild-do-table=dbname.tablename_2021%

方案五:表空间传输

对于InnoDB引擎,可直接导出表空间文件快速迁移。要求MySQL版本5.6+且目标表结构已存在。

sql 复制代码
-- 源库执行
FLUSH TABLES tablename FOR EXPORT;
-- 拷贝.ibd和.cfg文件到目标服务器
-- 目标库执行
ALTER TABLE tablename IMPORT TABLESPACE;

注意事项

  • 大表迁移建议在低峰期进行
  • 迁移前后校验数据量和关键字段一致性
  • 考虑建立临时索引加速历史数据查询
  • 对于频繁更新的表,迁移期间建议锁定写入
相关推荐
探序基因14 小时前
单细胞Seurat数据结构修改分群信息
数据结构
六义义14 小时前
java基础十二
java·数据结构·算法
张张努力变强17 小时前
C++ 类和对象(四):const成员函数、取地址运算符重载全精讲
开发语言·数据结构·c++·后端
zhangxl-jc17 小时前
Doris 窗口函数之 LEAD 最佳实践
大数据·sql·数据分析
陌上丨18 小时前
假如不小心把数据库删了,请问应该怎么把数据恢复出来?
数据库·oracle
Yan.9719 小时前
SQLI靶场
sql
历程里程碑19 小时前
双指针 --- 接雨水
java·数据结构·python·算法·leetcode·职场和发展·tornado
Snow_day.19 小时前
【补题记录】AT441,442
数据结构·算法·贪心算法·动态规划·图论
DLGXY19 小时前
数据结构——栈(十六)
数据结构
NineData20 小时前
NineData 新增支持 Azure SQL Database > PolarDB PostgreSQL
数据库·sql·azure·数据库管理工具·ninedata·数据库迁移·数据库迁移工具