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)