运维定时自动刷入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