首先,找一台监控机,确保有登陆各从库查看复制状态的权限。
比如在一台主机名为Admin的机器上,编写监控脚本slavedm.sh,保存为如 /server/daemon/slavedm.sh
slavedm.sh源码:
- #!/bin/sh
- #
- # Slave Daemon
- # @version 1.0
- # @author Hellex <[email]Hellex@live.com[/email]>
- #
- #从库服务器配置,分别是主机名,端口,用户名,密码,请一一对应
- mysql_host=("db2" "db3" "db4" "db5" "db6" "db7" "db8" "db9" "db10" "db11" "db12" "db13")
- mysql_port=(3306 3306 3306 3306 3306 3306 3406 3306 3307 3406 3309 3310)
- mysql_user=("dmuser" "dmuser" "dmuser" "dmuser" "dmuser" "dmuser" "dmuser" "dmuser" "dmuser" "dmuser" "dmuser" "dmuser")
- mysql_password=("dmpassword" "dmpassword" "dmpassword" "dmpassword" "dmpassword" "dmpassword" "dmpassword" "dmpassword" "dmpassword" "dmpassword" "dmpassword" "dmpassword")
- #loop for checking
- len=${#mysql_host[*]}
- i=0
- while [ $i -lt $len ]
- do
- #get slave status
- status=`/usr/local/webserver/mysql/bin/mysql -h${mysql_host[$i]} -u${mysql_user[$i]} -p${mysql_password[$i]} -P${mysql_port[$i]} -e"SHOW SLAVE STATUS\G"`
- #check SQL Thread
- if (echo "$status"|egrep "Slave_IO_Running: *Yes" 2>&1 > /dev/null) && (echo "$status"|egrep "Slave_SQL_Running: *No" 2>&1 > /dev/null)
- then
- #log error
- sql_error=`echo "$status"|egrep "Last_SQL_Error:" | awk -F 'Last_SQL_Error:' '{printf $2}'`
- sql_erroro=`echo "$status"|egrep "Last_SQL_Errno:" | awk -F 'Last_SQL_Errno:' '{printf $2}'`
- echo `date +%y%m%d%H%M%S`" "${mysql_host[$i]}:${mysql_port[$i]}" "${sql_erroro}" "${sql_error} >> /server/daemon/slavedm.log
- #stop slave
- /usr/local/webserver/mysql/bin/mysql -h${mysql_host[$i]} -u${mysql_user[$i]} -p${mysql_password[$i]} -P${mysql_port[$i]} -e"STOP SLAVE" 2>&1 > /dev/null
- #skip error
- /usr/local/webserver/mysql/bin/mysql -h${mysql_host[$i]} -u${mysql_user[$i]} -p${mysql_password[$i]} -P${mysql_port[$i]} -e"SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1" 2>&1 > /dev/null
- #start slave
- /usr/local/webserver/mysql/bin/mysql -h${mysql_host[$i]} -u${mysql_user[$i]} -p${mysql_password[$i]} -P${mysql_port[$i]} -e"START SLAVE" 2>&1 > /dev/null
- fi
- let i++
- done
slavedm.sh脚本做的工作就是检查从库复制的IO及SQL进程,当IO进程正常,SQL不正常的时候,说明SQL执行有错误,这时候脚本自动把错误记录下来。
格式如:yymmddHHMMSS 主机名:端口 错误代码 错误信息
这些错误会记录到slavedm.log文件
记录完错误之后,slavedm.sh执行跳过错误语句
/usr/local/webserver/mysql/bin/mysql工具的地址请根据自己的情况更改,这里就不设为变量了。
给slavedm.sh添加可执行权限:
- #chmod +x /server/daemon/slavedm.sh
我们来做一下测试
登陆主库,在test库建一个test3表,并给它加一个index
- mysql> use test
- Database changed
- mysql> create table test3 (id int(10));
- Query OK, 0 rows affected (0.00 sec)
- mysql> alter table test3 add index id(id);
- Query OK, 0 rows affected (0.01 sec)
- Records: 0 Duplicates: 0 Warnings: 0
登陆其中一台从库,假如db11
- mysql> use test
- Database changed
- mysql> show tables;
- +----------------+
- | Tables_in_test |
- +----------------+
- | test1 |
- | test2 |
- | test3 |
- +----------------+
- 3 rows in set (0.00 sec)
- --可以看到test3出现在test库里,我们把它的索引删除,然后再回到主库删除索引,以引发复制错误
- mysql> alter table test3 drop index id;
- Query OK, 0 rows affected (0.01 sec)
- Records: 0 Duplicates: 0 Warnings: 0
回到主库
- mysql> alter table test3 drop index id;
- Query OK, 0 rows affected (0.05 sec)
- Records: 0 Duplicates: 0 Warnings: 0
再看db11
- mysql> show slave status\G
- --......省略其他部份
- Slave_IO_Running: Yes
- Slave_SQL_Running: No
- Last_SQL_Errno: 1091
- Last_SQL_Error: Error 'Can't DROP 'id'; check that column/key exists' on query. Default database: 'test'. Query: 'alter table test3 drop index id'
- 1 row in set (0.00 sec)
- --可以看到复制错误了
然后我们到监控机执行slavedm.sh
- #/server/daemon/slavedm.sh
再看db11
- mysql> show slave status\G
- --......省略其他部份
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
- --可以看到复制恢复正常了
看监控日志
- #cat /server/daemon/slavedm.log
- 081130192001 db11:3306 1091 Error 'Can't DROP 'id'; check that column/key exists' on query. Default database: 'test'. Query: 'alter table test3 drop index id'
说明slavedm.sh脚本功能很正常。
我们把slavedm.sh添加到crontab,每5分钟执行一次
- #crontab -e
添加以下内容
- #slave daemon
- 0-55/5 * * * * /server/daemon/slavedm.sh
本日志由 flyinweb 于 2009-06-24 08:48:15 发表,目前已经被浏览 4265 次,评论 0 次;
作者添加了以下标签: Last_SQL_Error,Last_SQL_ErrorNo;
引用通告:http://www.517sou.net/Article/98/Trackback.ashx
而且直接配置文件是效率最高的,通过其它驱动效率都相对较低,BDB
这个测试不太准确,看官方的测试结果:http://bind-dlz.sourceforg
为什么使用BDB时QPS这么低? 我在bind版本基本相似的环境中测试的
It is quite useful and interesting too.
VIRT 的上限是64G,也就是36位, cat /proc/cpuinfo的结果是:addre
昨天要准备用线程重写webbench,试验了下Fedora Linux 2.6.35.14
不明白您的具体的意思是什么?
已经发送到你QQ邮箱