日常开发过程中,会遇到数据库转移,分库等操作,数据少的时候,可以借用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导入百万数据实践相关推荐

  1. Mysql 之百万数据导入

    Mysql 之百万数据导入 1.方法 直接source sql 文件进行直接导入(不推荐) Load data infile命令进行导入(推荐) 更换引擎,将表的InnoDB引擎改为MyISAM,再导 ...

  2. datax 导入数据中文乱码_四种方法处理MYSQL导入中文数据时的乱码问题 | 很文博客...

    我是用的最后一种方法,前面三种解决MYSQL导入数据乱码的方法没试过,很文博客推荐大家直接使用第四种方法处理MYSQL导入中文数据时的乱码问题. 首先在新建数据库时一定要注意生成原数据库相同的编码形式 ...

  3. MySQL导入csv数据

    MySQL导入csv数据 前言 一.导入步骤 1.MySQL workbench 操作语句 2.用CMD命令窗口导入数据 3.用cmd时犯的一个错误 总结 前言 下载了一个数据组,数据格式是CSV,再 ...

  4. mysql 导入百万级数据 几种 java_百万级数据,如何迁移到MySQL?

    最近公司在使用 ABP 重构之前的老项目,数据库也由 SQL SERVER 切换到了 MyQL. 吐槽一下,之前的产品使用的是 Windows Server 2008 , SqlServer 2008 ...

  5. MySQL导入导出数据和结构

    1. mysql导出数据和结构 使用mysqldump命令 1.1 导出全库 连带数据 mysqldump -u root -p app_test > app_test.sql 1.2 导出指定 ...

  6. BCP导出导入大容量数据实践

    前言 SQL SERVER提供多种不同的数据导出导入的工具,也可以编写SQL脚本,使用存储过程,生成所需的数据文件,甚至可以生成包含SQL语句和数据的脚本文 件.各有优缺点,以适用不同的需求.下面介绍 ...

  7. Mysql导入导出数据总结

    写在前面的话: 1,Mysql数据库在进行导入导出时最好先断开一切访问数据库的连接,否则会发生难以预料的错误,例如:我在导入数据库的时候,一直无法导入,报错无法读取db.sql,或者出现输入指令后加了 ...

  8. MySQL 导入SCV数据

    2019独角兽企业重金招聘Python工程师标准>>> mysql 导入CSV格式数据 Mssql数据库数据移植到mysql数据库问题是一个比较复杂的过程,但对于少量数据导入来说,使 ...

  9. mysql导入es_mysql数据导入es

    1,py-mysql-elasticsearch-sync<github 工具> 简介: python版本的mysql导入es的插件 通过配置config.yaml文件,该插件可以将mys ...

最新文章

  1. 使用Palette类提取图片的颜色信息
  2. 深度增强学习前沿算法思想
  3. reactjs入门示例
  4. Python数据分析实战项目-共享单车骑行数据分析
  5. 【java作业】2、 编写两个函数,分别使用字节流、字符流实现文件的拷贝;点击按钮,将第三个文本框的字符串的值设置为第一个文本框的字符串+第二个文本框的字符串。
  6. JavaScript 基础
  7. CAS自旋锁到底是什么?为什么能实现线程安全?
  8. linux gdb 脚本,如何写gdb命令脚本
  9. 学生用计算机shift,电脑Shift键你会用吗
  10. cuda Synchronization
  11. 【转】一劳永获的解决textbox 只能输入数字、汉字、字母等问题
  12. 干货| 掌握这种逻辑思维,大厂面试成功率可提升90%
  13. mysql bit_or() bit_count()函数
  14. 【菜鸟学开发系统】学生成绩管理系统(二)
  15. IDEA 复制当前行到下一行
  16. 天创速盈:拼多多低价引流怎么玩?大部分中小卖家都不知道
  17. javascript实现页面刷新
  18. win10计算机拒绝访问,Win10文件访问被拒绝如何解决?
  19. SRS4.0源码分析-main
  20. 【istioctl】multicluster mesh 管理源码走读

热门文章

  1. java 成绩_java输出各种学生成绩
  2. MacBook Air老本重装系统
  3. dell设置从ssd启动_戴尔dell笔记本bios怎么设置第一启动项为硬盘
  4. ArcGIS Maps SDK for Unreal Engine通过UI方式显示地图教程
  5. 网易云动态小视频下载方法
  6. 华为数通HCIA学习笔记之OSI参考模型TCP/IP模型
  7. Google谷歌浏览器打开显示搜狗解决办法!
  8. Pois-son blending
  9. 计算机考试在线考试答案2019,2019石油华东《计算机应用基础》在线考试(答案)...
  10. 8.16 Redis的新数据结构、配置文件及使用