mk-kill - 顾名思义,杀mysql线程。安装方法查看这里。

在一个OLTP的生产环境,一般不会让sql执行过长的时间,特别是myisam这样表锁的引擎,如果出现长时间执行的sql一般是误操作,要不就是出现问题了。

出现这种情况,一般是登录mysql手工执行kill操作,Maatkit现在提供了一个命令来执行这个操作。例如:
杀掉超过60秒的sql:
mk-kill –busy-time 60 –kill
如果你想先不杀,先看看有哪些sql运行超过60秒:
mk-kill –busy-time 60 –print
如果你想杀掉,同时输出杀掉了哪些进程:
mk-kill –busy-time 60 –print –kill

下面举例说明:
先模拟一个长时间的sql

mysq> select count(*) from test where gid>2;

把长时间的sql打印:

[root@mysql2 ~]# mk-kill –busy-time 5 –print -u -p -h
# 2009-12-29T10:26:34 KILL 499967 (Query 33 sec) select count(*) from test where gid>2

将这个sql杀掉并打印:

[root@mysql2 ~]# mk-kill –busy-time 5 –print -u -p -h –kill
# 2009-12-29T10:27:09 KILL 499967 (Query 68 [...]

Mysql的IP处理函数inet_aton()和inet_ntoa()

1 Comment2009年12月18日 作者: 大头刚 

有个统计需求,需要对IP进行分类统计,Mysql提供了inet_aton()和inet_ntoa()函数进程处理。具体可以查看官方手册。

INET_ATON(expr)
给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数。地址可以是4或8比特地址。

mysql> SELECT INET_ATON(’209.207.224.40′);
+—————————–+
| INET_ATON(’209.207.224.40′) |
+—————————–+
| 3520061480 |
+—————————–+
1 row in set (0.01 sec)

产生的数字总是按照网络字节顺序。如上面,数字按照 209×2563 + 207×2562 + 224×2561 + 40 ×2560 进行计算。我们来验算下:

mysql> select 209*POW(256,3)+207*POW(256,2)+224*POW(256,1)+40*POW(256,0);
+————————————————————+
| 209*POW(256,3)+207*POW(256,2)+224*POW(256,1)+40*POW(256,0) |
+————————————————————+
| 3520061480 |
+————————————————————+
1 row in set (0.05 sec)

INET_ATON() 也能理解短格式 IP 地址:

mysql> SELECT INET_ATON(’127.0.0.1′), INET_ATON(’127.1′);
+————————+——————–+
| INET_ATON(’127.0.0.1′) | INET_ATON(’127.1′) |
+————————+——————–+
| 2130706433 | 2130706433 |
+————————+——————–+
1 row in set (0.00 sec)

可以理解成为中间2为地址默认为0。

注:在存储由INET_ATON() 产生的值时,推荐你使用 [...]

mk-slave-find - 顾名思义,根据master查找slave。安装方法查看这里。
在mysql5.1里查看一个master有哪些slave可以通过PROCESSLIST系统表查出:

mysql> select HOST from information_schema.PROCESSLIST where STATE like ‘%slave%’;
+——————+
| HOST             |
+——————+
| 192.168.1.2:44846 |
| 192.168.1.3:33022 |
| 192.168.1.4:50836 |
| 192.168.1.5:32769 |
| 192.168.1.6:33113 |
| 192.168.1.7:33005 |
| 192.168.1.8:32786 |
| 192.168.1.9:32862 |
+——————+
11 rows in set (0.00 sec)

在5.1之前想查出有哪些slave比较麻烦,比较直接的就是直接通过show processlist把所有进程列出,在去刷选查出:

show processlist;
+———–+———-+——————+———–+————-+———-+—————————————————————-+——————+
| Id        | User     | Host             | db        | Command     | Time     | State                                                       | Info             |
+———–+———-+——————+———–+————-+———-+—————————————————————-+——————+
|      1211 | slave2 [...]

三险即:养老保险、失业保险、医疗保险。
一金即:住房公积金(购房按揭时所用)。

每个地区的缴费比例可能不太一样,有些公司可能是五险一金。下面以北京三险一金为例,用mysql存储过程来查询你的三险一金以及你的收入,呵呵,也许你会发现你到手的收入只有你实际工资的一半哦。(参考了网上的PL/SQL过程)。

例如你的工资为5000元,那么你的实际收入情况如下:

mysql> call calc_salary(5000);
+———————————————–+
| income_info |
+———————————————–+
| pension_insurance_1(20.00%) : 1000.00 |
| pension_insurance_2(8.00%) [...]

mk-query-digest 一个功能很强大的工具,能分析慢查询日志,也可以对当前的语句进行分析等。安装方法查看这里。

一、分析慢查询日志,生成报表
mysql通过log-slow-queries和long_query_time参数来记录慢查询,默认的格式如下:

# Time: 090909 4:34:28
# User@Host: sparty[sparty] @ [localhost]
# Query_time: 18 Lock_time: 0 Rows_sent: 5 Rows_examined: 52830
select * from test;
# Time: 090909 14:04:24
# User@Host: sparty[sparty] @ [localhost]
# Query_time: 20 Lock_time: 0 Rows_sent: 10 Rows_examined: 2500284
select * from test2;

每产生一条慢查询记录一行,分析起来不直观,也无法进行统计。mk-query-digest能对slow log进行了统计和分析产生报告,可以更具自己的需要,分析出想要的结果。例如

mk-query-digest –limit 2 –select Query_time,Lock_time,Rows_sent,Rows_examined,ts slow.log \
|grep -v [...]