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格式数据文件也应该要控制大小,防止万一出现数据导入过程中出现因为处理大文件产生的内存不够用的情况发生。
相关推荐
夜雪一千16 分钟前
MySQL 数据字典如何获得
数据库·mysql
honsor23 分钟前
用 Grafana 做温湿度异常检测:从阈值告警到趋势预测
数据库·mysql·php
lusklusklusk38 分钟前
SQL Server 为什么普通 SELECT 会阻塞 UPDATE?——行级 S 锁到表级 S 锁的锁升级原理与实验验证
数据库·mysql·oracle
程序员塔塔喵1 小时前
【MySQL篇|第十而二篇】深层次讲解MVCC机制
mysql·mvcc
一技安身2 小时前
MySQL 8.4.13 LTS 通用二进制包(Linux免安装版)完整教程
linux·mysql·adb
代码派2 小时前
业务不停机迁移 MySQL 到 TiDB,NineData 数据增量同步实操演示
数据库·mysql·tidb·ninedata·无停机迁移·增量迁移·全量迁移
我不会起名字3222 小时前
MySQL 8.0 迁移后 SQL 变慢:执行计划里 3 类被忽略的成本差异
mysql·explain·执行计划·索引下推·成本模型
Decay__9 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
Decay__15 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
后台模板学习1 天前
MongoDB 与 MySQL 在 IM 即时聊天场景中该
数据库·mysql·mongodb