评论

收藏

[MySQL] 采用MySQL-Proxy进行读写分离时的一点疑问

数据库 数据库 发布于:2021-07-04 09:37 | 阅读数:325 | 评论:0

  今天在采用 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
  

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

   DSC0000.jpg
  

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

DSC0001.jpg

  

  但在后端 MySQL 服务器上,进行如上参数设置后,并没有解决此类问题,
  于是根据报错信息,定位到如下关键代码(chassis-unix-daemon.c):

   DSC0002.jpg
  

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

   DSC0003.jpg
  

  但在这篇文章中的描述如下(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
  

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

  

  


  
关注下面的标签,发现更多相似文章