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 05 MySQL
MySQL 表空间碎片的概念及相关问题解决
May 07 MySQL
正确使用MySQL INSERT INTO语句
May 26 MySQL
MySQL 外键约束和表关系相关总结
Jun 20 MySQL
MySQL 数据恢复的多种方法汇总
Jun 21 MySQL
MySQL系列之八 MySQL服务器变量
Jul 02 MySQL
MySQL 那些常见的错误设计规范,你都知道吗
Jul 16 MySQL
关于MySQL中的 like操作符详情
Nov 17 MySQL
MySQL Innodb索引机制详细介绍
Nov 23 MySQL
MySQL 外连接语法之 OUTER JOIN
Apr 09 MySQL
Mysql中常用的join连接方式
May 11 MySQL
Mysql 一主多从的部署
May 20 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 smarty模版引擎中变量操作符及使用方法
2009/12/11 PHP
php数组函数序列之array_splice() - 在数组任意位置插入元素
2011/11/07 PHP
PHP利用REFERER根居访问来地址进行页面跳转
2013/09/28 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
jquery点击缩略图切换视频播放特效代码分享
2015/09/15 Javascript
js格式化时间的方法
2015/12/18 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
基于Javascript实现文件实时加载进度的方法
2016/10/12 Javascript
JavaScript实现瀑布流以及加载效果
2017/02/11 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
通过webpack引入第三方库的方法
2018/07/20 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
JavaScript+HTML5 canvas实现放大镜效果完整示例
2019/05/15 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
Postman内建变量常用方法实例解析
2020/07/28 Javascript
VSCode插件安装完成后的配置(常用配置)
2020/08/24 Javascript
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
Python的面向对象思想分析
2015/01/14 Python
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
pyqt5自定义信号实例解析
2018/01/31 Python
Python 3 判断2个字典相同
2019/08/06 Python
python数字类型math库原理解析
2020/03/02 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
英国网上花店:Bunches
2016/11/29 全球购物
实体的生命周期
2013/08/31 面试题
安全技术说明书
2014/05/09 职场文书
新闻工作者先进事迹
2014/05/26 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
初中思品教学反思
2016/02/20 职场文书
iPhone13将有八大升级
2021/04/15 数码科技
SQL Server 中的事务介绍
2022/05/20 SQL Server