MySQL快速插入一亿测试数据

目录
  • 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;

2、生成数据

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

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

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> 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,看一下别人的数据,差不多就是这个。

3、以临时表为基础数据,插入数据到t_user中

一亿数据需要:快半个小时了。。。(或许直接在命令行下运行更快点...)

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

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 插入一亿数据内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mysql 从一个表中查数据并插入另一个表实现方法

    mysql 从一个表中查数据并插入另一个表实现方法 不管是在网站开发还是在应用程序开发中,我们经常会碰到需要将MySQL或MS SQLServer某个表的数据批量导入到另一个表的情况,甚至有时还需要指定导入字段. 本文就将以MySQL数据库为例,介绍如何通过SQL命令行将某个表的所有数据或指定字段的数据,导入到目标表 中.此方法对于SQLServer数据库,也就是T-SQL来说,同样适用 . 类别一. 如果两张张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法: INSERT

  • mysql技巧:提高插入数据(添加记录)的速度

    问题描述: 普通台式机,采集数据,表中已经有>1000万数据量. 采集回来的数据插入表中的时候很慢,每条约100毫秒. 解决方法: 1.加大mysql配置中的bulk_insert_buffer_size,这个参数默认为8M bulk_insert_buffer_size=100M 2.改写所有insert语句为insert delayed 这个insert delayed不同之处在于:立即返回结果,后台进行处理插入. 还有一个技巧是在一跳insert中插入多条数据,类似insert into

  • 解决Mysql数据库插入数据出现问号(?)的解决办法

    首先,我用的mysql数据库是5.7.12版本. 出现的问题: 1.插入数据显示错误,插入不成功,出现:Incorrect string value: '\xCD\xF5\xD5\xBC\xBE\xA9' for column 'Sname' at row 1 2.插入中文,虽然插入成功,但是显示:?? 解决方法: 在my.ini文件中的 [mysqld] 中加入 #character-set-server=utf8 如图所示,必须在蓝圈的上方,就是说,蓝圈内的内容必须在[mysqld]的最下面

  • mysql大批量插入数据的4种方法示例

    前言 本文主要给大家介绍了关于mysql大批量插入数据的4种方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 方法一:循环插入 这个也是最普通的方式,如果数据量不是很大,可以使用,但是每次都要消耗连接数据库的资源. 大致思维如下 (我这里写伪代码,具体编写可以结合自己的业务逻辑或者框架语法编写) for($i=1;$i<=100;$i++){ $sql = 'insert...............'; //querysql } foreach($arr as $key =

  • mysql中迅速插入百万条测试数据的方法

    对比一下,首先是用 mysql 的存储过程弄的: 复制代码 代码如下: mysql>delimiter $ mysql>SET AUTOCOMMIT = 0$$ mysql> create procedure test() begin declare i decimal (10) default 0 ; dd:loop INSERT INTO `million` (`categ_id`, `categ_fid`, `SortPath`, `address`, `p_identifier`

  • MySql中把一个表的数据插入到另一个表中的实现代码

    小编今天在写一个 将一个数据库的表数据 导入到 另一个数据库的表的时候 我是这么写的 复制代码 代码如下: <?php header("Content-type:text/html;charset=utf-8"); $conn = mysql_connect("localhost","root","");mysql_select_db('nnd',$conn);mysql_select_db('ahjk',$conn);

  • 用一条mysql语句插入多条数据

    假如有一个数据表A: id name title addtime 如果需要插入n条数据 : $time= time(); $data = array( array( 'name'=>'name1','title'=>'title1','addtime'=>$time; ), array( 'name'=>'name2','title'=>'title2','addtime'=>$time; ), array( 'name'=>'name3','title'=>

  • MYSQL批量插入数据的实现代码第1/3页

    @echo off cls set CLASSPATH=..\api\jogre.jar set CLASSPATH=%CLASSPATH%;. set CLASSPATH=%CLASSPATH%;classes set CLASSPATH=%CLASSPATH%;lib\dom4j.jar java org.jogre.server.JogreServer 建表 复制代码 代码如下: create database con_test; use con_test; create table te

  • MySQL快速插入一亿测试数据

    目录 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

  • Mysql快速插入千万条数据的实战教程

    一.创建数据库 二.创建表 1.创建 dept表 CREATE TABLE `dept` ( `id` int(11) NOT NULL, `deptno` mediumint(9) DEFAULT NULL, `dname` varchar(20) DEFAULT NULL, `loc` varchar(13) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 2.创建emp表 CREATE TABLE

  • MySql 快速插入千万级大数据的方法示例

    在数据分析领域,数据库是我们的好帮手.不仅可以接受我们的查询时间,还可以在这基础上做进一步分析.所以,我们必然要在数据库插入数据.在实际应用中,我们经常遇到千万级,甚至更大的数据量.如果没有一个快速的插入方法,则会事倍功半,花费大量的时间. 在参加阿里的天池大数据算法竞赛中(流行音乐趋势预测),我遇到了这样的问题,在没有优化数据库查询及插入之前,我花了不少冤枉时间,没有优化之前,1500万条数据,光插入操作就花费了不可思议的12个小时以上(使用最基本的逐条插入).这也促使我思考怎样优化数据库插入

  • mysql数据库如何实现亿级数据快速清理

    今天收到磁盘报警异常,50G的磁盘被撑爆了,分析解决过程如下: 1. 进入linux服务器,查看mysql文件夹中各个数据库所占的磁盘空间大小 看到了吗,光olderdb就占了25G 2. 用SQLyog登录mysql数据库,查看数据库各个表的占用空间情况 SELECT CONCAT(table_schema,'.',table_name) AS 'aaa', table_rows AS 'Number of Rows', CONCAT(ROUND(data_length/(1024*1024*

  • MySQL如何快速创建800w条测试数据表

    目录 一.数据插入思路 1.创建内存表 2.创建普通表 3.创建存储函数 4.创建存储过程 6.导入数据 7.内存不足 8.查看结果 9.插入800W条数据 二.MySQL深度分页 1.测试深度分页 一.数据插入思路 如果一条一条插入普通表的话,效率太低下,但内存表插入速度是很快的,可以先建立一张内存表,插入数据后,在导入到普通表中. 1.创建内存表  View Code 2.创建普通表 普通表参数设置和内存表相同,否则从内存表往普通标导入数据会报错.  View Code 3.创建存储函数 产

  • 使用Postgresql 实现快速插入测试数据

    1.创建常规的企业信息表 create table t_centerprises( objectid bigint not null, /*唯一编号(6位行政区号+6位sn)*/ divid uuid not null, /*行政区唯一代码*/ name text not null, /*企业名称*/ address text not null, /*企业地址*/ post text, /*企业邮编*/ contacts text, /*联系人*/ tel text, /*联系电话*/ fax

  • MySQL存储过程的创建使用以及实现数据快速插入

    目录 一,存储过程介绍 二,存储过程的优缺点 三,存储过程的创建与调用 3.1,存储过程中的常用语法及参数 3.2,存储过程的使用 四,存储过程中的变量及使用细则 4.1,变量定义 4.2,变量赋值 4.3,用户变量的使用 4.4,存储过程的一些常用查看命令 五,常用的存储过程的控制语句 5.1,条件语句 5.1.1,if-then-else 5.1.2,case语句 5.2,循环语句 5.2.1,while ……end while语句 5.2.2,repeat……end repeat语句 5.

  • jsp连接MySQL实现插入insert操作功能示例

    下午终于实现了jsp连接MySQL执行插入操作的功能.在index.jsp页面输入数据,提交到mysql--insert.jsp页面进行插入数据库的操作.  index.jsp页面代码如下: 复制代码 代码如下: <%@ page language="java" pageEncoding="utf-8"%> <%@ page contentType="text/html;charset=utf-8"%>  <%   

  • mysql数据库插入速度和读取速度的调整记录

    (1)提高数据库插入性能中心思想:尽量将数据一次性写入到Data File和减少数据库的checkpoint 操作.这次修改了下面四个配置项: 1)将 innodb_flush_log_at_trx_commit 配置设定为0:按过往经验设定为0,插入速度会有很大提高. 0: Write the log buffer to the log file and flush the log file every second, but do nothing at transaction commit.

  • 防止mysql重复插入记录的方法

    防止mysql重复插入记录的方法有很多种,常用的是ignore,Replace,ON DUPLICATE KEY UPDATE,当然我们也可以在php中加以判断了. 方案一:使用ignore关键字 如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用: 代码如下: 复制代码 代码如下: INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('test9@163.com'

随机推荐