您的位置:首页 > 数据库 > MySQL

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

2011-01-10 14:56 716 查看
快过年了最近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表示处理完毕,等待超时结束的请求数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息