MySQL导入百万数据实践
日常开发过程中,会遇到数据库转移,分库等操作,数据少的时候,可以借用navicate来操作,对于大批量数据来说,工具就变得笨拙,百万级数据可能导入需要花上一整天,这是不能接受的。
mysql提供了一个专门针对大数据导入的命令:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[PARTITION (partition_name,...)]
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number {LINES | ROWS}]
[(col_name_or_user_var,...)]
[SET col_name = expr,...]
但是要使用这个命令,还得踩过一路的坑。
1、安全配置。mysql默认不允许文件导入导出,通过下面命令可以看到 secure_file_priv=null。
mysql> show variables like '%secure%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| require_secure_transport | OFF |
| secure_auth | ON |
| secure_file_priv | NULL |
+--------------------------+-------+
3 rows in set, 1 warning (0.00 sec)
2、配置无门,因为mysql安装目录下就没有可以配置的地方,找不到my.ini。
需要手工在mysql安装目录的根目录下创建my.ini(本人测试机器为windows,路径为:
C:\Program Files\MySQL\MySQL Server 5.7):
[mysqld]
secure_file_priv=
character-set-server=utf8
#绑定IPv4和3306端口
bind-address = 0.0.0.0
port = 3306
#sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
default_storage_engine=innodb
innodb_buffer_pool_size=1000M
innodb_log_file_size=50M
# 允许最大连接数
max_connections=200
# skip_grant_tables
[mysql]
default-character-set=utf8
[mysql.server]
default-character-set=utf8
[mysql_safe]
default-character-set=utf8
[client]
port = 3306
3、重启mysql让配置生效。
net stop mysql #关闭mysql
net start mysql #启动mysql
4、再验证,可以看到secure_file_priv = null,表示可以进行文件导入导出了
mysql> show variables like '%secure%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| require_secure_transport | OFF |
| secure_auth | ON |
| secure_file_priv | |
+--------------------------+-------+
3 rows in set, 1 warning (0.00 sec)
5、再执行,继续报错,找不到文件,根据提示,文件需要放到指定目录下(数据库名称为:learn):
C:\Program Files\MySQL\MySQL Server 5.7\data\learn\test_db.sql
6、再执行,继续报错:
Incorrect integer value: '' for column 'id' at row 1
列ID为integer,但是数据为‘1’:
INSERT INTO `system_user` VALUES ('1', '39352f81-165e-4405-9715-75fcdf7f7068', '裴鸥鹏', 'bANyhSmVtgxYmOcF', '15175232269', '北京市,密云县', '0', '2', '2015-01-01 00:00:00');
一般我们是认为应该没错误的。后来查了下MYSQL的资料。发现5.5以上的版本验证较为严格。
7、修改my.ini:
默认为
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",
将其修改为
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",重启mysql后即可
8、再试,330万数据,导入只花了50.20秒,效率非常高
mysql> LOAD DATA INFILE "test_db.sql" INTO TABLE system_user FIELDS TERMINATED BY ',';
Query OK, 3323001 rows affected, 65535 warnings (50.20 sec)
Records: 3323001 Deleted: 0 Skipped: 0 Warnings: 16615005
参考文档:
https://www.cnblogs.com/lv_yantao/archive/2011/11/13/2246950.html
https://www.2cto.com/database/201803/725288.html
https://www.jb51.net/article/125905.htm
https://www.cnblogs.com/waynechou/p/7794939.html
https://segmentfault.com/a/1190000009333563
MySQL导入百万数据实践相关推荐
- Mysql 之百万数据导入
Mysql 之百万数据导入 1.方法 直接source sql 文件进行直接导入(不推荐) Load data infile命令进行导入(推荐) 更换引擎,将表的InnoDB引擎改为MyISAM,再导 ...
- datax 导入数据中文乱码_四种方法处理MYSQL导入中文数据时的乱码问题 | 很文博客...
我是用的最后一种方法,前面三种解决MYSQL导入数据乱码的方法没试过,很文博客推荐大家直接使用第四种方法处理MYSQL导入中文数据时的乱码问题. 首先在新建数据库时一定要注意生成原数据库相同的编码形式 ...
- MySQL导入csv数据
MySQL导入csv数据 前言 一.导入步骤 1.MySQL workbench 操作语句 2.用CMD命令窗口导入数据 3.用cmd时犯的一个错误 总结 前言 下载了一个数据组,数据格式是CSV,再 ...
- mysql 导入百万级数据 几种 java_百万级数据,如何迁移到MySQL?
最近公司在使用 ABP 重构之前的老项目,数据库也由 SQL SERVER 切换到了 MyQL. 吐槽一下,之前的产品使用的是 Windows Server 2008 , SqlServer 2008 ...
- MySQL导入导出数据和结构
1. mysql导出数据和结构 使用mysqldump命令 1.1 导出全库 连带数据 mysqldump -u root -p app_test > app_test.sql 1.2 导出指定 ...
- BCP导出导入大容量数据实践
前言 SQL SERVER提供多种不同的数据导出导入的工具,也可以编写SQL脚本,使用存储过程,生成所需的数据文件,甚至可以生成包含SQL语句和数据的脚本文 件.各有优缺点,以适用不同的需求.下面介绍 ...
- Mysql导入导出数据总结
写在前面的话: 1,Mysql数据库在进行导入导出时最好先断开一切访问数据库的连接,否则会发生难以预料的错误,例如:我在导入数据库的时候,一直无法导入,报错无法读取db.sql,或者出现输入指令后加了 ...
- MySQL 导入SCV数据
2019独角兽企业重金招聘Python工程师标准>>> mysql 导入CSV格式数据 Mssql数据库数据移植到mysql数据库问题是一个比较复杂的过程,但对于少量数据导入来说,使 ...
- mysql导入es_mysql数据导入es
1,py-mysql-elasticsearch-sync<github 工具> 简介: python版本的mysql导入es的插件 通过配置config.yaml文件,该插件可以将mys ...
最新文章
- 使用Palette类提取图片的颜色信息
- 深度增强学习前沿算法思想
- reactjs入门示例
- Python数据分析实战项目-共享单车骑行数据分析
- 【java作业】2、 编写两个函数,分别使用字节流、字符流实现文件的拷贝;点击按钮,将第三个文本框的字符串的值设置为第一个文本框的字符串+第二个文本框的字符串。
- JavaScript 基础
- CAS自旋锁到底是什么?为什么能实现线程安全?
- linux gdb 脚本,如何写gdb命令脚本
- 学生用计算机shift,电脑Shift键你会用吗
- cuda Synchronization
- 【转】一劳永获的解决textbox 只能输入数字、汉字、字母等问题
- 干货| 掌握这种逻辑思维,大厂面试成功率可提升90%
- mysql bit_or() bit_count()函数
- 【菜鸟学开发系统】学生成绩管理系统(二)
- IDEA 复制当前行到下一行
- 天创速盈:拼多多低价引流怎么玩?大部分中小卖家都不知道
- javascript实现页面刷新
- win10计算机拒绝访问,Win10文件访问被拒绝如何解决?
- SRS4.0源码分析-main
- 【istioctl】multicluster mesh 管理源码走读
热门文章
- java 成绩_java输出各种学生成绩
- MacBook Air老本重装系统
- dell设置从ssd启动_戴尔dell笔记本bios怎么设置第一启动项为硬盘
- ArcGIS Maps SDK for Unreal Engine通过UI方式显示地图教程
- 网易云动态小视频下载方法
- 华为数通HCIA学习笔记之OSI参考模型TCP/IP模型
- Google谷歌浏览器打开显示搜狗解决办法!
- Pois-son blending
- 计算机考试在线考试答案2019,2019石油华东《计算机应用基础》在线考试(答案)...
- 8.16 Redis的新数据结构、配置文件及使用