[Shell] 纯文本查看 复制代码
#!/bin/bash
#Functionality: 如果 MySQL 锁表,则发信息给管理员 [半小时内不重发第二次]
#Author: lrm
#Date: 2012-06-25
YYYY=`date "+%Y"`
MM=`date "+%m"`
DD=`date "+%d"`
HH=`date "+%H"`
mm=`date "+%M"`
ss=`date "+%S"`
name="$YYYY-$MM-$DD-$HH"
date="$YYYY-$MM-$DD-$HH:$mm:$ss"
db_user=$(sed -n '3p' /etc/aa.conf | awk '{print $3}')
db_passwd=$(sed -n '4p' /etc/aa.conf |awk '{print $3}')
##############################################################################################
#mysql -utest.com -p -e "show processlist" | grep -i "Locked" >> locked_log.txt
mysql -u$db_user -p$db_passwd -e "show processlist" | grep -i "Sending" >> locked_log$name.txt
###判断是否为空文件,如果没有锁表就是为空文件
if [ ! -s locked_log$name.txt ]
then
echo "is ok"
###删除空文件
rm -rf locked_log$name.txt
else
###如果不是空文件就执行下面
###有锁表的情况就一行一行查看文件
for line in `cat locked_log$name.txt | awk '{print $1}'`
do
echo $line
###把锁表语句ID记录到到一个sql文件里面
echo "kill $line;" >> kill_thread_id.sql
done
###保存日志
mv locked_log$name.txt /var/log/mysql/
###杀死锁表语句
mysql -u$db_user -p$db_passwd -e "source /root/kill_thread_id.sql"
###删除记录文件
rm -rf /root/kill_thread_id.sql
###短信通知管理员
php /web/siteManger/reportMySQLSyncErr.php
fi