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格式数据文件也应该要控制大小,防止万一出现数据导入过程中出现因为处理大文件产生的内存不够用的情况发生。
相关推荐
阿乾之铭39 分钟前
Spring Boot中集成Redis与MySQL
spring boot·redis·mysql
大气层煮月亮3 小时前
python调用MySql详细步骤
数据库·mysql
Yawesh_best3 小时前
MySQL(5)【数据类型 —— 字符串类型】
android·mysql·adb
Code哈哈笑3 小时前
【MySQL 保姆级教学】详细讲解视图--(15)
数据库·mysql
x2lab3 小时前
国产化 ARM 环境mysql-mariadb 部署
arm开发·mysql·docker·mariadb
曾经的三心草5 小时前
Mysql之约束与事件
android·数据库·mysql·事件·约束
宋发元5 小时前
如何使用正则表达式验证域名
python·mysql·正则表达式
张某布响丸辣6 小时前
SQL中的时间类型:深入解析与应用
java·数据库·sql·mysql·oracle
路遇晚风6 小时前
力扣=Mysql-3322- 英超积分榜排名 III(中等)
mysql·算法·leetcode·职场和发展
WEIII8 小时前
MySQL 主从复制原理与搭建实践
后端·mysql·docker