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格式数据文件也应该要控制大小,防止万一出现数据导入过程中出现因为处理大文件产生的内存不够用的情况发生。
相关推荐
潘潘潘潘潘潘潘潘潘潘潘潘13 分钟前
【MySQL】从零开始学习MySQL:基础与安装指南
linux·运维·服务器·数据库·学习·mysql
寻星探路20 分钟前
数据库造神计划第八天---增删改查(CRUD)(4)
数据库·sql·mysql
Java烘焙师23 分钟前
架构师必备:缓存更新模式总结
mysql·缓存
马走日mazouri24 分钟前
深入理解MySQL主从架构中的Seconds_Behind_Master指标
数据库·分布式·mysql·系统架构·数据库架构
秋难降12 小时前
零基础学习SQL(十一):SQL 索引结构|从 B+Tree 到 Hash,面试常问的 “为啥选 B+Tree” 有答案了
数据库·后端·mysql
ljh57464911913 小时前
mysql 必须在逗号分隔字符串和JSON字段之间二选一,怎么选
数据库·mysql·json
gamers14 小时前
rock linux 9 安装mysql 5.7.44
linux·mysql·adb
努力的小郑14 小时前
MySQL索引(四):深入剖析索引失效的原因与优化方案
后端·mysql·性能优化
江团1io016 小时前
深入解析MVCC:多版本并发控制的原理与实现
java·经验分享·mysql
-Xie-16 小时前
Mysql杂志(十四)——Mysql逻辑架构
数据库·mysql·架构