iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL 亿级数据导入导出及迁移笔记
  • 597
分享到

MySQL 亿级数据导入导出及迁移笔记

MySQL亿级数据导入导出MySQL迁移 2022-05-22 09:05:53 597人浏览 八月长安
摘要

最近Mysql的笔记有点多了,主要是公司oracle比较稳定维护较少,上周被安排做了一个mysql亿级数据的迁移,趁此记录下学习笔记; 数据迁移,工作原理和技术支持数据导出、BI报表之类的相似,差异较大的地方是导入和

最近Mysql笔记有点多了,主要是公司oracle比较稳定维护较少,上周被安排做了一个mysql亿级数据的迁移,趁此记录下学习笔记

数据迁移,工作原理和技术支持数据导出、BI报表之类的相似,差异较大的地方是导入和导出数据量区别,一般报表数据量不会超过几百万,而做数据迁移,如果是互联网企业经常会涉及到千万级、亿级以上的数据量。

导入和导出是两个过程,即使做数据迁移我们也要分开来看,同时,导入/导出方式又分为:

Mysql自带导入/导出方式

各类客户端导入/导出方式

总结下导出:

导出对于字段较少/字段内容较少的数据,通过客户端方式可以采用navicat等工具导出,我这里本次导出三个字段,都是11位数字以内的值,用navicat导出每分钟大约250万数据,

MySQL自带的导出语句:select into outfile语句;


SELECT ... FROM TABLE_A --可以加where条件
INTO OUTFILE "/path/to/file" --导出文件位置
FIELDS TERMINATED BY ',' OPTioNALLY ENCLOSED BY '"' -- 字段分割符和包含符
LINES TERMINATED BY '\n';--换行符

这里fields之前很简单都可看懂,不做说明,讲下fields之后的:

FIELDS TERMINATED BY ',' 代表我字段和字段之间用 逗号 分开 ,如:字段 A 字段 B,导出时候显示格式为:A,B

OPTIONALLY ENCLOSED BY '"' 代表字段内容用双引号包含,导出格式如: "A","B"

LINES TERMINATED BY '\n';每条数据换行区分,导出格式如:

"A","B"

"A1","B1"

当然,字段区分和包含符号可以自行定义,定义为:'    #  都可以

用MySQL自带导出/导入优点是速度极快,缺点是:只能导出文件是在服务器主机所在的本机地址,对于bi之类拿到不数据库主机权限的同事这个方式可能奢望了。不过好在对于字段/内容较少的报表第三方客户端工具导出速度也不算特别慢;

导入:

重点记录导入,导入主要是dba做数据迁移了,方式也分客户端和MySQL自带方式:

这里极度推荐用MySQL导入方式,原因是我之前要迁移1.3亿数据,用navicat客户端导入数据要22小时,耗时太长且不确定太多,本身navicat等工具就会有假死风险的存在,所不建议超过1万以上的数据通过navicat导入;

MySQL自带导入方式:

--官方文档定义如下,注释是我自己理解添加的:


LOAD DATA 、
[LOW_PRIORITY | CONCURRENT]--无人使用数据库再执行/立即执行
[LOCAL]--带这个参数指服务端即不是服务器主机上读取文件,不带这个参数是默认在服务器主机上读取文件
INFILE 'file_name' --读取文件地址、文件名
    [REPLACE | IGNORE]--遇到重复数据是:替换/重复写入,建议使用ignore重复写入
    INTO TABLE tbl_name --导入到那个表
    [PARTITION (partition_name [, partition_name] ...)]--这行参数可以不要,建议用后面的fields
    [CHARACTER SET charset_name]--设定导入内容字符格式,utf-8还是GBK等都可以指定
 
 
    [{FIELDS | COLUMNS}  --fields标识符
        [TERMINATED BY 'string'] --系统字段通过什么符号区分
        [[OPTIONALLY] ENCLOSED BY 'char']--系统字段本身的起始和结束用什么符号区分
        [ESCAPED BY 'char']--转义符,如果是文本文件,在文本字段中有特殊字符如双引号,可通过定义转义符忽略文本文件特殊字符
    ]
    [LINES  --lines标识符
        [STARTING BY 'string'] --定义行开头的字符串,如果行开头没有字符标识,一般可以不写
        [TERMINATED BY 'string']--行结束字符串标识,通过定义字符来区分行与行的数据
    ]
    [IGNORE number {LINES | ROWS}]--忽略文件中前面多少行,一般都不写
--后面都是指定插入到哪些字段
    [(col_name_or_user_var
        [, col_name_or_user_var] ...)]
    [SET col_name={expr | DEFAULT},
        [, col_name={expr | DEFAULT}] ...]

原文上说的用load data能速度极快的导入数据到数据库中,但是如果要使用fields和lines参数,则必须要带一个参数值且fields必须在lines参数之前;

本次我使用的语句是:

