mk-slave-restart - 对slave进行监控,以及在slave报错后,重启slave。安装方法查看这里。
其实可以理解成在slave执行了如下命令:

stop slave;
set global sql_slave_skip_counter=1;
start slave;

下面举例说明:
先模拟一个slave报错,在主库建表,然后在从库删除,再去主库删除。报错如下:

Last_SQL_Errno: 1051
Last_SQL_Error: Error ‘Unknown table ‘test_sg” on query. Default database: ‘test’. Query: ‘drop table test_sg’

在利用mk-slave-restart去重启这个slave;

[root@mysql2 ~]# mk-slave-restart -u xxx -p xxx -h xxx –run-time 3 –skip-count 1
2010-03-09T14:01:57 h=xxx,p=…,u=xxx slave-relay-bin.000215 74173942 1051

解释下参数:
run-time:指监控slave的时间,单位是秒;
skip-count:指跳过log的数量;

解释下输出:
1、time
2、slave IP
3、user
4、passwd
5、MASTER_LOG_FILE
6、MASTER_LOG_POS
7、Last_SQL_Errno

很显然mk-slave-restart是一个很不错的slave监控工具,当salve出错后能及时报警,并直接重启slave。同时输出了报错的相关信息,方便后面查询在哪出错,是什么错。下面给出它的帮助:

[root@mysql2 ~]# mk-slave-restart –help
mk-slave-restart watches one or more MySQL replication slaves for errors, and
tries to [...]

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) [...]

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 [...]