iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL如何快速导入数据
  • 596
分享到

MySQL如何快速导入数据

MySQL导入数据MySQL快速导入数据 2022-05-15 21:05:43 596人浏览 泡泡鱼
摘要

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

前言:

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

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

1.尽量减小导入文件大小

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


# 导出整个实例
mysqldump -uroot -pxxxxxx --all-databases > all_database.sql

# 导出指定库
mysqldump -uroot -pxxxxxx --databases testdb > testdb.sql

# 导出指定表
mysqldump -uroot -pxxxxxx testdb test_tb > test_tb.sql

# 导入指定SQL文件 (指定导入testdb库中)
mysql -uroot -pxxxxxx testdb < testdb.sql

导入的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同步到磁盘中去。

这两个参数可以在线修改,若想快速导入,可以按照下面步骤来操作:


# 1.进入MySQL命令行 临时修改这两个参数
set global innodb_flush_log_at_trx_commit = 2;
set global sync_binlog = 2000;

# 2.执行SQL脚本导入
mysql -uroot -pxxxxxx testdb < testdb.sql

# 3.导入完成 再把参数改回来
set global innodb_flush_log_at_trx_commit = 1;
set global sync_binlog = 1;

还有另外一种场景是你的需求是新建从库,或者是不需要产生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引擎。不过这两种方法实施起来较为麻烦且不知效果如何。以上方法只是笔者依据个人经验总结得出,可能不太全面,欢迎各位补充哦。

以上就是MySQL如何快速导入数据的详细内容,更多关于MySQL导入数据的资料请关注自学编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL如何快速导入数据

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

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

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

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

下载Word文档
猜你喜欢
  • oracle如何快速导入百万数据
    Oracle数据库中导入百万条数据可以通过以下几种方式快速实现: 使用SQLLoader工具:SQLLoader是Oracle提...
    99+
    2024-04-09
    oracle
  • 100万数据,如何快速的导入数据库?
    数据导出、导入是非常常见的开发操作,但在这个过程中,很多开发者都会遇到诸如数据乱码、数据格式不支持、数据量太大等问题。NineData 最新发布的数据导入功能,帮助用户在保障数据完整和准确的同时,轻松地将大量的数据从文件中导入到目标数据库中...
    99+
    2023-10-20
    数据库 云计算 mysql 数据库管理员 团队开发
  • MySQL数据库中怎么快速导出导入大量数据
    这篇文章将为大家详细讲解有关MySQL数据库中怎么快速导出导入大量数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。MySQL迁移通常使用的有三种方法:1、...
    99+
    2024-04-02
  • 如何将kafka中的数据快速导入Hadoop
    如何将kafka中的数据快速导入Hadoop,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Kafka是一个分布式发布—订阅系统,由于其强大的分布式和性能特性,迅...
    99+
    2023-06-02
  • MySQL 快速导入数据指令load Data 详解
    官方文档 https://dev.mysql.com/doc/refman/8.0/en/load-data.html 样例 LOAD DATA[LOW_PRIORITY | CONCURREN...
    99+
    2023-09-14
    mysql 数据库
  • oracle怎么快速导入csv数据
    要快速导入CSV数据到Oracle,可以使用以下步骤:1. 首先,创建一个表来存储CSV数据。可以使用Oracle SQL Deve...
    99+
    2023-10-12
    oracle
  • MySQL如何快速批量插入1000w条数据
    听说有个面试题是: 如何快速向mysql中插入1000w条数据? 我私下试了一下, 发现插入10000条数据用了0.9s, 插入10w条数据用了4.7s, 插入100w条数据...
    99+
    2024-04-02
  • mysql如何导入数据
    在mysql中导入数据的方法:1.使用sql命令导入;2.使用source命令导入;3.使用LOAD DATA语句导入在mysql中导入数据的方法使用sql命令导入语法格式为:例:导入test.sql数据库# mysql -uroot -p...
    99+
    2024-04-02
  • plsql怎么快速导入大量数据
    在PL/SQL中,可以使用标准的INSERT语句来插入大量数据,但是如果数据量非常大,这种方法可能会比较慢。为了快速导入大量数据,可...
    99+
    2023-10-19
    plsql
  • plsql如何快速导出大量数据
    要快速导出大量数据,你可以使用PL/SQL中的批量绑定和游标技术。以下是一种常见的方法:1. 创建一个游标,用于查询要导出的数据。例...
    99+
    2023-08-31
    plsql
  • mysql快速插入大量数据
    前言 最近做性能测试,需要模拟生产环境的数据量,在造百万、千万级数据的时候发现直接使用插入sql效率极低,百度了一翻,找到几种方式,但用下来还是有很快速的方式,推荐第四种 插入mysql数据效率对比 ...
    99+
    2023-09-23
    mysql 数据库
  • MySQL如何导入和导出数据
    MySQL可以使用命令行工具或者MySQL客户端来导入和导出数据。以下是使用命令行工具的方法: 导出数据: mysqldump ...
    99+
    2024-03-06
    MySQL
  • Hive数据如何导入导出mysql
    这篇文章给大家分享的是有关Hive数据如何导入导出mysql的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 Hive定位:ETL(数据仓库)工具将数...
    99+
    2024-04-02
  • 如何快速迁移MySQL数据
    本篇内容主要讲解“如何快速迁移MySQL数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何快速迁移MySQL数据”吧! 我们通常...
    99+
    2023-02-02
    mysql
  • 【MySQL】将 CSV文件快速导入 MySQL 中
    【MySQL】将 CSV文件快速导入 MySQL 中 方法一:使用navicat等软件的导入向导如果出现中文乱码 方法二:命令行导入(LOAD DATA INFILE SQL) 一般来...
    99+
    2023-09-18
    mysql 数据库
  • mysql怎么快速导入sql文件
    你可以使用以下命令快速导入一个SQL文件到MySQL数据库中:```mysql -u username -p database_na...
    99+
    2023-09-20
    mysql
  • 如何快速装载MYSQL数据库
    如何快速装载MYSQL数据库,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 快速装载MYSQL数据库 ...
    99+
    2024-04-02
  • 【MySQL】如何导入SQL数据库
    目录 如何导入SQL数据库【例子1-以Terminal终端命令行导入】【例子2-以SQLyog图形化软件导入】 如何导入SQL数据库 如何将现成的数据库导入到MySQL中?有两...
    99+
    2023-10-04
    数据库 mysql sql
  • navicat如何导入mysql数据库
    这篇文章给大家分享的是有关navicat如何导入mysql数据库的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql数据库导入在mysql连接中,新建数据库,数据库的名字必须...
    99+
    2024-04-02
  • 使用HeidiSQL如何导入导出MySQL数据
    本篇文章为大家展示了使用HeidiSQL如何导入导出MySQL数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。①首先,选择你要导出的数据库,点击鼠标右键:如下图所...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作