Mysql 导入实战
这个几天公司迁移预览版数据库,当前公司使用的是 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 导入实战的更多相关文章
- 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟
使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 Sqoop 大数据 Hive HBase ETL 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 基础环境 ...
- MYSQL导入,导出命令。
Windows下 命令速度远远快于客户端工具导库 导入SQL文件命令,D:\mysqlserver\bin>mysql -uroot -p e6wifi_content <C:/Users ...
- mysql导入数据到oracle中
mysql导入数据到oracle中. 建立Oracle表: CREATE TABLE "GG_USER" ( "USERID" BYTE) NOT NULL, ...
- 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 ...
- mysql导入导出数据中文乱码解决方法小结
linux系统中 linux默认的是utf8编码,而windows是gbk编码,所以会出现上面的乱码问题. 解决mysql导入导出数据乱码问题 首先要做的是要确定你导出数据的编码格式,使用mysqld ...
- Mysql导入数据库的方法
mysql导入数据库的方法 | 浏览:41023 | 更新:2012-11-01 19:45 1 2 3 4 5 6 7 分步阅读 MySQL是一个中.小型关系型数据库管理系统,由瑞典MySQL AB ...
- [MySQL]导入导出
[MySQL]导入导出 一 导入文本数据 1)mysql->load data infile 数据文件c:/mytable.txt 如下:(每一行为一条记录,记录的字段间用tab隔开,最后一个字 ...
- mysql 导入导出.sql文件
备份数据库(包含全部表和全部存储过程):C:\Documents and Settings\Administrator>mysqldump -h localhost -u root -p -R ...
- MYSQL导入导出.sql文件
MYSQL导入导出.sql文件 一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=“:path\mysql\bin;”其中p ...
随机推荐
- Java种八种常用排序算法
1 直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数……直 ...
- Gauge安装
Gauge系列推荐:https://blog.csdn.net/column/details/20089.html Gauge是一种轻量级的跨平台测试自动化工具,可以以业务语言编写测试用例. 安装 下 ...
- C# 指南之装箱与拆箱
基础 1.值类型 1.1 在栈上分配内存,在声明时初始化才能使用,不能为null. 1.2 值类型超出作用范围系统自动释放内存. 1.3 主要由两类组成:结构,枚举 结构分为以下几类 1.整形(Sby ...
- Dephi泛型
TArray TEnumerator(抽象) TEnumerable(抽象) 实际使用:TList TQueue TStack TPair TDictionary ,内部都包含 TValueEnume ...
- SRIO常用缩写
HELLO:Header Encoded Logical Layer Optimized (HELLO) format FTYPE:format type TTYPE:transaction type ...
- 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 ...
- ubuntu16.04 安装系统之后的开发必备-sourcelist--idk-sublime--opencv
设置sourcelist.txt # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释deb https://mirrors.tuna.tsinghua.edu.cn/ub ...
- 《TomCat与Java Web开发技术详解》(第二版) 第六章节的学习总结 ---- JSP技术
第六章主要介绍了JSP的相关知识. 1.JSP:是通过在HTML文件中加入java程序片段(Java Scriptlet)和JSP标记,就构成了JSP文件.JSP实质上是Servlet.JSP的API ...
- IOS设置图片背景
在UIViewController里面这样设置: self.view.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageN ...
- 功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析(转)
功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析 SimpleCropView是github上第一个第三方开源的图片修剪截取利器,功能强大,设计良好.我个人 ...