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 sql_mode修改不生效的原因及解决
May 07 MySQL
为什么mysql字段要使用NOT NULL
May 13 MySQL
Mysql官方性能测试工具mysqlslap的使用简介
May 21 MySQL
MySQL深度分页(千万级数据量如何快速分页)
Jul 25 MySQL
MySQL表类型 存储引擎 的选择
Nov 11 MySQL
一文弄懂MySQL中redo log与binlog的区别
Feb 15 MySQL
mysql 乱码 字符集latin1转UTF8
Apr 19 MySQL
MySQL数据库事务的四大特性
Apr 20 MySQL
MySQL数据库 安全管理
May 06 MySQL
mysql查看表结构的三种方法总结
Jul 07 MySQL
MySQL索引失效场景及解决方案
Jul 23 MySQL
MySQL数据管理操作示例讲解
Dec 24 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 生成唯一id的几种解决方法
2013/03/08 PHP
php使用date和strtotime函数输出指定日期的方法
2014/11/14 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
PHP直接修改表内容DataGrid功能实现代码
2015/09/24 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
基于JQuery的模拟苹果桌面Dock效果(稳定版)
2012/10/15 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
JavaScript几种数组去掉重复值的方法推荐
2016/04/12 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
Vue项目中使用flow做类型检测的方法
2020/03/18 Javascript
[03:08]Ti4观战指南上
2014/07/07 DOTA
朴素贝叶斯算法的python实现方法
2014/11/18 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
Python读取mat文件,并转为csv文件的实例
2018/07/04 Python
Python 忽略warning的输出方法
2018/10/18 Python
Flask框架web开发之零基础入门
2018/12/10 Python
python图形用户接口实例详解
2019/12/16 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
Django实现celery定时任务过程解析
2020/04/21 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
免费获得微软MCSD证书赶快行动吧!
2012/11/13 HTML / CSS
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
交通事故协议书范本
2014/11/18 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书
Spring Boot 整合 Apache Dubbo的示例代码
2021/07/04 Java/Android
JS的深浅复制详细
2021/10/16 Javascript
 Python 中 logging 模块使用详情
2022/03/03 Python