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 相关文章推荐
虚拟机linux端mysql数据库无法远程访问的解决办法
May 26 MySQL
Navicat for MySQL的使用教程详解
May 27 MySQL
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
May 29 MySQL
Unity连接MySQL并读取表格数据的实现代码
Jun 20 MySQL
Mysql中调试存储过程最简单的方法
Jun 30 MySQL
MySQL优化常用的19种有效方法(推荐!)
Mar 17 MySQL
MySQL实现配置主从复制项目实践
Mar 31 MySQL
MySQL创建管理HASH分区
Apr 13 MySQL
Windows 64位 安装 mysql 8.0.28 图文教程
Apr 19 MySQL
MySQL 语句执行顺序举例解析
Jun 05 MySQL
MySQL解决Navicat设置默认字符串时的报错问题
Jun 16 MySQL
MySQL 原理与优化之Update 优化
Aug 14 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
《OVERLORD》手游英文版即将上线 手机上也能扮演骨王
2020/04/09 日漫
一周学会PHP(视频)Http下载
2006/12/12 PHP
《PHP编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
php获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
Ajax+Jpgraph实现的动态折线图功能示例
2019/02/11 PHP
JS日历 推荐
2006/12/03 Javascript
JavaScript的9个陷阱及评点分析
2008/05/16 Javascript
JavaScript 对象模型 执行模型
2009/12/06 Javascript
理解Javascript_08_函数对象
2010/10/15 Javascript
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
js将json格式内容转换成对象的方法
2013/11/01 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
cocos2dx骨骼动画Armature源码剖析(一)
2015/09/08 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
2017/01/17 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
2017/07/27 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
Vue-cli打包后如何本地查看的操作
2020/09/02 Javascript
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
python生成随机红包的实例写法
2019/09/02 Python
Windows上安装tensorflow  详细教程(图文详解)
2020/02/04 Python
HTML5 Canvas概述
2009/08/26 HTML / CSS
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
HEMA英国:荷兰原创设计
2018/08/28 全球购物
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
说出数据连接池的工作机制是什么?
2013/04/19 面试题
幼儿园新年寄语
2014/04/03 职场文书
小学优秀教育工作者事迹材料
2014/05/09 职场文书
文明班集体申报材料
2014/05/23 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android
Java对文件的读写操作方法
2022/04/29 Java/Android