今天在采用 MySQL-Proxy 0.8.3 测试读写分离时,功能都正常,但出现了一些让人有些疑惑的提示信息,

不太确定算不算异常。。。。。。


配置文件/usr/local/mysql-proxy/etc/mysql-proxy.cnf如下:

[mysql-proxy]
basedir = /usr/local/mysql-proxy
daemon = true
keepalive = true
proxy-address = 0.0.0.0:3306
max-open-files = 65535
proxy-fix-bug-25371 = true
event-threads = 8
                        
proxy-backend-addresses = 10.222.5.224:3306
proxy-read-only-backend-addresses = 10.137.23.179:3306
                        
plugin-dir = /usr/local/mysql-proxy/lib/mysql-proxy/plugins
plugins = admin,proxy
admin-lua-script = /usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua
proxy-lua-script = /usr/local/mysql-proxy/lib/mysql-proxy/lua/rw-splitting.lua
                        
admin-address = 10.209.6.102:3307
admin-username = root
admin-password = 123456
                        
pid-file= /usr/local/mysql-proxy/run/mysql-proxy.pid
log-file = /usr/local/mysql-proxy/log/mysql-proxy.log
log-level = warning


启动脚本/etc/init.d/mysql-proxy如下

#!/bin/sh
#
# mysql-proxy This script starts and stops the mysql-proxy daemon
#
# chkconfig: - 78 30
# processname: mysql-proxy
# description: mysql-proxy is a proxy daemon to mysql
# config: /usr/local/mysql-proxy/etc/mysql-proxy.cnf
# pidfile: /usr/local/mysql-proxy/run/mysql-proxy.pid
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
                                                                                              
DAEMON="/usr/local/mysql-proxy/bin/mysql-proxy"
CONFIGFILE="/usr/local/mysql-proxy/etc/mysql-proxy.cnf"
PIDFILE="/usr/local/mysql-proxy/run/mysql-proxy.pid"
LOCKFILE="/var/lock/subsys/mysql-proxy"
PROG=`basename $DAEMON`
                                                                                              
RETVAL=0
                                                                                              
start() {
    echo -n $"Starting ${PROG}......"
    [ -x $DAEMON ] || exit 5
    [ -f $CONFIGFILE ] || exit 6
    ${DAEMON} --defaults-file=${CONFIGFILE} || echo -n "${PROG} already running"
                                                                                                 
    RETVAL=$?
    echo
    [[ $RETVAL -eq 0 ]] && touch $LOCKFILE
                                                                                                 
    return $RETVAL
}
                                                                                              
stop() {
    echo -n $"Stopping ${PROG}......"
                                                                                                 
    if [[ `ps aux | grep bin/mysql-proxy | grep -v grep | wc -l` -gt 0 ]]; then
        kill -TERM `ps -A -oppid,pid,cmd | grep bin/mysql-proxy | grep -v grep | awk '{print $2}'`
    fi
                                                                                                 
    RETVAL=$?
    echo
    [[ $RETVAL -eq 0 ]] && rm -f $LOCKFILE $PIDFILE
                                                                                                 
    return $RETVAL
}
                                                                                              
restart() {
    stop
    sleep 1
    start
}
                                                                                              
case "$1" in
start)
    start
    ;;
                                                                                                 
stop)
    stop
    ;;
                                                                                                 
restart)
    restart
    ;;
                                                                                                 
condrestart)
    [[ -e $LOCKFILE ]] && restart
    ;;
                                                                                                 
*)
    echo "Usage: $0 {start|stop|restart|condrestart}"
    RETVAL=1
    ;;
esac
                                                                                              
exit $RETVAL


启动命令:

service mysql-proxy start


通过查看日志,发现有如下警告信息:

wKiom1NSmfSiId-VAAD_YM0ggsw453.jpg


通过网上查阅相关资料,大致的意思是说,当存在长连接且连接超时的时候,再次重连时子进程会异常自动重启,

于是设置如下:

采用MySQL-Proxy进行读写分离时的一点疑问_第1张图片


但在后端 MySQL 服务器上,进行如上参数设置后,并没有解决此类问题,

于是根据报错信息,定位到如下关键代码(chassis-unix-daemon.c):

采用MySQL-Proxy进行读写分离时的一点疑问_第2张图片


通过查阅相关书籍,了解到如下信息:

采用MySQL-Proxy进行读写分离时的一点疑问_第3张图片


但在这篇文章中的描述如下(http://memorymyann.iteye.com/blog/242992):

WIFSIGNALED(status)
returns true if the child process exited because of a signal which was not caught.

也就是说,如果是因为子进程未能正常捕获信号而退出时,就返回true。


更详细的描述,可以参考这里(服务器开发之 Daemon 和 Keepalive):

http://my.oschina.net/moooofly/blog/116454


目前针对此类的提示信息,还不太确定是否属于异常,希望各位多提些建议。。。。。。

j_0067.gif