关于域名投资的一点基本常识(zz) 页面字符集定义与title的位置导致IE页面空白的问题
Apr 06
作者: 肖建彬 | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
网址:http://www.xiaojb.com/archives/mailtech/patch_for_vpopmail.shtml

上周邮件服务器出了故障,主要是vpopmail报告MySQL server has gone away,这样的错误,经过查找原因发现是这样的:courier-authlib启动了一个进程authdaemond做认证,sasl,imapd,maildrop都通过这个进程获取用户数据,当MySQL服务器的wait_timeout参数教小的时候,就容易出这种错误,vpopmail的这段代码有一个静态变量标记和MySQL服务器的连接是否已经打开,如果是真,则使用已经打开的连接,不再连接MySQL,当空闲时间超过wait_timeout后,MySQL服务器会关闭连接,这个时候再复用这个连接的时候,就会出现”MySQL server has gone away”的错误提示。加入了mysql_ping这个函数后它判断跟MySQL服务器的连接是否有效,无效的话就不返回了。

vpopmail offical site: http://www.inter7.com/vpopmail/
Maillist Archive: http://www.mail-archive.com/vchkpw@inter7.com/
Patch FIle:http://www.xiaojb.com/upload/2006/vmysql.patch

  1. diff -u vpopmail-5.4.13.org/vmysql.c vpopmail-5.4.13/vmysql.c
  2. --- vpopmail-5.4.13.org/vmysql.c        2004-12-16 23:57:34.000000000 +0800
  3. +++ vpopmail-5.4.13/vmysql.c    2006-03-31 09:42:45.000000000 +0800
  4. @@ -188,7 +188,7 @@
  5.  {
  6.      unsigned int timeout = 2;
  7.  
  8. -    if ( update_open != 0 ) return(0);
  9. +    if ( update_open && (mysql_ping(&mysql_update)==0) ) return(0);
  10.      update_open = 1;
  11.  
  12.      verrori = load_connection_info();
  13. @@ -238,7 +238,7 @@
  14.  int vauth_open_read()
  15.  {
  16.      /* if we are already connected, just return */
  17. -    if ( read_open != 0 ) return(0);
  18. +    if ( read_open && (mysql_ping(&mysql_read)==0) ) return(0);
  19.      read_open = 1;
  20.  
  21.      /* connect to mysql and set the database */

One Response to “patch for vpopmail–解决vpopmail丢失mysql连接的问题”

  1. SEDUCTION Says:

    好文, 谢谢,强烈支持一下

Leave a Reply