前言:

日常学习和工作中,经常会遇到导数据的需求。比如数据迁移、数据恢复、新建从库等,这些操作可能都会涉及大量数据的导入
有时候导入进度慢,电脑风扇狂转真的很让人崩溃,其实有些小技巧是可以让导入更快速的,本篇文章笔者会谈一谈如何快速的导入数据。

注:本篇文章只讨论如何快速导入由逻辑备份产生的SQL脚本,其他文件形式暂不讨论。

1.尽量减小导入文件大小首先给个建议,导出导入数据尽量使用MySQL自带的命令行工具,不要使用Navicat、workbench等图形化工具。特别是大数据量的时候,用MySQL自带的命令行工具导出和导入比用Navicat等图形化工具要快数倍,而且用Navicat等图形化工具做大数据量的操作时很容易卡死。下面简单介绍下怎么用MySQL自带的命令行工具做导入导出。

导入的SQL脚本内容大多是先建库建表,然后插入数据,其中耗时最长的应该是insert插入数据了。为了减小文件大小,推荐使用扩展插入方法,即多行一起批量insert,类似这样:insert into table_name values (),(),(),…,(); 。使用扩展插入比一条条插入,文件大小要小很多,插入速度要快好几倍。使用mysqldump导出的文件默认是使用批量插入的方法,导出时可使用–skip-extended-insert 参数改为逐条插入。下面以一张一千万的数据表为例,测试下不同方式导出的文件插入时的速度。导入的SQL脚本内容大多是先建库建表,然后插入数据,其中耗时最长的应该是insert插入数据了。为了减小文件大小,推荐使用扩展插入方法,即多行一起批量insert,类似这样:insert into table_name values (),(),(),…,(); 。使用扩展插入比一条条插入,文件大小要小很多,插入速度要快好几倍。使用mysqldump导出的文件默认是使用批量插入的方法,导出时可使用–skip-extended-insert 参数改为逐条插入。下面以一张一千万的数据表为例,测试下不同方式导出的文件插入时的速度。

上图可以看出,使用扩展插入的SQL脚本导入大概需要10分钟左右,而一条条插入的SQL脚本导入时间过长,大概1个小时仍然没有导完,一个2个多G的文本导入一个多小时仍未结束,等不及的笔者就手动取消了 不过还是可以看出多条一起insert比一条条插入数据要节省数倍的时间。

2.尝试修改参数加快导入速度在MySQL中,有一对大名鼎鼎的“双一”参数,即 innodb_flush_log_at_trx_commit 与 sync_binlog 。为了安全性这两个参数默认值为1,为了快速导入脚本,我们可以临时修改下这两个参数,下面简单介绍下这两个参数:

innodb_flush_log_at_trx_commit默认值为1,可设置为0、1、2

如果innodb_flush_log_at_trx_commit设置为0,log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。 如果innodb_flush_log_at_trx_commit设置为1,每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去. 如果innodb_flush_log_at_trx_commit设置为2,每次事务提交时MySQL都会把log buffer的数据写入log file.但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。

sync_binlog默认值为1,可设置为[0,N)

当sync_binlog =0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。 当sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。这两个参数可以在线修改,若想快速导入,可以按照下面步骤来操作:

还有另外一种场景是你的需求是新建从库,或者是不需要产生binlog,这时候导入SQL脚本时可以设置暂时不记录binlog,可以在脚本开头增加 set sql_log_bin=0; 然后再执行导入,这样速度会进一步加快。如果你的MySQL实例没有开启binlog则不需要再执行该语句了。

总结:本篇文章主要介绍快速导入数据的方法,可能还有其他方法快速导入数据,比如load data或者写程序多线程插入。本文中介绍的方法只适合手动导入SQL脚本,下面总结下本文中提到的方法。

1.使用MySQL自带的命令行工具进行导出导入。

2.使用扩展插入方法,一个insert对于多个值。

3.临时修改innodb_flush_log_at_trx_commit和sync_binlog参数。

4.关闭binlog或者临时不记录binlog。

其实还有一些其他方案,比如先不创建索引,插入数据后再执行添加索引操作;或者先将表改为MyISAM或MEMORY引擎,导入完成后再改为InnoDB引擎。不过这两种方法实施起来较为麻烦且不知效果如何。以上方法只是笔者依据个人经验总结得出,可能不太全面,欢迎各位补充哦。

最后,小编分类整理了许多java进阶学习材料和BAT面试给热爱IT行业的你,如果需要资料的请转发此文章后再私聊小编回复【java】就能领取2019年java进阶学习资料和BAT面试题以及《Effective Java》(第3版)电子版书籍。也可以加群:712263501领取海量学习资料进行学习。

