这个几天公司迁移预览版数据库,当前公司使用的是 Mysql 数据库,版本为 5.6。迁移的数据库大小也不算很大,2G 多一点,总体以小表为主,就几张表数据比较大,有业务记录表达到了 150W 的数量级,我一开始不以为然,直接将所有的表以 sql 文件的方式导出,然后再使用 Navicat 直接运行 sql 文件的方式导入。最后发现花费了很长时间也没有导入,于是回家研究了一下 Mysql 的导入导出,希望以后遇到这样的问题可以用得上。

1.首先修改 mysql 配置文件

max_allowed_packet = 256M
innodb_flush_log_at_trx_commit = 0

MySQL 会根据配置文件会限制 server 接受的数据包的大小。如果写入大数据时,因为默认的配置太小,插入和更新操作会因为 max_allowed_packet 参数限制,而导致失败。

max_allowed_packet 如果不设置,默认值在不同的 MySQL 版本表现不同,有的版本默认1M,有的版本默认4M。所以首先修改 max_allowed_packet 大小为 256M。

innodb_flush_log_at_trx_commit 参数

0:log buffer 将每秒一次地写入 log file 中,并且 log file 的 flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作。

1:每次事务提交时 MySQL 都会把 log buffer 的数据写入 log file,并且 flush(刷到磁盘)中去,该模式为系统默认。

2:每次事务提交时 MySQL 都会把 log buffer 的数据写入 log file,但是 flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL 会每秒执行一次 flush(刷到磁盘)操作。

当设置为 0,该模式速度最快,但不太安全,mysqld 进程的崩溃会导致上一秒钟所有事务数据的丢失。

当设置为 1,该模式是最安全的,但也是最慢的一种方式。在 mysqld 服务崩溃或者服务器主机 crash 的情况下,binary log 只有可能丢失最多一个语句或者一个事务。。

当设置为 2,该模式速度较快,也比 0 安全,只有在操作系统崩溃或者系统断电的情况下,上一秒钟所有事务数据才可能丢失。

1.直接执行 sql 文件

速度慢,很慢,适合量很少的情况。

2.登录mysql后使用source命令

mysql -u<用户名> -p<密码>
mysql> use dbname;
mysql> source filename;

相较于第一种方式,速度明显快了很多,但任然很慢,在我的电脑上 5 分钟导入了 66W 条数据。

3.使用 mysql 命令行

mysql -u root - p dbname < filename

5分钟大约 80w 的数据,比前一种方法稍微快了一些。

10 分钟大约 110W 的数据。

20 分钟大约 160W 的数据,单表大小 1.2G。

4.使用 load data infile 方法

select * into outfile 'account.txt' fields terminated by ',' from va_account;

153W 行 1.1G 花费20s

LOAD DATA INFILE 'account.txt' INTO TABLE va_account;

使用 load data 后花费 7'12s 将数据倒完,和网上的平均的速度差距很大(6000W/h),随后思考为什么使用 load data 的方式还是很慢。最后发现是表中的索引花费了导入的时间。将索引删除,我这里这张表是 3 个索引,删除后导入只花费 1 分钟左右,导入速度明显提升。

总结

使用 sql 执行的方式最慢,可能花费几个小时也无法将 150W 的数据导入,使用 load data infile 方法最快,分分钟将庞大的数据导入数据库。但是 load data infile 一次只能备份和导入一张表(或许是我没有找到多表同时的方法),所以我以后导入数据的方式使用方法 3 加方法 4 结合的方式导入和导出。将表中数据大的表单个导入导出,其他使用命令行的方式导入。

本文由个人 hexo 博客 co2fe.com 迁移

date: 2018-09-17 18:34:31

Mysql 导入实战的更多相关文章

  1. 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟

    使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 Sqoop 大数据 Hive HBase ETL 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 基础环境 ...

  2. MYSQL导入,导出命令。

    Windows下 命令速度远远快于客户端工具导库 导入SQL文件命令,D:\mysqlserver\bin>mysql -uroot -p e6wifi_content <C:/Users ...

  3. mysql导入数据到oracle中

    mysql导入数据到oracle中. 建立Oracle表: CREATE TABLE "GG_USER" ( "USERID" BYTE) NOT NULL, ...

  4. MySQL导入sql脚本错误:2006 - MySQL server has gone away

    到如一些小脚本很少报错,但最近导入一个10+M的SQL脚本,却重复报错: Error occured at:2014-03-24 11:42:24 Line no.:85 Error Code: 20 ...

  5. mysql导入导出数据中文乱码解决方法小结

    linux系统中 linux默认的是utf8编码,而windows是gbk编码,所以会出现上面的乱码问题. 解决mysql导入导出数据乱码问题 首先要做的是要确定你导出数据的编码格式,使用mysqld ...

  6. Mysql导入数据库的方法

    mysql导入数据库的方法 | 浏览:41023 | 更新:2012-11-01 19:45 1 2 3 4 5 6 7 分步阅读 MySQL是一个中.小型关系型数据库管理系统,由瑞典MySQL AB ...

  7. [MySQL]导入导出

    [MySQL]导入导出 一 导入文本数据 1)mysql->load data infile 数据文件c:/mytable.txt 如下:(每一行为一条记录,记录的字段间用tab隔开,最后一个字 ...

  8. mysql 导入导出.sql文件

    备份数据库(包含全部表和全部存储过程):C:\Documents and Settings\Administrator>mysqldump -h localhost -u root -p -R ...

  9. MYSQL导入导出.sql文件

    MYSQL导入导出.sql文件   一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=“:path\mysql\bin;”其中p ...

随机推荐

  1. 为什么 Linux 的 htop 命令完胜 top 命令

    在 Linux 系统中,top 命令用来显示系统中正在运行的进程的实时状态,它显示了一些非常有用的信息,比如 CPU 利用情况.内存消耗情况,以及每个进程情况等.但是,你知道吗?还有另外一个命令行工具 ...

  2. 如何手动编译运行带包 java 程序

    带包的java程序比普通java程序的编译稍微复杂一些.例如下面的例子: package cn.guopeng; import java.util.*; public class hello { pu ...

  3. WordPress系列之钩子hook的作用及基本用法

    WordPress 的插件机制实际上只的就是这个 Hook 了,它中文被翻译成钩子,允许你参与 WordPress 核心的运行,是一个非常棒的东西,下面我们来详细了解一下它.钩子分类 钩子分为两种,一 ...

  4. MQTT--入门

    一.简述  MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议 ...

  5. nightwatchJS ---element用法

    .element() Search for an element on the page, starting from the document root. The located element w ...

  6. YUV Player

    https://github.com/Yonsm/RawPlayer RawPlayer https://github.com/latelee/YUVPlayer YUVPlayer https:// ...

  7. Ubuntu 16.04主题美化和软件推荐

    http://www.linuxidc.com/Linux/2016-09/135165.htm http://www.techweb.com.cn/network/system/2015-11-20 ...

  8. JS-以鼠标位置为中心的滑轮放大功能demo1

    以鼠标位置为中心的滑轮放大功能demo1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &qu ...

  9. iOS Masonry 抗压缩 抗拉伸

    约束优先级: 在Autolayout中每个约束都有一个优先级, 优先级的范围是1 ~ 1000.创建一个约束,默认的优先级是最高的1000 Content Hugging Priority: 该优先级 ...

  10. Win8运行金山词霸2005的问题

    一般是以下几种状况: 1.运行进入假死 2.取词模块报错 3.词库突然丢失 原因: 文件权限和注册表权限问题 解决方法: 进入"..\Kingsoft\PowerWord 2005\&quo ...