当前位置: 代码网 > it编程>数据库>Mysql > mysql迁移指定表历史数据的多种方案

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

2026年01月08日 Mysql 我要评论
方案一:使用mysqldump导出导入通过mysql自带的mysqldump工具导出指定表的历史数据,再导入到目标数据库。适合数据量中等且允许停机迁移的场景。# 导出指定表结构和数据(按条件筛选历史数

方案一:使用mysqldump导出导入

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

# 导出指定表结构和数据(按条件筛选历史数据)
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工具建立数据管道,可实现定时增量同步。适合需要持续同步历史数据的场景。

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

方案三:程序分批迁移

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

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主从复制时设置复制过滤器,仅同步特定表的历史数据。适合实时性要求高的场景。

# 在my.cnf中配置
replicate-wild-do-table=dbname.tablename_2020%
replicate-wild-do-table=dbname.tablename_2021%

方案五:表空间传输

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

-- 源库执行
flush tables tablename for export;
-- 拷贝.ibd和.cfg文件到目标服务器
-- 目标库执行
alter table tablename import tablespace;

注意事项

  • 大表迁移建议在低峰期进行
  • 迁移前后校验数据量和关键字段一致性
  • 考虑建立临时索引加速历史数据查询
  • 对于频繁更新的表,迁移期间建议锁定写入

到此这篇关于mysql迁移指定表历史数据的多种方案的文章就介绍到这了,更多相关mysql迁移指定表内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com