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 相关文章推荐
Windows10下安装MySQL8
Apr 06 MySQL
Mysql服务添加 iptables防火墙策略的方案
Apr 29 MySQL
MySQL 存储过程的优缺点分析
May 20 MySQL
MySQL 数据类型选择原则
May 27 MySQL
mysql 带多个条件的查询方式
Jun 05 MySQL
探究Mysql模糊查询是否区分大小写
Jun 11 MySQL
MySQL中连接查询和子查询的问题
Sep 04 MySQL
MYSQL 运算符总结
Nov 11 MySQL
MySQL多表查询机制
Mar 17 MySQL
MySQL学习之基础操作总结
Mar 19 MySQL
数据分析数据库ClickHouse在大数据领域应用实践
Apr 03 MySQL
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
Sep 23 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将会员数据导入到ucenter的代码
2010/07/18 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
Jquery下:nth-child(an+b)的使用注意
2011/05/28 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
JavaScript中的原型和继承详解(图文)
2014/07/18 Javascript
js实现砖头在页面拖拉效果
2020/11/20 Javascript
巧用canvas
2017/01/21 Javascript
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
Vuex实现计数器以及列表展示效果
2018/03/10 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
点击按钮弹出模态框的一系列操作代码实例
2019/03/29 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
javascript实现多边形碰撞检测
2020/10/24 Javascript
在Django中管理Users和Permissions以及Groups的方法
2015/07/23 Python
查看python安装路径及pip安装的包列表及路径
2019/04/03 Python
Python获取数据库数据并保存在excel表格中的方法
2019/06/12 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
python中如何打包用户自定义模块
2020/09/23 Python
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
自我鉴定怎么写
2013/12/05 职场文书
生产总经理岗位职责
2013/12/19 职场文书
经典导游欢迎词大全
2014/01/16 职场文书
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
中秋节活动总结
2014/08/29 职场文书
质监局领导班子对照检查材料思想汇报
2014/09/27 职场文书
质监局领导班子践行群众路线整改方案
2014/10/26 职场文书
迟到检讨书范文
2015/01/27 职场文书
男方婚前保证书
2015/02/28 职场文书
九九重阳节致辞
2015/07/31 职场文书
七年级生物教学反思
2016/02/20 职场文书
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技