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获取所有分类的前N条记录
May 07 MySQL
MySQL数字类型自增的坑
May 07 MySQL
Navicat for MySQL的使用教程详解
May 27 MySQL
详细谈谈MYSQL中的COLLATE是什么
Jun 11 MySQL
mysql脏页是什么
Jul 26 MySQL
面试中老生常谈的MySQL问答集锦夯实基础
Mar 13 MySQL
MySQL慢查询优化解决问题
Mar 17 MySQL
MySQL视图概念以及相关应用
Apr 19 MySQL
MySQL 数据表操作
May 04 MySQL
MySQL的prepare使用以及遇到的bug
May 11 MySQL
MySql数据库触发器使用教程
Jun 01 MySQL
MySQL 原理与优化之原数据锁的应用
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
咖啡与水的关系
2021/03/03 冲泡冲煮
通过对php一些服务器端特性的配置加强php的安全
2006/10/09 PHP
php MYSQL 数据备份类
2009/06/19 PHP
mac os快速切换多个PHP版本的方法
2017/03/07 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
JavaScript中数组的排序、乱序和搜索实现代码
2011/11/30 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
2016/12/02 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
vue 引入公共css文件的简单方法(推荐)
2018/01/20 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
2018/09/29 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
[04:15]DOTA2-DPC中国联赛1月19日Recap集锦
2021/03/11 DOTA
Python中列表(list)操作方法汇总
2014/08/18 Python
Python装饰器用法示例小结
2018/02/11 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
python获取地震信息 微信实时推送
2019/06/18 Python
python英语单词测试小程序代码实例
2019/09/09 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
深入浅出CSS3 background-clip,background-origin和border-image教程
2011/01/27 HTML / CSS
今天学到的CSS最新技术(与图片背景相关)
2012/12/24 HTML / CSS
一个精品风格的世界:Atterley
2019/05/01 全球购物
西班牙最大的婴儿用品网上商店:Bebitus
2019/05/30 全球购物
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
村长贪污检举信
2014/04/04 职场文书
2014年团支书工作总结
2014/11/14 职场文书
2016大学军训通讯稿
2015/11/25 职场文书
科级干部培训心得体会
2016/01/06 职场文书
2019安全宣传标语大全
2019/08/14 职场文书
《家世》读后感:看家训的力量
2019/12/30 职场文书
TS 类型收窄教程示例详解
2022/09/23 Javascript