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 相关文章推荐
jdbc使用PreparedStatement批量插入数据的方法
Apr 27 MySQL
详解MySQL主从复制及读写分离
May 07 MySQL
IDEA 链接Mysql数据库并执行查询操作的完整代码
May 20 MySQL
MySQL通过binlog恢复数据
May 27 MySQL
MySQL GRANT用户授权的实现
Jun 18 MySQL
MySQL 使用索引扫描进行排序
Jun 20 MySQL
MySQL索引是啥?不懂就问
Jul 21 MySQL
JMeter对MySQL数据库进行压力测试的实现步骤
Jan 22 MySQL
Mysql Innodb存储引擎之索引与算法
Feb 15 MySQL
Mysql超详细讲解死锁问题的理解
Apr 01 MySQL
MySQL详解进行JDBC编程与增删改查方法
Jun 16 MySQL
MySQL 原理与优化之Update 优化
Aug 14 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 判断变量类型实现代码
2009/10/23 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
ThinkPHP基本的增删查改操作实例教程
2014/08/22 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
php双层循环(九九乘法表)
2017/10/23 PHP
JavaScript 动态生成方法的例子
2009/07/22 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
json格式数据的添加,删除及排序方法
2016/01/21 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
防止重复发送 Ajax 请求
2017/02/15 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
2017/02/27 Javascript
微信小程序中时间戳和日期的相互转换问题
2018/07/09 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python socket 超时设置 errno 10054
2014/07/01 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
python 调试冷知识(小结)
2019/11/11 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
Python子进程subpocess原理及用法解析
2020/07/16 Python
HTML5注册页面示例代码
2014/03/27 HTML / CSS
请说出几个常用的异常类
2013/01/08 面试题
医学专业毕业生个人的求职信
2013/12/04 职场文书
大学生毕业求职自荐书范文
2014/02/04 职场文书
减负增效提质方案
2014/05/23 职场文书
企业金融服务方案
2014/06/03 职场文书
会计人员演讲稿
2014/09/11 职场文书
以权谋私检举信范文
2015/03/02 职场文书
中英文求职信范文
2015/03/19 职场文书
毕业晚宴祝酒词
2015/08/11 职场文书
SQL Server连接查询的实用教程
2021/04/07 SQL Server
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript