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完整性约束的定义与实例教程
May 30 MySQL
python中的mysql数据库LIKE操作符详解
Jul 01 MySQL
MySQL中存储时间的最佳实践指南
Jul 01 MySQL
通过shell脚本对mysql的增删改查及my.cnf的配置
Jul 07 MySQL
MySQL外键约束(FOREIGN KEY)案例讲解
Aug 23 MySQL
一文带你探究MySQL中的NULL
Nov 11 MySQL
解决Mysql多行子查询的使用及空值问题
Jan 22 MySQL
一条 SQL 语句执行过程
Mar 17 MySQL
MySQL插入数据与查询数据
Mar 25 MySQL
MySQL创建管理KEY分区
Apr 13 MySQL
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
Apr 18 MySQL
delete in子查询不走索引问题分析
Jul 07 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
索尼SONY ICF-7600A(W)电路分析
2021/03/01 无线电
php+xml编程之SimpleXML的应用实例
2015/01/24 PHP
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
PHP在linux上执行外部命令的方法
2017/02/06 PHP
php修改数组键名的方法示例
2017/04/15 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
基于php+MySql实现学生信息管理系统实例
2020/08/04 PHP
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
js网页滚动条滚动事件实例分析
2015/05/05 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
js 调用百度分享功能
2017/02/27 Javascript
前端常见跨域解决方案(全)
2017/09/19 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
nginx部署多个vue项目的方法示例
2020/09/06 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
详解JavaScript执行模型
2020/11/16 Javascript
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
Python快速排序算法实例分析
2017/11/29 Python
python查看模块,对象的函数方法
2018/10/16 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
2019/02/07 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
实例讲解Python 迭代器与生成器
2020/07/08 Python
CSS3 创建网页动画实现弹跳球动效果
2018/10/30 HTML / CSS
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
财务经理岗位职责
2013/11/09 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
学位证书委托书
2014/09/30 职场文书
考试作弊检讨
2015/01/27 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技