且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

mysql中kill掉所有锁表的进程爬虫抓取数据分析

更新时间:2022-06-28 21:20:36

快过年了最近club服务器 老有刷数据的 封了N 多IP 而且一刷就锁表,老这样不是办法的想办法解决啊
mysql
>show processlist;

出来哗啦啦好几屏幕的, 没有一千也有几百条, 查询语句把表锁住了, 赶紧找出第一个Locked的thread_id, 在mysql的shell里面执行.

mysql>kill thread_id;

kill掉第一个锁表的进程, 依然没有改善. 既然不改善, 咱们就想办法将所有锁表的进程kill掉吧, 简单的脚本如下.

#!/bin/bash
mysql -u root -p mima -e "show processlist" | grep -i "Locked" >> locked_log.txt

for line in `cat locked_log.txt | awk '{print $1}'`
do 
echo "kill $line;" >> kill_thread_id.sql
done

现在kill_thread_id.sql的内容像这个样子

kill 66402982;
kill 66402983;
kill 66402986;
kill 66402991;
.....

好了, 我们在mysql的shell中执行, 就可以把所有锁表的进程杀死了.

mysql>source kill_thread_id.sql

当然了, 也可以一行搞定
for id in `mysqladmin processlist | grep -i locked | awk '{print $1}'`
do
mysqladmin kill ${id}
done

#########################################################################

至于怎么分析数据抓取的呢,首先你要开启 apache日志轮询。。

[root@c3 ~]# cat /home/houzc/shell/findIP2w.sh
#!/bin/sh
tail -10000 /www/logs/access/66_club_`date +%Y%m%d`_access.log |awk  '{print  $1} '| awk -F. '{print $1"."$2"."$3}'|sort|uniq -c|sort -rn|more
执行完脚本会调取倒数10000行中访问次数3位最高的IP排序出来来。

 
    405 220.181.108
    379 203.208.60
    272 123.150.182
    248 123.150.183
    185 61.135.186
    152 122.224.48
    140 180.149.133
    121 61.155.201
     94 219.232.243
     87 157.55.116
     82 123.125.71
     81 124.115.0
     71 58.211.14
     69 220.181.32
     59 110.75.172
     54 110.75.171
     53 173.192.143
     41 222.81.59
     40 173.83.247
     38 116.228.168
     35 113.113.231
     35 110.75.176
     34 220.181.125
     32 222.86.145
     30 221.11.39

More--

tail -10000 /www/logs/access/66_club_`date +%Y%m%d`_access.log |grep 121.13.162 |more
分析日志就可以了。
如果直接调取4位 
tail -20000 /www/logs/access/66_club_`date +%Y%m%d`_access.log |awk  '{print  $1} '|sort|uniq -cd|sort -rn|more
tail -20000 /www/logs/access/66_club_`date +%Y%m%d`_access.log |grep IP地址 |more
 


查看某一时间段的IP访问总量
# cat access_log|awk '(/\[04\/Aug\/2009/) {print}'|awk -F: '$2<2  {print}'| awk -F. '{print $1"."$2"."$3}' | sort | uniq -c| sort -rn | more
//查看[04/Aug/2009 开头的且 $2(第二列为小时)小于2点的 访问过的IP总量排序

查看8:00到8:15之间的访问总量
# cat /www/logs/access/club_20100120_access.log |awk '{print $0}'|awk -F: '$2~/8$/ && $3<15 {print $0}'| awk -F. '{print $1"."$2"."$3}' | sort | uniq -c|sort -rn | more


查看并发状态
# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
这条语句返回结果如下
LAST_ACK 5
SYN_RECV 30
ESTABLISHED 1597
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057
其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。



本文转自 houzaicunsky 51CTO博客,原文链接:http://blog.51cto.com/hzcsky/475725