MySQL转移大量数据技巧

旧方法

  • 使用mysqldump,mysqlpump这两个命令行工具,但都有缺陷

    mysqldump的速度太慢,3千万记录要10个小时
    mysqlpump无法使用指定字段名对数据导入

新方法

  • 参考:Mysql亿级数据大表单表备份

  • 使用SQL语法select * from into outfile导出,再使用load data infile '' into table

    select * from 表名(可以使用多表联合查询) into outfile '绝对路径文件名';
    load data infile '绝对路径文件名' into table 表名 (字段名1,字段名2)

面临问题

  • 导出数据时,提示:The MySQL Server is Running with the --secure-file-priv Option So It Cannot Execute This Statement,这个错误可以通过配置my.conf文件解决,在mysqld段落中添加secure-file-priv配置:

    [mysqld]
    secure-file-priv=可用目录

  • 导入时,如果有不需要的字段,可以用@dump占位跳过不需要的字段,或者使用变量来处理,变量是可以进行计算操作的

sql 复制代码
SET @file_name = 'myfilename'
 ;

 LOAD DATA LOCAL INFILE @file_name  
 INTO TABLE revenue_table  
 FIELDS TERMINATED BY ','   
 LINES TERMINATED BY '\n'  
 ( @total_rev
 , @monthly_rev
 , @day_rev
 )
 SET `total_rev`   = @total_rev
   , `monthly_rev` = @monthly_rev
   , `day_rev`     = @day_rev
   , `from`        = @file_name
 ;

合理的流程

  • 先写个语句,看看能不能从A库插入记录到B库,注意限制行数,这个步骤用于避免字段不对应
sql 复制代码
insert into a (字段1,字段2...) select 字段1,字段2... from b limit 10
  • 导出数据后,在目的数据库拷贝粘贴测试好的字段对照,这样就可以避免非常大的麻烦

补充

  • 导入时,可以先删除索引,导入数据完成后再重建,可以提高处理速度
相关推荐
阳光九叶草LXGZXJ4 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
字节渡客4 小时前
Redis键明明过期了,业务还在读到旧数据
数据库·redis·spring
OnlineProxy7 小时前
亚马逊多账号运营:如何在规避“关联封号”风险的同时实现电商规模化扩张
服务器·数据库·redis
辻弋2018 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
可乐鸡翅yeah_9 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
石头麻辣鱼9 小时前
Bamboo 调度系统 OceanBase 适配实战:存储过程迁移踩过的三个大坑
数据库
龙亘川10 小时前
数智驱动民政升级 精准守护民生保障
大数据·数据库·人工智能
念何架构之路10 小时前
zap扩展生态与总结
java·前端·数据库
晚安日记wanna11 小时前
MySQL 回表为什么这么慢?5 种优化手段逐个拆解
数据库·mysql·性能优化
第七页独白11 小时前
汽车零件厂如何通过 QMS 真正落地 IATF 16949——QMS软件系统:品质检验-内审稽核-8d客诉管理:全星质量管理软件系统
java·前端·数据库