。。。

Leave a Comment2010年02月19日 作者: apple 

同样的一瓶饮料,便利店里 2 块钱,五星饭店里 60 块,很多的时候,一个人的价值取决于所在的位置。

标签: | 分类: 其他

Mysql实现split函数

1 comment2010年01月14日 作者: 大头刚 

一个朋友遇到点问题,想在mysql里把一段用固定符号分隔的字符串,按分隔符分别列出来。就是一个典型的split应用,但是mysql却没有自带这个函数,在网上搜了一把。可以通过自建函数来解决,以下的函数来自互联网。

DELIMITER $$
CREATE FUNCTION `func_get_split_string_total`(
f_string varchar(1000),f_delimiter varchar(5)
) RETURNS int(11)
BEGIN
return 1+(length(f_string) - length(replace(f_string,f_delimiter,”)));
END$$
DELIMITER ;
 
 
DELIMITER $$
CREATE FUNCTION `func_get_split_string`(
f_string varchar(1000),f_delimiter varchar(5),f_order int) RETURNS varchar(255) CHARSET utf8
BEGIN
declare result varchar(255) default ”;
set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1));
return result;
END$$
DELIMITER ;

需要设置下参数:

SET GLOBAL log_bin_trust_function_creators = 1;

下面我们来测试下:

CREATE TABLE "t" (
-> "t1" varchar(100) [...]

标签: , | 分类: Mysql

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

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() 产生的值时,推荐你使用 [...]

标签: , , | 分类: Mysql

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