运维定时自动刷入SQL脚本

有些时候,运维需要单独执行某些SQL语句,还得是低峰期,为了不半夜爬起来工作,所以就写了个定时自动执行的脚本;

功能:将需要刷入的SQL写入到flush.sh后,创建定时任务,到时会自动执行脚本刷入,且有详细日志输出到对应flush_sql.log

flush_sql.sh

通过只修改SQL语句,创建定时任务,以实现自动执行SQL语句,方便运维人员工作

使用方式:只需将所刷的SQL语句粘贴在脚本内的SQL代码块的-e下面即可

#!/bin/bash
# 定时刷入SQL脚本
# 只修改两处具体执行SQL的语句,一个为记录SQL到日志,一个为执行SQL

function flush_sql() {
# Variable
HOST='172.23.0.244'
LOG_FILE='/root/scripts/flush_sql.log'

# Command
START_TIME=`date +%F' %H:%H:%S'`
    echo "--------------------------------------" >> $LOG_FILE
    echo "" >> $LOG_FILE
echo "$START_TIME Start Flush SQL..." >> $LOG_FILE

# 记录刷入的SQL到日志内
cat >> $LOG_FILE <<EOF
SQL:
    ALTER TABLE ehu_c2c.order_sub_info
    ADD COLUMN goods_type int(1) DEFAULT 0  COMMENT '订单商品类型:0 普通商品 1 新人专享 2 特价秒杀 3 兑换商品' AFTER complete_time;
EOF

####################### SQL #######################
mysql -h $HOST -uroot -p123 -e "

ALTER TABLE ehu_c2c.order_sub_info
ADD COLUMN goods_type int(1) DEFAULT 0  COMMENT '订单商品类型:0 普通商品 1 新人专享 2 特价秒杀 3 兑换商品' AFTER complete_time;

"
####################### SQL #######################

# 抓取SQL执行状态
if [ $? -eq 0 ];then
    STATUS='true'
else
    STATUS='false'
fi

#sleep 0.01
END_TIME=`date +%F' %H:%H:%S'`

# 转换时间差为秒
start_seconds=$(date --date="$START_TIME" +%s);
end_seconds=$(date --date="$END_TIME" +%s);
USE_TIME="$((end_seconds-start_seconds))"s

# 调用SQL执行状态
if [ $STATUS == true ];then
    echo "$END_TIME Flush Successfully! Used Time $USE_TIME">> $LOG_FILE
    echo "" >> $LOG_FILE
else
    echo "$END_TIME Flush False! Used Time $USE_TIME" >> $LOG_FILE
    echo "" >> $LOG_FILE
fi
}

flush_sql

flush.log

脚本执行完毕后会自动生成日志文件,并将执行状态、所耗时间追加到日志内

以下为日志状态测试举例

[root@h20 ~]# cat scripts/flush_sql.log 
2022-03-22 17:17:38 Start Flush SQL...
SQL:
	ALTER TABLE ehu_c2c.order_sub_info
	ADD COLUMN goods_type int(1) DEFAULT 0  COMMENT '订单商品类型:0 普通商品 1 新人专享 2 特价秒杀 3 兑换商品' AFTER complete_time;
2022-03-22 17:17:51 Flush Successfully! Used Time 13s

2022-03-22 17:17:55 Start Flush SQL...
SQL:
	aaa
2022-03-22 17:17:56 Flush False! Used Time 1s

crontab

将脚本添加到定时任务,比如需要【每天的凌晨01:31执行一次】

31 1 * * * /usr/bin/sh /root/scripts/flush_sql.sh &>/dev/null

计算时间差脚本

用于计算期间消耗的时间,结束时间减去开始时间得出的数,单位为秒,融合到flush.sh内用来计算刷SQL所耗的时间

time.sh

#!/bin/bash
# 执行此脚本会直接在屏幕打印期间消耗的时间,命令
START_TIME=`date +%F' %H:%M:%S'`
#执行程序
sleep 3.5
END_TIME=`date +%F' %H:%M:%S'`
echo $START_TIME   $END_TIME
start_seconds=$(date --date="$START_TIME" +%s);
end_seconds=$(date --date="$END_TIME" +%s);
echo 本次运行时间: "$((end_seconds-start_seconds))"s

执行测试

[root@h20 ~]# sh time.sh
2022-03-23 10:39:42 2022-03-23 10:39:45
本次运行时间: 4s
posted @ 2022-06-09 18:31  秋风お亦冷  阅读(221)  评论(0编辑  收藏  举报