load data infile '/data/files/T_CUST_INFO.txt' --默认指定服务器文件夹
ignore into table t_dq_user --允许重复记录插入
fields terminated by ','  --判断字段通过逗号标识来分隔开
lines terminated by '\n'(CustID,DeviceNo,logintype);--通过换行标识来解析成为每一条数据和插入到我指定的字段

插入是很简单的语句,这里我不做具体举例操作,我要分享的是如何提高插入效率;

因为在我第一次用语句插入的时候,从晚上12点开始执行,到第二天11点还没有执行完。所以不是说用了load不配置其他的就一定很快;

本次我插入的数据格式如图:

文本格式如下:

一共有1亿4千万条数据,以文本文档的形式导出的,有4.3G大小;通过ftp软件上传到服务器/data/files文件夹中;

吐槽点1:

由于项目要求三个字段都要有索引,所以我在建表的时候就加了索引,导致耗时遥遥无期;

原因:

索引是要占空间的,如果导入三个字段都要加索引,代表了我要每个字段都写入索引一次,耗时比不加索引多了几倍;

优化方法:

导入前把表的索引去掉留自增id一个,等导入完之后再添加

吐槽点2:

engine的选择:

MySQL的engine对如load写入是不一样的,特别是有master-slave主从备份的机制:

      对MyISAM引擎: 
          (1)对master服务器进行  ‘load' 操作, 
          (2)在master上所操作的load.txt文件,会同步传输到slave上,并在tmp_dir 目录下生成 load.txt文件 
               master服务器插入了多少,就传给slave多少 
          (3)当master上的load操作完成后,传给slave的文件也结束时, 
               即:在slave上生成完整的 load.txt文件 
               此时,slave才开始从 load.txt 读取数据,并将数据插入到本地的表中 

      对innodb引擎: 
          (1)主数据库进行  ‘Load' 操作 
          (2)主数据库操作完成后,才开始向slave传输 load.txt文件, 
               slave接受文件,并在 tmp_dir 目录下生成 load.txt 文件 
               接受并生成完整的load.txt 后,才开始读取该文件,并将数据插入到本地表中 

所以追求极致速度,几十亿数据的,可以考虑选择myisam引擎,MySQL默认应该是innodb;不过本次我并没有更改引擎,本人不推荐更改默认的innodb引擎,毕竟Oracle官方主推引擎,综合性最强,除非有特殊性,不推荐使用myisam。如果用了myisam,注意一下两点:

用了myisam,可以调整几个session值扩大读取内存,提高读取数据,语句如下:


SET SESSION BULK_INSERT_BUFFER_SIZE = 256217728 ;
SET SESSION MYISAM_SORT_BUFFER_SIZE = 256217728 ; 

对于MyISAM引擎,导入前的唯一校验可以先关闭,之后再打开:


SET UNIQUE_CHECKS=0 --关闭

SET UNIQUE_CHECKS=1 --打开

吐槽点3:

虽然MySQL支持本地客户端读取文件,但是由于各种网络原因,在几十几百条数据的情况下没有什么影响,但是到了亿级数据量,即使1毫秒的影响也会放的特别大,所以建议用ftp传到服务器上进行读取

吐槽点4:

经验分享,导入之后看看服务器状态:top 命令看看主机cpu MySQL占用情况,理论上会占用较多cpu,我的第一次耗时贼长的那次,cpu占用10%,这是极度不正常的导入,第二次正常导入cpu占用到了110%,这才是再急速写入的状态;最后1.4亿数据只耗时:7分多中,所以一定要在执行语句后监控下服务器,否则语句不一定在正常执行。

cpu占用:

注意:load和insert最大的区别是:load只操作语法一次,之后就是一直是数据批量插入,而insert 是每一个数据操作一次,也遍历一次字段索引,所以insert本身对于大数据来说是极慢的。

总结:

本次优化我感觉最大最明显的变化是,去除索引后,导入速度极快,索引,重要的事情再说一遍:

导入时候可以先去掉索引,导入完之后再添加。

2020.7.3更新

MySQL导入大数据时一定要注意max最大事物限制,前几个月在做数据迁移时,在MySQL8.0 MGR集群上发生了大事物限制导致实例出问题重启了MySQL,默认配置应该是一亿五千万的事物限制,当时导入的数据比较大也没做参数扩展同时也没做数据切分导入或者限流导入,导致数据库堵塞重启,按照公司要求7*24*365机制,这算是事故了,如果高要求的公司,建议导入的时候注意MySQL本身配置或者导入进行事物提交限制;

到此这篇关于MySQL 亿级数据导入导出及迁移笔记的文章就介绍到这了,更多相关MySQL 亿级数据导入导出及迁移内容请搜索自学编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持自学编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 亿级数据导入导出及迁移笔记

