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
一篇文章弄懂MySQL查询语句的执行过程
May 07 MySQL
Mysql Online DDL的使用详解
May 20 MySQL
MySQL中distinct与group by之间的性能进行比较
May 26 MySQL
解析MySQL binlog
Jun 11 MySQL
python中的mysql数据库LIKE操作符详解
Jul 01 MySQL
SQL注入详解及防范方法
Dec 06 MySQL
MySQL七大JOIN的具体使用
Feb 28 MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
Apr 18 MySQL
mysql字段为NULL索引是否会失效实例详解
May 30 MySQL
mysql查看表结构的三种方法总结
Jul 07 MySQL
jdbc中自带MySQL 连接池实践示例
Jul 23 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
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
PHP获取当前页面完整URL的实现代码
2013/06/10 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
浅谈thinkphp的实例化模型
2015/01/04 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
php实现给一张图片加上水印效果
2016/01/02 PHP
smarty模板数学运算示例
2016/12/11 PHP
php实现网页端验证码功能
2017/07/11 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
由Javascript实现的页面日历
2011/11/04 Javascript
js有关元素内容操作小结
2011/12/20 Javascript
20个最新的jQuery插件
2012/01/13 Javascript
使用JQuery实现智能表单验证功能
2016/03/08 Javascript
关于JavaScript中forEach和each用法浅析
2017/07/27 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
Javascript异步编程async实现过程详解
2020/04/02 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
jQuery实现回到顶部效果
2020/10/19 jQuery
jquery实现抽奖功能
2020/10/22 jQuery
python抓取京东商城手机列表url实例代码
2013/12/18 Python
Python库urllib与urllib2主要区别分析
2014/07/13 Python
在Python中使用base64模块处理字符编码的教程
2015/04/28 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
在django中,关于session的通用设置方法
2019/08/06 Python
HTML5 Canvas API中drawImage()方法的使用实例
2016/03/25 HTML / CSS
德国化妆品和天然化妆品网上商店:kosmetikfuchs.de
2017/06/09 全球购物
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
物流仓储计划书
2014/01/10 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
北京英文导游词
2015/02/12 职场文书
看雷锋电影观后感
2015/06/10 职场文书
青年文明号创建口号大全
2015/12/25 职场文书
go语言-在mac下brew升级golang
2021/04/25 Golang