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;

注意事项

  • 大表迁移建议在低峰期进行
  • 迁移前后校验数据量和关键字段一致性
  • 考虑建立临时索引加速历史数据查询
  • 对于频繁更新的表,迁移期间建议锁定写入
相关推荐
澈2072 小时前
深入浅出C++滑动窗口算法:原理、实现与实战应用详解
数据结构·c++·算法
ambition202422 小时前
从暴力搜索到理论最优:一道任务调度问题的完整算法演进历程
c语言·数据结构·c++·算法·贪心算法·深度优先
代码旅人ing2 小时前
链表算法刷题指南
数据结构·算法·链表
不爱吃炸鸡柳4 小时前
单链表专题(完整代码版)
数据结构·算法·链表
XDHCOM4 小时前
PostgreSQL 25001: active_sql_transaction 报错原因分析,故障修复步骤详解,远程处理解决方案
数据库·sql·postgresql
Morwit5 小时前
【力扣hot100】 1. 两数之和
数据结构·c++·算法·leetcode·职场和发展
曹牧6 小时前
PL/SQL:xml数据
oracle
田梓燊7 小时前
2026/4/11 leetcode 3741
数据结构·算法·leetcode
架构师老Y7 小时前
013、数据库性能优化:索引、查询与连接池
数据库·python·oracle·性能优化·架构
葳_人生_蕤8 小时前
hot100——栈和队列
数据结构