本文链接: https://www.lsjlt.com/news/10415.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL数据备份、还原、数据库迁移以及表的导出和导入
    目录前言一、数据备份1、使用mysqldump命令备份2、直接复制整个数据库目录3、使用mysqlhotcopy工具快速备份二、数据还原1、使用mysql命令还原2、直接复制到数据库目录三、数据库迁移1、相同版本的MyS...
    99+
    2024-04-02
  • Redis数据导入导出以及数据迁移的方法有哪些
    这篇文章主要介绍了Redis数据导入导出以及数据迁移的方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、aof 导入方式。因为这种...
    99+
    2024-04-02
  • MySQL数据备份、还原、数据库迁移及表的导出和导入怎么实现
    本篇内容介绍了“MySQL数据备份、还原、数据库迁移及表的导出和导入怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读...
    99+
    2022-11-30
    mysql
  • 数据迁移不再难:CMS 导入导出实用宝典
    ...
    99+
    2024-04-02
  • CMS数据导入导出完全指南:轻松实现数据迁移
    CMS数据导入导出是CMS数据管理的重要组成部分,可以帮助您在不同系统之间轻松传输数据,实现数据迁移,加强数据的灵活性。无论您是想要将数据从一个CMS迁移到另一个CMS,还是想要将数据从CSV、XML等格式导入到CMS,还是想要将数据从...
    99+
    2024-02-25
    CMS 数据迁移 数据导入 数据导出 常见格式 操作步骤 注意事项
  • MySQL入门--导出和导入数据
    MySQL导出和导入数据 数据库导出可用于将数据库复制到另一个服务器。可以将数据库传输到在另一台主机上运行的服务器,这是最典型的数据导出任务。也可以将数据传输到运行在同一主机上的不同服务器。...
    99+
    2024-04-02
  • AmazonAurora是否支持大规模数据迁移和导入导出操作
    是的,Amazon Aurora 支持大规模数据迁移以及导入导出操作。Aurora 作为 AWS 提供的一种兼容 MySQL 和 P...
    99+
    2024-04-09
    AmazonAurora
  • MySQL数据库导出和导入
    1).MySQLimport的语法介绍:   MySQLimport位于MySQL/bin目录中,是MySQL的一个载入(或者说导入)数据的一个非常有效的工具。这是一个命令行工具。有两个参数以及大量的选项可...
    99+
    2024-04-02
  • mysql导入导出数据库以及函数的过程
    本篇内容主要讲解“mysql导入导出数据库以及函数的过程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql导入导出数据库以及函数的过程”吧!常用导出数据命...
    99+
    2024-04-02
  • mysql数据库怎么导入导出
    这篇文章将为大家详细讲解有关mysql数据库怎么导入导出,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.数据库导入mysql -uroot -p123456 --defau...
    99+
    2023-06-28
  • MySQL如何导入和导出数据
    MySQL可以使用命令行工具或者MySQL客户端来导入和导出数据。以下是使用命令行工具的方法: 导出数据: mysqldump ...
    99+
    2024-03-06
    MySQL
  • MySQL导出导入数据的命令
    本篇内容主要讲解“MySQL导出导入数据的命令”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL导出导入数据的命令”吧!MySQL导出导入数据命令 1.导...
    99+
    2024-04-02
  • Hive数据如何导入导出mysql
    这篇文章给大家分享的是有关Hive数据如何导入导出mysql的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 Hive定位:ETL(数据仓库)工具将数...
    99+
    2024-04-02
  • MySQL运维10-MySQL数据的导入导出
    文章目录 0、概述1、mysqldump导出数据+mysql导入数据1.1、使用mysqldump导出数据1.1.1、使用--tables导出指定表1.1.2、使用--tab选项将表定义文件和数据文件分开导出1.1.3、使用--fi...
    99+
    2023-08-23
    mysql 数据库 运维 sql 服务器
  • 如何处理记账系统的数据导入和导出 - 解释如何导入和导出记账数据
    导入和导出记账数据是许多记账系统中常见的需求。这些操作可以使用户方便地将数据从外部系统导入到记账系统中,或者将记账系统中的数据导出到其他系统中进行进一步分析或保存。本文将介绍如何处理记账系统的数据导入和导出问题,并给出相应的代码示例。一、数...
    99+
    2023-10-21
  • MySQL怎么导入导出大量数据
    本篇内容介绍了“MySQL怎么导入导出大量数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  大家一定使...
    99+
    2024-04-02
  • MySQL数据库导入导出数据的方法
    这篇文章主要介绍“MySQL数据库导入导出数据的方法”,在日常操作中,相信很多人在MySQL数据库导入导出数据的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL数...
    99+
    2024-04-02
  • mysql数据库导入导出的用法
    这篇文章主要讲解了“mysql数据库导入导出的用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql数据库导入导出的用法”吧!mysql 数据库导入导...
    99+
    2024-04-02
  • mysql基本导入导出数据命令
    这篇文章主要讲解了“mysql基本导入导出数据命令”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql基本导入导出数据命令”吧! 1.导出整个   ...
    99+
    2024-04-02
  • mysql 数据库导入导出命令行
    在平常的工作中,我有需要对数据库进行导入导出,一般小型的数据库,我们一直用phpmyadmin,navcate 可视化的操作,但是在linux怎么操作呢,用什么命令行呢 1,数据库的导入操作,使用sourc...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作