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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
处理单表6亿+数据的刷数据操作,最高效的方式取决于具体的需求和环境。以下是一些常见的优化策略,可以考虑根据实际情况选择合适的方法: 1. 批量操作:使用批量操作可以减少与数据库的交互次数,提高效率。可以将需要刷入的数据分为多个批次,每次处理一部分数据,并使用批量插入或更新操作来一次性处理多行数据。这样可以减少网络开销和数据库操作的开销。 2. 并行处理:将数据划分为多个分区,使用多线程或者分布式计算框架进行并行处理。这样可以同时处理多个分区的数据,提高整体的处理速度。需要注意避免对同一行数据进行并发更新,避免产生数据不一致的问题。 3. 使用索引:根据刷数据的需求,合理地创建索引可以提高查询和更新的效率。索引可以帮助数据快速定位到需要更新的数据行,减少全表扫描的开销。但是需要注意索引会增加写入操作的开销,因此需要根据实际情况权衡利弊。 4. 分批次处理:如果一次性处理整个表的数据过于耗时或资源消耗过大,可以考虑将数据分成多个较小的批次进行处理。例如,可以按照某个条件将数据进行分片,每次只处理一个分片的数据。这样可以减少单次处理的数据量,提高整体的处理效率。 5. 数据预处理:如果刷数据的过程中需要进行复杂的计算或者数据转换,可以考虑提前进行数据预处理。通过将计算结果或转换后的数据存储在临时表中,可以减少刷入操作的复杂度,提高效率。 6. 合理配置数据库参数:根据数据库的实际情况,合理配置数据库参数,例如调整缓冲区大小、并发连接数等,可以提高数据库的性能和并发处理能力。 以上是一些常见的优化策略,具体选择哪种方式需要根据具体情况进行评估和测试,以找到最适合的处理方式。同时,需要注意在刷数据过程中对数据库的影响,避免对正常业务操作造成过大的影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值