MySQL如何快速插入数据相关推荐

  1. mysql如何快速插入数据_如何快速向Mysql插入大量数据?

    本文摘要 本文演示了3分钟如何向MySQL数据库中插入100万条数据的实例. 一.编写测试案例向MySQL数据库中插入百万条数据.测试数据表建表脚本如下:use db_xk; drop table i ...

  2. Mysql数据库快速插入亿级数据

    Mysql数据库快速插入亿级数据 接手一个项目,该项目运行了两三年了.接手的时候,只有一个部署文档和全部代码,再没有其他文档了,也没有其他任何人了解这个项目.好吧,试着深入了解吧.代码在测试环境跑来了 ...

  3. mysql常见问题处理-插入数据error code:1206

    mysql常见问题处理-插入数据error code:1206 mysql  error code:1206 the total number of locks exceeds the lock ta ...

  4. mysql为什么不能插入数据_mysql为啥不能插入数据

    mysql为何不能插入数据? 安装AppServ后首次使用mysql,没有图形界面,在"MySql Command Line Client"的操作如下: ============= ...

  5. mysql数据库表插入数据

    如何向mysql数据表中插入数据? 答:你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 以下为向MySQL数据表插入数据通用的 INSERT INTO ...

  6. php怎么插入数据,利用PHP怎么向MySQL数据库中插入数据

    利用PHP怎么向MySQL数据库中插入数据 发布时间:2020-12-11 16:41:47 来源:亿速云 阅读:89 作者:Leah 这篇文章给大家介绍利用PHP怎么向MySQL数据库中插入数据,内 ...

  7. mysql如何快速插入一千万条数据_如何快速安全的插入千万条数据?

    最近有个需求解析一个订单文件,并且说明文件可达到千万条数据,每条数据大概在20个字段左右,每个字段使用逗号分隔,需要尽量在半小时内入库. 思路 1.估算文件大小 因为告诉文件有千万条,同时每条记录大概 ...

  8. MySQL INSERT:插入数据(添加数据)

    数据库与表创建成功以后,需要向数据库的表中插入数据.在 MySQL 中可以使用 INSERT 语句向数据库已有的表中插入一行或者多行元组数据. 基本语法 INSERT 语句有两种语法形式,分别是 IN ...

  9. MySQL 在控制台插入数据时,中文乱码问题的解决

    当向 MySQL 数据库插入一条带有中文的数据形如  insert into employee values(null,'张三','female','1995-10-08','2015-11-12', ...

最新文章

  1. 一步一步写自己的SqlHelper类库
  2. Android 一个绚丽的loading动效分析与实现!
  3. Printed Exception strings - what do all those flags mean?(转)
  4. 河南大学计算机专业导师,侯彦娥 - 河南大学 - 计算机与信息工程学院
  5. 明显调用的表达式前的括号必须具有指针函数类型_基于指针对象的方法
  6. JMS之企业消息传送
  7. python代码示例-总算知道python入门代码示例
  8. Channel Robot The Modernist 2.0 Mac(现代木琴音源)
  9. Nginx DNS resolver配置实例
  10. 记一次大量数据导入导出SAP系统实验
  11. 酷派无线升级服务器设置在哪里,酷派手机CDA自助升级线刷工具安装教程
  12. 版本控制工具--CVS
  13. 计算机软考网络工程师视频资料,计算机软考网络工程师视频教程
  14. linux开机自动进入安全模式,Linux的安全模式
  15. 把FIL放在哪里最值钱
  16. 十五、分布式相关理论
  17. 交换机短路_交换机环路发现及处理
  18. 苹果蓝牙耳机怎么样?与airpods媲美的无线耳机推荐
  19. mac安装homebrew + git + nodejs
  20. [09]微信之itchat库

热门文章

  1. 激光雷达和V2X技术
  2. 2021年大数据常用语言Scala(二十三):函数式编程 扁平化映射 flatMap
  3. [JavaScript] 探索JS中的函数秘密
  4. C++ set 的使用
  5. Oracle 12c(12.1.0.5) oem agent silent install(静默安装agent)
  6. SSL For Free 申请免费https SSL 凭证
  7. Spring Security 实战干货:自定义异常处理
  8. 把myeclipse中的web项目导入eclipse中不能编程web项目的解决办法
  9. Notification和KVO有什么不同
  10. Linux下getsockopt/setsockopt 函数说明