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 相关文章推荐
浅析InnoDB索引结构
Apr 05 MySQL
MySQL数据迁移相关总结
Apr 29 MySQL
MySQL 自定义变量的概念及特点
May 13 MySQL
浅谈MySQL之浅入深出页原理
Jun 23 MySQL
MySQL的全局锁和表级锁的具体使用
Aug 23 MySQL
MySQL 如何限制一张表的记录数
Sep 14 MySQL
MYSQL 运算符总结
Nov 11 MySQL
mysql5.7的安装及Navicate长久免费使用的实现过程
Nov 17 MySQL
JMeter对MySQL数据库进行压力测试的实现步骤
Jan 22 MySQL
MySQL创建管理子分区
Apr 13 MySQL
mysql查找连续出现n次以上的数字
May 11 MySQL
MySQL数据库简介与基本操作
May 30 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中一些字符串总结
2016/05/05 PHP
PHP7匿名类用法分析
2016/09/26 PHP
js动态为代码着色显示行号
2013/05/29 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
认识Knockout及如何使用Knockout绑定上下文
2015/12/25 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
JS阻止事件冒泡行为和闭包的方法
2016/06/16 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
使用Ajax与服务器(JSON)通信实例
2016/11/04 Javascript
jQuery控制控件文本的长度的操作方法
2016/12/05 Javascript
wap手机端解决返回上一页的js实例
2016/12/08 Javascript
vue.js实现备忘录功能的方法
2017/07/10 Javascript
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
浅谈webpack SplitChunksPlugin实用指南
2018/09/17 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
2020/05/15 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
python简单线程和协程学习心得(分享)
2017/06/14 Python
Python学习思维导图(必看篇)
2017/06/26 Python
python实现学生管理系统
2018/01/11 Python
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
如何用python 操作zookeeper
2020/12/28 Python
Canvas 文本转粒子效果的实现代码
2019/02/14 HTML / CSS
皇马官方商城:Real Madrid Store
2016/09/02 全球购物
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
应届毕业生个人求职信范文
2014/01/29 职场文书
国际贸易专业个人求职信格式
2014/02/02 职场文书
建国大业观后感
2015/06/01 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers
Nginx四层负载均衡的配置指南
2021/06/11 Servers