大概思路:
- grep 时间,拿出来两条
- sed处理成insert 的语句
- 在库里建表,把这两个数插进去。
- 然后计算这两个值的差值
- 把差值赋予变量,做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;
}