MySQL快速插入一亿测试数据


Posted in MySQL onJune 23, 2021
目录
  • 1、建表
    • 1.1 建立测试表 t_user
    • 1.2 创建临时表
  • 2、生成数据
    • 2.1 用 python生成 【一亿】 记录的数据文件(这个确实稍微花点时间)
    • 2.2 将生成的文件导入到临时表tmp_table中
  • 3、以临时表为基础数据,插入数据到t_user中
  • 4、参考

 

1、建表

 

1.1 建立测试表 t_user

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `c_user_id` varchar(36) NOT NULL DEFAULT '' COMMENT '用户Id',
  `c_name` varchar(22) NOT NULL DEFAULT '' COMMENT '用户名',
  `c_province_id` int(11) NOT NULL COMMENT '省份Id',
  `c_city_id` int(11) NOT NULL COMMENT '城市Id',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`c_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 

1.2 创建临时表

CREATE TABLE `tmp_table` (
  `id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

MySQL快速插入一亿测试数据

 

2、生成数据

 

2.1 用 python生成 【一亿】 记录的数据文件(这个确实稍微花点时间)

python -c "for i in range(1, 1+100000000): print(i)" > base.txt

MySQL快速插入一亿测试数据

MySQL快速插入一亿测试数据

MySQL快速插入一亿测试数据

 

2.2 将生成的文件导入到临时表tmp_table中

找到对应的数据库

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql> use test;
Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| student        |
| t_user         |
| tmp_table      |
+----------------+
3 rows in set (0.00 sec)

执行导入命令

mysql> load data infile 'E:/base.txt' replace into table tmp_table;
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option 
so it cannot execute this statement
mysql>

导入数据时有可能会报错,原因是mysql默认没有开secure_file_priv( 这个参数用来限制数据导入和导出操作的效果,例如执行LOAD DATA、SELECT … INTO OUTFILE语句和LOAD_FILE()函数。这些操作需要用户具有FILE权限。 )

解决办法:在mysql的配置文件中(my.ini 或者 my.conf)中添加 secure_file_priv = 文件所在的路径 ,  然后重启mysql 解决。添加自己文件放置的路径即可。

可以用 show variables like '%secure%'; 先看一下配置:

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)

说明:

secure_file_prive=null   限制mysqld 不允许导入导出
secure_file_priv=/var/lib/mysql-files/   限制mysqld的导入导出只能发生在/var/lib/mysql-files/目录下
secure_file_priv=' '     不对mysqld的导入导出做限制

注意:配置要添加到 [mysqld] 节点下,至于路径加不加引号,你可以试试:

MySQL快速插入一亿测试数据

重启MySQL,先查看配置:

mysql> use test;
Database changed
mysql> show variables like '%secure%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| require_secure_transport | OFF   |
| secure_auth              | ON    |
| secure_file_priv         | E:\   |
+--------------------------+-------+
3 rows in set, 1 warning (0.00 sec)

再重新导入:

mysql> load data infile 'E:/base.txt' replace into table tmp_table;
Query OK, 100000000 rows affected (3 min 53.42 sec)
Records: 100000000  Deleted: 0  Skipped: 0  Warnings: 0
 
mysql>

亿级数据,233.42s,看一下别人的数据,差不多就是这个。

MySQL快速插入一亿测试数据

 

3、以临时表为基础数据,插入数据到t_user中

一亿数据需要:快半个小时了。。。(或许直接在命令行下运行更快点...)

MySQL快速插入一亿测试数据

更新创建时间字段让插入的数据的创建时间更加随机:

mysql> UPDATE t_user SET create_time=date_add(create_time, interval FLOOR(1 + (RAND() * 7)) year);
Query OK, 100000000 rows affected (7 min 24.17 sec)
Rows matched: 100000000  Changed: 100000000  Warnings: 0
 
mysql> UPDATE t_user SET create_time=date_add(create_time, interval FLOOR(1 + (RAND() * 7)) year);
Query OK, 100000000 rows affected (8 min 2.49 sec)
Rows matched: 100000000  Changed: 100000000  Warnings: 0

到此,一亿数据插入结束。

 

4、参考

MySQL如何快速的创建千万级测试数据

The MySQL server is running with the --secure-file-priv option

到此这篇关于MySQL快速插入一亿测试数据的文章就介绍到这了,更多相关MySQL 插入一亿数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
详解MySQL 用户权限管理
Apr 20 MySQL
将图片保存到mysql数据库并展示在前端页面的实现代码
May 02 MySQL
MySQL sql_mode的使用详解
May 08 MySQL
MySQL 逻辑备份与恢复测试的相关总结
May 14 MySQL
带你学习MySQL执行计划
May 31 MySQL
为什么MySQL分页用limit会越来越慢
Jul 25 MySQL
MySQL分库分表详情
Sep 25 MySQL
Mysql多层子查询示例代码(收藏夹案例)
Mar 31 MySQL
分析MySQL优化 index merge 后引起的死锁
Apr 19 MySQL
MySQL 自动填充 create_time 和 update_time
May 20 MySQL
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
Jun 14 MySQL
MySQL数据库之内置函数和自定义函数 function
Jun 16 MySQL
MySQL8.0.18配置多主一从
Jun 21 #MySQL
MySQL中日期型单行函数代码详解
如何搭建 MySQL 高可用高性能集群
Jun 21 #MySQL
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
Jun 21 #MySQL
分析mysql中一条SQL查询语句是如何执行的
MySQL如何使用使用Xtrabackup进行备份和恢复
Jun 21 #MySQL
MySQL 数据恢复的多种方法汇总
Jun 21 #MySQL
You might like
PHP命名空间(Namespace)的使用详解
2013/05/04 PHP
PHP正则删除HTML代码中宽高样式的方法
2017/06/12 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
js鼠标点击图片切换效果代码分享
2015/08/26 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
以WordPress为例讲解jQuery美化页面Title的方法
2016/05/23 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
2017/02/10 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
webpack手动配置React开发环境的步骤
2018/07/02 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
vue动态注册组件实例代码详解
2019/05/30 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
微信小程序选择图片控件
2021/01/19 Javascript
Python实现windows下模拟按键和鼠标点击的方法
2015/03/13 Python
简单学习Python多进程Multiprocessing
2017/08/29 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
Python实现KNN邻近算法
2021/01/28 Python
python实现机器人行走效果
2018/01/29 Python
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
python redis 删除key脚本的实例
2019/02/19 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
Django修改app名称和数据表迁移方案实现
2020/09/17 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
2020/10/20 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
使用HTML5做个画图板的方法介绍
2013/05/03 HTML / CSS
质检部岗位职责
2013/11/11 职场文书
《我要的是葫芦》教学反思
2014/02/23 职场文书
双创工作实施方案
2014/03/26 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
盗窃案辩护词
2015/05/21 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis