这个几天公司迁移预览版数据库,当前公司使用的是 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. Java种八种常用排序算法

    1 直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数……直 ...

  2. Gauge安装

    Gauge系列推荐:https://blog.csdn.net/column/details/20089.html Gauge是一种轻量级的跨平台测试自动化工具,可以以业务语言编写测试用例. 安装 下 ...

  3. C# 指南之装箱与拆箱

    基础 1.值类型 1.1 在栈上分配内存,在声明时初始化才能使用,不能为null. 1.2 值类型超出作用范围系统自动释放内存. 1.3 主要由两类组成:结构,枚举 结构分为以下几类 1.整形(Sby ...

  4. Dephi泛型

    TArray TEnumerator(抽象) TEnumerable(抽象) 实际使用:TList TQueue TStack TPair TDictionary ,内部都包含 TValueEnume ...

  5. SRIO常用缩写

    HELLO:Header Encoded Logical Layer Optimized (HELLO) format FTYPE:format type TTYPE:transaction type ...

  6. SWERC13 Decoding the Hallway

    找规律 S+1 = S +'L'+~rev(S) Problem D Decoding the Hallway Problem D Edward is now 21 years old. He has ...

  7. ubuntu16.04 安装系统之后的开发必备-sourcelist--idk-sublime--opencv

    设置sourcelist.txt # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释deb https://mirrors.tuna.tsinghua.edu.cn/ub ...

  8. 《TomCat与Java Web开发技术详解》(第二版) 第六章节的学习总结 ---- JSP技术

    第六章主要介绍了JSP的相关知识. 1.JSP:是通过在HTML文件中加入java程序片段(Java Scriptlet)和JSP标记,就构成了JSP文件.JSP实质上是Servlet.JSP的API ...

  9. IOS设置图片背景

    在UIViewController里面这样设置: self.view.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageN ...

  10. 功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析(转)

    功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析 SimpleCropView是github上第一个第三方开源的图片修剪截取利器,功能强大,设计良好.我个人 ...