服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - MySQL快速插入一亿测试数据

MySQL快速插入一亿测试数据

2021-08-23 18:19tiankong_12345 Mysql

本文主要介绍了MySQL快速插入一亿测试数据,有时候测试需要大量的数据,需要的朋友们下面随着小编来一起学习学习吧

1、建表

1.1 建立测试表 t_user

?
1
2
3
4
5
6
7
8
9
10
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 创建临时表

?
1
2
3
4
create table `tmp_table` (
  `id` int(11) not null,
  primary key (`id`)
) engine=innodb default charset=utf8;

MySQL快速插入一亿测试数据

2、生成数据

2.1 用 python生成 【一亿】 记录的数据文件(这个确实稍微花点时间)

?
1
python -c "for i in range(1, 1+100000000): print(i)" > base.txt

MySQL快速插入一亿测试数据

MySQL快速插入一亿测试数据

MySQL快速插入一亿测试数据

2.2 将生成的文件导入到临时表tmp_table中

找到对应的数据库

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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)

执行导入命令

?
1
2
3
4
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%'; 先看一下配置:

?
1
2
3
4
5
6
7
8
9
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)

说明:

?
1
2
3
secure_file_prive=null   限制mysqld 不允许导入导出
secure_file_priv=/var/lib/mysql-files/   限制mysqld的导入导出只能发生在/var/lib/mysql-files/目录下
secure_file_priv=' '     不对mysqld的导入导出做限制

注意:配置要添加到 [mysqld] 节点下,至于路径加不加引号,你可以试试:

MySQL快速插入一亿测试数据

重启mysql,先查看配置:

?
1
2
3
4
5
6
7
8
9
10
11
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)

再重新导入:

?
1
2
3
4
5
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快速插入一亿测试数据

更新创建时间字段让插入的数据的创建时间更加随机:

?
1
2
3
4
5
6
7
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 插入一亿数据内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/tiankong_12345/article/details/99635404

延伸 · 阅读

精彩推荐
  • Mysqlphp连接不上mysql但mysql命令行操作正常的解决方法

    php连接不上mysql但mysql命令行操作正常的解决方法

    这篇文章主要介绍了php连接不上mysql但mysql命令行操作正常的解决方法,需要的朋友可以参考下 ...

    MYSQL教程网3052020-03-23
  • MysqlMySQL 编码utf8 与 utf8mb4 utf8mb4_unicode_ci 与 utf8mb4_general_ci

    MySQL 编码utf8 与 utf8mb4 utf8mb4_unicode_ci 与 utf8mb4_general_ci

    这篇文章主要介绍了MySQL 编码utf8 与 utf8mb4 utf8mb4_unicode_ci 与 utf8mb4_general_ci的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有...

    kikajack9432021-01-18
  • Mysql安装配置mysql及Navicat prenium的详细流程

    安装配置mysql及Navicat prenium的详细流程

    这篇文章主要介绍了安装配置mysql及Navicat Premium的详细流程,配置方法也真的很简单,本文给大家详细介绍mysql Navicat Premium安装配置相关知识感兴趣的朋友,...

    小黑班♪(・ω・)ノ4932021-08-16
  • MysqlMySQL如何更改数据库数据存储目录详解

    MySQL如何更改数据库数据存储目录详解

    这篇文章主要给大家介绍了关于MySQL如何更改数据库数据存储目录的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考...

    潇湘隐者5402020-09-08
  • Mysql游戏和服备忘问题简析

    游戏和服备忘问题简析

    这篇文章主要介绍了游戏和服备忘问题简析,小编觉得挺不错的,这里分享给大家,希望给大家一个参考。...

    流子5002020-08-14
  • Mysqllinux下源码安装mysql5.6.20教程

    linux下源码安装mysql5.6.20教程

    这篇文章主要为大家详细介绍了linux下源码安装mysql5.6.20教程的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    路小磊5652020-07-10
  • Mysql浅析MySQL 备份与恢复

    浅析MySQL 备份与恢复

    这篇文章主要介绍了MySQL 备份与恢复的相关资料,帮助大家更好的理解和学习MySQL,感兴趣的朋友可以了解下...

    霍思通10922021-01-29
  • MysqlMySQL MyISAM 优化设置点滴

    MySQL MyISAM 优化设置点滴

    MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快, 只是不提供事务支持.大部分项目是读多写少的项目,而Myisam的读性能是比innodb强不少的 ...

    MYSQL教程网4112020-06-10