MySQL-大批量数据如何快速的数据迁移

MySQL-大批量数据如何快速的数据迁移

背景:最近接触到一个诊所的项目,主要做二次开发,由于甲方没法提供测试数据库(只有生产环境),且二次开发还是基于之前的数据库结构,给了数据库文档和生产库数据地址。由于生产库数据量比较大,我们也没法直接在生产库下二次开发(胆小),我们打算从生产库环境下迁移需要用到表导入自己的开发环境下,迁移的是表结构和表中数据,大概一个表在400M左右(300万条数据),全是InnoDB的存储引擎,而且都带有索引结构。针对如上的迁移数据的需求,我们尝试过直接通过从生产库下导出SQL文件,直接在本地执行SQL,由于数据量太大了,该方法根本不可行,一个表的导入大概需要7、8个小时。这个时候我们也参考了百度到的一些方案,总结了一套比较简单的方法来做数据迁移,下面我们就来介绍一下该方法的详细流程。

流程

 1. 从生产库导出SQL文件,这个耗时不是很长,强烈建议导出的Insert语句为多值形式的,这样在导入的时候效率比较高。

多值写法(推荐):

INSERT INTO `table` VALUES (记录01),(记录02),(记录03);

单值写法(不推荐):

INSERT INTO `table` VALUES (记录01);
INSERT INTO `table` VALUES (记录02);
INSERT INTO `table` VALUES (记录03);

2. 由于我们测试环境也没要求非得多快的查询数据,所以当SQL表结构中存在索引,我们可以考虑将索引删除,要是需要考虑到性能的话,也可以先删除,等导入过后再重新进行索引的创建。

132154_Svx4_2882456.png

3. 因生产环境的表存储引擎都是InnoDB的,可以将InnoDB改为MyISAM,因为在数据量比较大的情况MyISAM的插入速度比Innodb高,这里也是当数据导入完成后再将存储引擎修改为InnoDB。

133031_Hg9F_2882456.png

4. 到这里我们已经修改多值插入、删除索引、改完存储引擎,准备好SQL文件后直接在MySQL中执行会执行不了,会抛出ERROR : (2006, 'MySQL server has gone away')错误。这里是发送的SQL语句太长,以致超过了max_allowed_packet的大小,如果是这种原因,我们只需要重新设置一下max_allowed_packet的大小就可以解决,可针对本身SQL大小设置对应的max_allowed_packet值,这里我设置为600M。

set global max_allowed_packet = 6*1024*1024*100

5. 到这里基本已经完成了大数据的迁移工作,这个时候我们通过如下数据得到结论。

-- ====================统计====================
-- 大小    时间   
-- 1.31M   215s  有索引、InnoDB
-- 2.23M  0.213s  无索引、MyISAM
-- 100万数据  127.823s  无索引、MyISAM

 

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要在MySQL中新增大批量数据,可以通过以下几种方法来实现。 第一种方法是使用INSERT INTO语句。可以将需要插入的数据按照一定的格式(例如CSV格式)保存在一个文本文件中,然后使用LOAD DATA INFILE语句将文本文件中的数据直接导入到MySQL数据库中。这个方法的好处是可以快速插入大量数据,但需要事先将数据保存在文本文件中。 第二种方法是使用INSERT INTO语句的批量插入形式。可以将多个INSERT INTO语句合并为一个INSERT INTO语句,并使用VALUES子句一次性插入多条数据。这种方法比较适用于数据较小的情况,不需要保存为文本文件。 第三种方法是使用INSERT INTO SELECT语句。可以先创建一个临时表,将需要插入的数据保存到临时表中,然后使用INSERT INTO SELECT语句将临时表中的数据插入到目标表中。这种方法比较适用于需要对插入的数据进行一定的处理或筛选的情况。 无论使用哪种方法,对于大批量数据的插入,还可以考虑以下几点优化: 1. 在插入之前,将目标表的索引和约束暂时禁用,以提高插入的速度; 2. 设置合适的事务大小,将多个插入操作批量提交,减少事务的开销; 3. 根据数据的特点,合理选择合适的插入顺序,以提高插入的效率; 4. 使用多线程或并行插入提高并发处理能力。 总之,根据具体的需求和场景,可以选择合适的方法和优化策略来实现MySQL大批量数据插入。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值