MySQL生成千万测试数据以及遇到的问题


Posted in MySQL onAugust 05, 2022

1、创建基础表结构

CREATE TABLE `t_user` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `c_user_id` varchar(36) NOT NULL DEFAULT '',
 `c_name` varchar(22) NOT NULL DEFAULT '',
 `c_province_id` int(11) NOT NULL,
 `c_city_id` int(11) NOT NULL,
 `create_time` datetime NOT NULL,
 PRIMARY KEY (`id`),
 KEY `idx_user_id` (`c_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2、创建内存表

直接往实表添加数据比较慢,所以我们先插入内存表,然后再同步到实表。

CREATE TABLE `t_user_memory` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `c_user_id` varchar(36) NOT NULL DEFAULT '',
 `c_name` varchar(22) NOT NULL DEFAULT '',
 `c_province_id` int(11) NOT NULL,
 `c_city_id` int(11) NOT NULL,
 `create_time` datetime NOT NULL,
 PRIMARY KEY (`id`),
 KEY `idx_user_id` (`c_user_id`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4;

3、创建存储过程和函数

# 创建随机字符串
delimiter $$
CREATE DEFINER = `root` @`%` FUNCTION `randStr` ( n INT ) RETURNS VARCHAR ( 255 ) CHARSET utf8mb4 DETERMINISTIC BEGIN
	DECLARE
		chars_str VARCHAR ( 100 ) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
	DECLARE
		return_str VARCHAR ( 255 ) DEFAULT '';
	DECLARE
		i INT DEFAULT 0;
	WHILE
			i < n DO
			

			SET return_str = concat(
				return_str,
			substring( chars_str, FLOOR( 1 + RAND() * 62 ), 1 ));
		
		SET i = i + 1;
		
	END WHILE;
	RETURN return_str;
	
	END $$ 
# 创建随机时间的函数,sd和ed两个入参代表生成的时间是这个时间范围内的。sd开始时间,ed截止时间。	
CREATE DEFINER = `root` @`%` FUNCTION `randDataTime` ( sd DATETIME, ed DATETIME ) RETURNS datetime DETERMINISTIC BEGIN
	DECLARE
		sub INT DEFAULT 0;
	DECLARE
		ret DATETIME;
	
	SET sub = ABS(
	UNIX_TIMESTAMP( ed )- UNIX_TIMESTAMP( sd ));
	
	SET ret = DATE_ADD( sd, INTERVAL FLOOR( 1+RAND ()*( sub - 1 )) SECOND );
	RETURN ret;

END $$ 

# 创建插入数据存储过程
CREATE DEFINER = `root` @`%` PROCEDURE `add_t_user_memory` ( IN n INT ) BEGIN
	DECLARE
		i INT DEFAULT 1;
	WHILE
			( i <= n ) DO
			INSERT INTO t_user_memory ( c_user_id, c_name, c_province_id, c_city_id, create_time )
		VALUES
			(
				uuid(),
				randStr ( 20 ),
				FLOOR( RAND() * 1000 ),
				FLOOR( RAND() * 100 ),
				randDataTime ( "2020-01-01", "2021-01-01" ));
		

		SET i = i + 1;
		
	END WHILE;

END $$
delimiter ;

4、执行存储过程

存储过程当中的数字就是要生成的数量,自行填写。

CALL add_t_user_memory(10);

100万大概需要8分钟!

MySQL生成千万测试数据以及遇到的问题

5、遇到的问题

创建存储过程和执行的时候可能会出现以下两种问题:

5.1、1449错误

在创建存储过程的时候可能会出现1449:错误:

mysql 1449 : The user specified as a definer (‘root’@‘%’) does not exist

经查询是权限问题,解决办法:

运行sql:

grant all privileges on *.* to 'root'@'%' identified by ".";
flush privileges;

5.2、1114错误

当生成数量大的时候就可能会报这个错误:

MySQL生成千万测试数据以及遇到的问题

解决方法:在my.cnf中修改max_heap_table_size = 256M tmp_table_size = 256M,重启MySQL服务(my.cnf在mysql安装路径),如果还不够用根据自己电脑自行修改。如果是线上服务器,最好不要自行修改,还是跟运维多沟通沟通,避免出现问题。

MySQL生成千万测试数据以及遇到的问题

show VARIABLES like '%TABLE_size%';

改完可以在这进行查看:

MySQL生成千万测试数据以及遇到的问题

6、同步数据

INSERT INTO t_user SELECT * FROM t_user_memory;

总结

到此这篇关于MySQL生成千万测试数据以及遇到的问题的文章就介绍到这了,更多相关MySQL生成千万测试数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL表的增删改查(基础)
Apr 05 MySQL
Windows10下安装MySQL8
Apr 06 MySQL
详解MySQL的半同步
Apr 22 MySQL
MySQL 数据类型选择原则
May 27 MySQL
MySQL Router实现MySQL的读写分离的方法
May 27 MySQL
Mysql文件存储图文详解
Jun 01 MySQL
MySQL 8.0 Online DDL快速加列的相关总结
Jun 02 MySQL
MySQL系列之五 视图、存储函数、存储过程、触发器
Jul 02 MySQL
Mysql实现简易版搜索引擎的示例代码
Aug 30 MySQL
mysql timestamp比较查询遇到的坑及解决
Nov 27 MySQL
Mysql分库分表之后主键处理的几种方法
Feb 15 MySQL
MySQL分区路径子分区再分区
Apr 13 MySQL
面试官问我Mysql的存储引擎了解多少
MySQL索引失效场景及解决方案
Jul 23 #MySQL
MySQL添加索引特点及优化问题
Jul 23 #MySQL
MySQL表字段数量限制及行大小限制详情
Jul 23 #MySQL
MySQL分布式恢复进阶
Jul 23 #MySQL
jdbc中自带MySQL 连接池实践示例
Jul 23 #MySQL
MySQL池化框架学习接池自定义
Jul 23 #MySQL
You might like
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
粗略计算在线时间,bug:ip相同
2006/12/09 PHP
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
php5.3以后的版本连接sqlserver2000的方法
2014/07/28 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
nginx下安装php7+php5
2016/07/31 PHP
js 字符串转换成数字的三种方法
2013/03/23 Javascript
jquery 通过name快速取值示例
2014/01/24 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
jquery获取url参数及url加参数的方法
2015/10/26 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
js 截取或者替换字符串中的数字实现方法
2016/06/13 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
[47:06]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第一局
2016/03/05 DOTA
python实现微信远程控制电脑
2018/02/22 Python
Python装饰器知识点补充
2018/05/28 Python
python中itertools模块zip_longest函数详解
2018/06/12 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
python的json包位置及用法总结
2020/06/21 Python
Python使用OpenPyXL处理Excel表格
2020/07/02 Python
html5中监听canvas内部元素点击事件的三种方法
2019/04/28 HTML / CSS
html5 canvas-2.用canvas制作一个猜字母的小游戏
2013/01/07 HTML / CSS
台湾百利市购物中心:e-Payless
2017/08/16 全球购物
国际花店:Pickup Flowers
2020/04/10 全球购物
Nike瑞士官网:Nike CH
2021/01/18 全球购物
外贸学院会计专业应届生求职信
2013/11/14 职场文书
珍珠鸟教学反思
2014/02/01 职场文书
感恩教育月活动总结
2014/07/07 职场文书
地方白酒代理协议书
2014/10/25 职场文书
创业计划书之校园超市
2019/09/12 职场文书
Pandas加速代码之避免使用for循环
2021/05/30 Python
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技