MySQL Test Run(MTR)---对于动态日志时间计算差值的处理

大概思路:

  1. grep 时间,拿出来两条
  2. sed处理成insert 的语句
  3. 在库里建表,把这两个数插进去。
  4. 然后计算这两个值的差值
  5. 把差值赋予变量,做if判断,在10-30中间就算通过
--exec grep 'going' $MYSQLTEST_VARDIR/log/mysqld.5.err|head -n 2 > $MYSQLTEST_VARDIR/tmp/1.sql

删除.之后的所有内容

--exec sed   -i  "s/\..*//"   $MYSQLTEST_VARDIR/tmp/1.sql

在每一行的首位加单引号

--exec sed       -ri      "s/(^|\$)/'/g"  $MYSQLTEST_VARDIR/tmp/1.sql
--exec sed -i "s/^/insert into  logtime(c2) values(/"  $MYSQLTEST_VARDIR/tmp/1.sql

末尾加分号

--exec sed  -i   "s/\$/) ;/"  $MYSQLTEST_VARDIR/tmp/1.sql

这里没有使AWK语句,虽然在终端AWK没有问题,但是放在mtr中它不会处理并打印到对应的文件中。全部使用sed命令处理文本。不要试图用AWK来处理grep,会变得不幸。

贴出处理语句写法:

connection conn8;

--echo "打印切主节点的错误日志"

sleep  60;

--exec grep 'going' $MYSQLTEST_VARDIR/log/mysqld.5.err|head -n 2 > $MYSQLTEST_VARDIR/tmp/1.sql
--exec sed   -i  "s/\..*//"   $MYSQLTEST_VARDIR/tmp/1.sql
--exec sed       -ri      "s/(^|\$)/'/g"  $MYSQLTEST_VARDIR/tmp/1.sql
--exec sed -i "s/^/insert into  logtime(c2) values(/"  $MYSQLTEST_VARDIR/tmp/1.sql
--exec sed  -i   "s/\$/) ;/"  $MYSQLTEST_VARDIR/tmp/1.sql

sleep 60;


--exec grep 'going' $MYSQLTEST_VARDIR/log/mysqld.5.err|tail -n 2 > $MYSQLTEST_VARDIR/tmp/2.sql
--exec sed   -i  "s/\..*//"   $MYSQLTEST_VARDIR/tmp/2.sql
--exec sed       -ri      "s/(^|\$)/'/g"  $MYSQLTEST_VARDIR/tmp/2.sql
--exec sed -i "s/^/insert into  logtime(c2) values(/"  $MYSQLTEST_VARDIR/tmp/2.sql
--exec sed  -i   "s/\$/) ;/"  $MYSQLTEST_VARDIR/tmp/2.sql

......

#建一个表来存储时间
create table logtime(c1 int NOT NULL primary key AUTO_INCREMENT,c2 datetime);

#由于插入的时间每次都是不一样的,所以执行source时候,
#insert 语句如果显示出来会导致每次的result文件都不一样,
#因此使用disable_query_log/enable_query_log来控制输出。

--disable_query_log
--source $MYSQLTEST_VARDIR/tmp/1.sql
--enable_query_log
#这个计算的sql怎么写都可以
--let $timeinterval=`select (select c2 from logtime order by c1 desc limit 1)-c1 from logtime order by c1 asc limit 1`

if  (10 <= $timeinterval <= 30) 
{
echo  pass;        
}

#清空之后,处理第二次tail的时间间隔
truncate table logtime;

#同上
--disable_query_log
--source $MYSQLTEST_VARDIR/tmp/2.sql
--enable_query_log

--let $timeinterval_var=`select (select c2 from logtime order by c1 desc limit 1)-c1 from logtime order by c1 asc limit 1`

if  (10 <= $timeinterval_var <= 30)
{
echo  pass;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值