Mar 28
作者: 肖建彬 | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
网址:http://www.xiaojb.com/archives/it/mydns_mysql_gone_away.shtml

因为MySQL server的wait_timeout太短,导致了mydns工作不正常,经常丢失和服务器的连接。
和之前的vpopmail的patch一样,使用了mysql_ping,但是mysql 5.0.3之后,需要设置参数。修改就针对这些。
报错信息如下:

Mar 27 00:48:01 www214 mydns[18037]: www.5d6d.com.: error loading SOA: MySQL server has gone away (errno=111)
--- mydns-1.1.0.orig/src/lib/sql.c      2005-04-21 00:40:25.000000000 +0800
+++ mydns-1.1.0/src/lib/sql.c   2007-03-28 13:57:13.000000000 +0800
@@ -84,6 +84,9 @@
 #if MYSQL_VERSION_ID > 32349
        mysql_options(sql, MYSQL_READ_DEFAULT_GROUP, "client");
 #endif
+#if MYSQL_VERSION_ID > 50012
+       mysql_options(sql, MYSQL_OPT_RECONNECT, "1");
+#endif
        if (!(mysql_real_connect(sql, host, user, password, database, port, NULL, 0)))
                ErrSQL(sql, _("Error connecting to MySQL server at %s"), host);
 #endif
@@ -127,11 +130,16 @@
                }
        }
 #else
+       if (!mysql_ping(sql))
+               return;
        if (!(new_sql = mysql_init(NULL)))
                return;
 #if MYSQL_VERSION_ID > 32349
        mysql_options(new_sql, MYSQL_READ_DEFAULT_GROUP, "client");
 #endif
+#if MYSQL_VERSION_ID > 50012
+       mysql_options(sql, MYSQL_OPT_RECONNECT, "1");
+#endif
        if (!(mysql_real_connect(new_sql, _sql_host, _sql_user, _sql_password, _sql_database, port, NULL, 0)))
        {
                mysql_close(new_sql);

One Response to “MyDNS丢失数据库链接的patch”

  1. [php] 报告了一个mysql_ping在MySQL server has gone away下不工作的bug Says:

    [...] 一个mysql_ping的问题,报告了好多地方,MyDNS,vpopmail,现在是php。 [...]