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 20 MySQL
MySQL不使用order by实现排名的三种思路总结
Jun 02 MySQL
MySQL库表名大小写的选择
Jun 05 MySQL
MySQL系列之十三 MySQL的复制
Jul 02 MySQL
MySQL Shell import_table数据导入的实现
Aug 07 MySQL
MySQL数据库如何给表设置约束详解
Mar 13 MySQL
MySQL慢查询优化解决问题
Mar 17 MySQL
MySQL库表太大怎么办? 数据库分库分表项目实践
Apr 11 MySQL
Mysql排查分析慢sql之explain实战案例
Apr 19 MySQL
MySQL 数据表操作
May 04 MySQL
MySQL sql模式设置引起的问题
May 15 MySQL
mysql幻读详解实例以及解决办法
Jun 16 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
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
写出高质量的PHP程序
2012/02/04 PHP
PHP+MySQL投票系统的设计和实现分享
2012/09/23 PHP
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
php的ajax简单实例
2014/02/27 PHP
php文件压缩之PHPZip类用法实例
2015/06/18 PHP
php文件上传你必须知道的几点
2015/10/20 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
php array_map()函数实例用法
2021/03/03 PHP
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
模拟一个类似百度google的模糊搜索下拉列表
2014/04/15 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
探究JavaScript中的五种事件处理程序方式
2016/12/07 Javascript
Bootstrap CSS组件之导航(nav)
2016/12/17 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
python根据url地址下载小文件的实例
2018/12/18 Python
获取Pytorch中间某一层权重或者特征的例子
2019/08/17 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
物业客服专员岗位职责
2013/11/30 职场文书
信息专业个人的自我评价
2013/12/27 职场文书
工商管理专业自荐信
2014/06/03 职场文书
公共场所禁烟标语
2014/06/25 职场文书
语文教师个人工作总结
2015/02/06 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
保险公司客户经理岗位职责
2015/04/09 职场文书
2015年学生管理工作总结
2015/05/26 职场文书
2016师德师风学习心得体会
2016/01/12 职场文书
2016年九九重阳节活动总结
2016/04/01 职场文书
tomcat正常启动但网页却无法访问的几种解决方法
2022/05/06 Servers