mysql大量数据导入记要

需求描述

在工作中经历过两个项目要对数据库中的数据做大量数据的导出,转换和导入的工作。对于不涉及数据格式转换的导出导入工作,一般都是数据的备份。这个工作一般都由DBA搞定。对于要进行格式转换的工作,一般还是要由程序员参与。除非DBA深入参与到项目中,非常了解业务和数据格式。

最近的一次数据导入工作是要从SQL Server中导出1亿多条纪录,经过解析和转换后导入到mysql数据库中。

处理方案

直观的做法

写一个脚本。从sql server中读取数据,转换后往mysql中写入。这个方法的优点是简单直观。缺点是慢! 对于大量的数据来说慢到不能忍!

较快的办法

  1. 从sql server中读取数据,转换后按mysql dump的格式写入本地文件中。
  2. 所有数据转换完成后将数据copy到mysql所在的服务器上。
  3. 一次性导入(利用mysql的load local file 指令)。
    该方案的优点是速度比较快。缺点是要占用相当大的磁盘空间。在数据往mysql导入的过程中会有较高的IO使用率。

更快的方法

  1. 将数据从sql server中dump到文本文件。
  2. 转换脚本直接读取文件做转换,按mysql dump的格式写入本地文件中。
  3. 所有数据转换完成后将数据copy到mysql所在的服务器上。
  4. 一次性导入(利用mysql的load local file 指令)。
    该方案的优点是速度更快。缺点是要占相当大的磁盘空间,并且步骤相对更多更复杂。在数据往mysql导入的过程中会有较高的IO使用率。
    另外,在读取从sql server dump出来的数据文件做转换的环节。要注意数据文件的大小。比如这次导入任务,sql server dump出来的数据有12G。运行转换任务的服务器的内存只8G。一次性读取文件并转换会耗尽服务器的内存。这直接导致服务器无法工作只能重启OS。应用这种情况,可以使用mmap分段处理文件。也可以对文件先做切分。把大文件切成小文件后,再分批处理。
    同样的道理,产生的mysql dump格式数据文件也应该要控制大小,防止万一出现数据导入过程中出现因为处理大文件产生的内存不够用的情况发生。
相关推荐
一只fish1 小时前
优化器架构对比:Oracle vs PostgreSQL vs MySQL
mysql·postgresql·oracle
buyue__6 小时前
Python实现连接MySQL数据库并执行目录下的所有SQL文件,遇到错误时终止执行。
python·mysql
snow@li7 小时前
MySQL:库表设计完整规范与实战方案
数据库·mysql
Shawn Dev9 小时前
MySQL Binlog 数据误删除恢复完全指南
数据库·mysql·elasticsearch
陈卿诺语10 小时前
MySQL错误-this is incompatible with sql_mode=only_full_group_by完美解决方案
sql·mysql·adb
南城以南溫暖如初14710 小时前
社区健身小程序开发流程详解:技术选型与实施经验分享
java·经验分享·spring boot·mysql·vue·apache
凤舞飘伶11 小时前
导出数据库表结构excel
python·mysql
️学习的小王12 小时前
MySQL常用函数知识点总结
数据库·mysql·oracle
万亿少女的梦16812 小时前
基于Spring Boot、Java与MySQL的同城宠物服务系统设计与实现
java·spring boot·mysql·系统设计·协同过滤
万亿少女的梦16812 小时前
基于Spring Boot、Vue与MySQL的私人健身教练预约管理系统设计
java·spring boot·mysql·vue·预约管理