MySQL神器—快速生成大量测试数据mysqlslap

背景

老任最近开始准备全面学习下Percona-Tookit工具系列,熟悉会的,学习之前没有了解到的,
所以过程中难免需要一些测试数据,测试数据生成呢,网上相信一搜一大篇,但是老任最近学习
到了一个新的方法分享给大家。顺便总结一下都有哪些快速生成方法。

快速生成测试数据方法

老任总结了一下三种方式分享给大家。

  1. 代码操作数据库生成数据。通过代码操作数据库借口,比如pymysql,jdbc,shell脚本生成测试数据。
  2. 存储过程操作数据库生成数据。网上有很多的这种,写一个存储过程,然后call一下即可。
  3. mysqlslap生成测试数据。

前两种方式,相信大家基本都知道,但是第三种可能大家很少用到。
这里我主要介绍一下第三种方式。

先简单介绍一下mysqlslap

mysqlslap
usage:
MySQL的性能压测工具,使用简单,MySQL自带无需单独进行安装
就像MySQL命令使用一样方便,类似于mysqldump这些命令一样,系统自带。


#Example
#先创建一个测试表,表结构如下
mysql [localhost:5734] {msandbox} (test) > create table t(id int primary key not null auto_increment,content varchar(128),num int,create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间');
Query OK, 0 rows affected (0.01 sec)

mysql [localhost:5734] {msandbox} (test) > show create table t;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                        |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t     | CREATE TABLE `t` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` varchar(128) DEFAULT NULL,
  `num` int(11) DEFAULT NULL,
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1           |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.02 sec)

#开始调用mysqlslap命令生成测试数据
$ mysqlslap -umsandbox -$Pass -P 5734 -S /tmp/mysql_sandbox5734.sock --number-of-queries=1000000 --create-schema=test --concurrency=10 --query="insert into t(content,num) values(uuid(),rand()*1000);"
mysqlslap: [Warning] Using a password on the command line interface can be insecure.
Benchmark
	Average number of seconds to run all queries: 71.634 seconds
	Minimum number of seconds to run all queries: 71.634 seconds
	Maximum number of seconds to run all queries: 71.634 seconds
	Number of clients running queries: 10
	Average number of queries per client: 100000
#大概解释一下上述的参数含义
#--number-of-queries=1000000 要生成的测试数据的数量
#--create-schema=test 指定使用哪个数据库
#--concurrency=10  并发的数量
#--query=""		执行的sql内容
#最后出来的结果是执行sql花费的时间

#查看数据库中是否成功
#这里数量是对的 100w条数据
mysql [localhost:5734] {msandbox} (test) > select count(*) from t;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (0.21 sec)

#数据内容,非常完美
mysql [localhost:5734] {msandbox} (test) > select * from t limit 10;
+----+--------------------------------------+------+---------------------+---------------------+
| id | content                              | num  | create_time         | update_time         |
+----+--------------------------------------+------+---------------------+---------------------+
|  1 | af9bbc4e-f9ec-11eb-938d-0050569feb60 |   80 | 2021-08-10 23:07:31 | 2021-08-10 23:07:31 |
|  2 | af9bd5f6-f9ec-11eb-938d-0050569feb60 |  798 | 2021-08-10 23:07:31 | 2021-08-10 23:07:31 |
|  3 | af9c2051-f9ec-11eb-938d-0050569feb60 |  684 | 2021-08-10 23:07:31 | 2021-08-10 23:07:31 |
|  4 | af9c2139-f9ec-11eb-938d-0050569feb60 |  923 | 2021-08-10 23:07:31 | 2021-08-10 23:07:31 |
|  5 | af9c5be9-f9ec-11eb-938d-0050569feb60 |  182 | 2021-08-10 23:07:31 | 2021-08-10 23:07:31 |
|  6 | af9c6923-f9ec-11eb-938d-0050569feb60 |  222 | 2021-08-10 23:07:31 | 2021-08-10 23:07:31 |
|  7 | af9c7202-f9ec-11eb-938d-0050569feb60 |  397 | 2021-08-10 23:07:31 | 2021-08-10 23:07:31 |
|  8 | af9c7219-f9ec-11eb-938d-0050569feb60 |  781 | 2021-08-10 23:07:31 | 2021-08-10 23:07:31 |
|  9 | af9c79e6-f9ec-11eb-938d-0050569feb60 |  908 | 2021-08-10 23:07:31 | 2021-08-10 23:07:31 |
| 10 | af9c82a8-f9ec-11eb-938d-0050569feb60 |  321 | 2021-08-10 23:07:31 | 2021-08-10 23:07:31 |
+----+--------------------------------------+------+---------------------+---------------------+
10 rows in set (0.00 sec)

总结

以上就是过程,我相信明眼人肯定懂得这样生成数据的好处,
对于DBA来说,想生成一些测试数据,一个建表语句,一个mysqlslap命令,
这样操作,岂不是很快,哈哈哈哈,是不是感觉又长姿势了,关注老任,
带你解锁更多新姿势!!!!

对于MySQL 8.0版本,可以使用mysqlslap命令生成测试数据语句。根据引用\[2\]中提供的示例,可以使用以下命令生成测试数据语句: mysqlslap --concurrency=5 --iterations=20 --number-int-cols=2 --number-char-cols=3 --auto-generate-sql 这个命令将使用两个INT列和三个VARCHAR列的表构建查询SQL语句,并使用五个客户端执行每个查询20次。请注意,这个命令不会创建表或插入数据,它将使用先前测试的模式和数据。 #### 引用[.reference_title] - *1* [MySQL 8.0与5.7的json性能对比](https://blog.csdn.net/wzj_whut/article/details/88417826)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [10、MySQL 8.0参考手册 4.5.9 mysqlslap - 加载仿真客户端](https://blog.csdn.net/dandan520520/article/details/79662747)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [MySQL8.0 官方运维工具集合](https://blog.csdn.net/dreamyuzhou/article/details/118090430)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渔不是鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值