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 InnoDB ReplicaSet(副本集)简单介绍
Apr 24 MySQL
MySQL 可扩展设计的基本原则
May 14 MySQL
MySQL系列之七 MySQL存储引擎
Jul 02 MySQL
MySQL之select、distinct、limit的使用
Nov 11 MySQL
一文搞清楚MySQL count(*)、count(1)、count(col)区别
Mar 03 MySQL
mysql使用instr达到in(字符串)的效果
Apr 03 MySQL
排查MySQL生产环境索引没有效果
Apr 11 MySQL
MYSQL如何查看操作日志详解
May 30 MySQL
MySQL实现字段分割一行转多行的示例代码
Jul 07 MySQL
postgresql如何找到表中重复数据的行并删除
May 08 MySQL
关于MySQL中explain工具的使用
May 08 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
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
php实现批量下载百度云盘文件例子分享
2014/04/10 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
phpwind放自动注册方法
2006/12/02 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
15款优秀的jQuery导航菜单插件分享
2011/07/19 Javascript
js 获取、清空input type=&quot;file&quot;的值(示例代码)
2013/12/24 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
js 奇葩技巧之隐藏代码
2017/08/11 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
2017/08/22 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
2018/12/20 Javascript
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
Python中逗号的三种作用实例分析
2015/06/08 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
将Django项目部署到CentOs服务器中
2018/10/18 Python
pycharm修改界面主题颜色的方法
2019/01/17 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
对Python _取log的几种方式小结
2019/07/25 Python
python 中值滤波,椒盐去噪,图片增强实例
2019/12/18 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
Django url 路由匹配过程详解
2021/01/22 Python
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
万里长城导游词
2015/01/30 职场文书
关于倡议书的范文
2015/04/29 职场文书
2016年暑期见闻作文
2015/11/25 职场文书
先进个人事迹材料(2016推荐版)
2016/03/01 职场文书
2019脱贫攻坚工作总结报告范本!
2019/08/06 职场文书
Python控制台输出俄罗斯方块的方法实例
2021/04/17 Python