MySQL快速生成大量测试数据 (脚本一键生成分表数据)

文章介绍了一个Shell脚本,用于快速创建多张MySQL测试表并填充数据,模拟真实业务中的数据增长趋势。脚本支持指定数据库、表名和循环次数,生成的数据具有离散分布,并随时间增加。

    生成128个分表的测试数据敲到手累;

    生成的测试数据虽然有离散分布,但随着时间的增长数据量不增反降,不符合大多数线上业务的增长趋势;

    生成的测试数据部分超过当前日期。

具体表现如下图所示:

 

 

我们直接看下脚本的用法及效果(文末附脚本源码)

    [root@VM-0-6-centos ~]# sh createTestData.sh --help
    Usage:  sh createTestData.sh ${mysqlHost} ${mysqlPort} ${mysqlUser} ${mysqlPwd} ${DBName} ${tableName} ${runBatch}
    Usage1: sh createTestData.sh localhost 3306 root '123456' 'test' 'testTable' 20              # 在test库中生成testTable表,记录数为104万+
    Usage2: sh createTestData.sh localhost 3306 root '123456' 'test' 'testTable_{1..10}' 20      # 在test库中生成testTable_1、testTable_2......testTable_10共10张表,每表表记录数为104万+
    Usage2: sh createTestData.sh localhost 3306 root '123456' 'test' 'testTable_{01..10}' 20     # 在test库中生成testTable_01、testTable_02......testTable_10共10张表,每表表记录数为104万+
            注意:'testTable_{1..10}' 要用单引号引起来
     
    runBatch是循环次数:
    ------------------------------------
            runBatch=15生成32768记录
            runBatch=16生成65536记录
            runBatch=17生成13万+记录
            runBatch=18生成26万+记录
            runBatch=19生成52万+记录
            runBatch=20生成104万+记录
            runBatch=21生成209万+记录
            runBatch=22生成419万+记录
            runBatch=23生成838万+记录
            runBatch=24生成1677万+记录
            runBatch=25生成3355万+记录
            runBatch=26生成6710万+记录
            runBatch=27生成1.3亿+记录

 --help参数,可以看到有三种用法举例:

    第一种是在test库(test库需要先手工创建)生成一张表名叫testTable的104万+记录的单表测试数据;

    第二种是在test库生成表名为testTable_1、testTable_2、testTable_3......testTable_10共10张表,每张表的记录是104万+;

    第三种和第二种差不多,只是分表的表名有所区别,当分表是个位数时补0,例如testTable_01、testTable_02、testTable_03......。

下面我们演示生成testTable_01~testTable_10这十张表的过程:

 

这样就生成了十张分表的测试表和测试数据,且生成的数据更接近实际业务情况。如下:

 

当前日期2021-08-09,生成的测试数据都是当天之前的,且从分布上来看,随着时间的推移,注册人数越来越多(八月的数据少是因为截止到目前,八月只有9天数据),这和现实中的大多数产品表现基本一致。

附:shell脚本代码-createTestData.sh

   #!/bin/bash
#
#Author: 
#Date: 2021-06-08
#Description: 快速创建多个表及测试数据
#Usage: 请查看--help
source /etc/profile
source ~/.bash_profile
 
 
############################################################# 功能函数 Begin ##################################################################

        #显示消息
        #showType='errSysMsg/errSys/errUserMsg/warning/msg/msg2/OK'
        #错误输出(以红色字体输出) errSysMsg:捕捉系统错误后发现相信并退出;errSys:捕捉到系统错误后退出;errUserMsg:自定义错误并退出,但不退出(errSysMsg及errUserMsg可以赋第三个参数isExit为非1来控制不退出)
        #警告(以黄色字体输出)  warning:显示warning,但不退出
        #显示信息(以白色字体输出,OK以绿色输出) msg:输出信息并换行;msg2:输出信息不换行;OK:输出绿色OK并换行

        function showMsg()
        {
                errState=${PIPESTATUS[0]}
                #errState="$?"
                #showMsgTestMode=1      #如果设为1,则把有exit 1均改为return 0,便于调试其中函数
                local showType="$1"
                local showContent="$2"
                local isExit="$3"
                #如果isExit为空,则默认出错时该退出
                if [ "${isExit}" = "" ]; then
                        isExit=1
                fi
                isShowRelation=`echo "${pid}" | sed "s/-->/\n0x01_Flag/g" | grep "0x01_Flag" | wc -l`
                showType=`echo ${showType} | tr 'A-Z' 'a-z'`
                case "${showType}" in
                        errsysmsg)
                                if [ "${errState}" -ne 0 ]; then
                                        echo -e "\033[31;49;1m[`date +%F' '%T`] Error: ${showContent}\033[39;49;0m" | tee -a ${logFile} >&2
                                        if [ "${isShowRelation}" -gt 1 ]; then  # 调用层次超过1次时才显示调用关系
                                                echo -e "\033[31;49;1m[`date +%F' '%T`] Call Relation: bash${pid}\033[39;49;0m" | tee -a ${logFile} >&2
                                        fi
                                        if [ "${isExit}" -eq 1 ]; then
                                                if [ "${showMsgTestMode}" = "1" ]; then
                                                        return 1
                          &nbs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值