首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >G-WAN和持久MySQL连接

G-WAN和持久MySQL连接
EN

Stack Overflow用户
提问于 2013-04-27 16:15:02
回答 3查看 409关注 0票数 0

再问我一个关于G-WAN和MySQL的小问题。

下面的脚本运行得很好...我唯一的问题是MySQL崩溃的时候。G-WAN脚本崩溃以及G-WAN。

保持持久的MySQL连接和处理MySQL停机的最好方法是什么?

代码语言:javascript
复制
typedef struct { 
   MYSQL *conn;
} data_t;

int main(int argc, char *argv[])
{
  u64 start = getus();
  data_t **data = (data_t**)get_env(argv, US_SERVER_DATA);
  xbuf_t *reply = get_reply(argv);

  if(!data[0]) // first time: persistent pointer is uninitialized
  {
    data[0] = (data_t*)calloc(1, sizeof(data_t));
    if(!data[0])
        return 500; // out of memory
    data[0]->conn = (MYSQL *)mysql_init(data[0]->conn);

    if(! data[0]->conn) {
      xbuf_xcat(reply, "MySQL Error");
      return(200);
    }

    if(! mysql_real_connect(data[0]->conn, "localhost", "root", "willow", "test", NULL, NULL, 0)) {
      return 500;
    }
    xbuf_cat(reply, "initialized data<br>");
  }

  // Do what we want here ...
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-29 18:20:15

如果你在提出问题之前做一点研究,那就太好了……

请参阅-> http://dev.mysql.com/doc/refman/5.5/en/mysql-ping.html

票数 0
EN

Stack Overflow用户

发布于 2013-04-29 20:09:09

下面是我的工作脚本:

代码语言:javascript
复制
#pragma link "/usr/lib64/mysql/libmysqlclient.so"
#pragma include "/usr/include/mysql"

#include <mysql.h>
#include <string.h>
#include "gwan.h" // G-WAN exported functions

//static MYSQL *conn = NULL;

typedef struct { 
   MYSQL *conn;
} data_t;

int main(int argc, char *argv[])
{
  u64 start = getus();
  data_t **data = (data_t**)get_env(argv, US_SERVER_DATA);
  xbuf_t *reply = get_reply(argv);
  my_bool  my_true = true;

  if(!data[0]) // first time: persistent pointer is uninitialized
  {
    data[0] = (data_t*)calloc(1, sizeof(data_t));
    if(!data[0])
        return 500; // out of memory
    data[0]->conn = (MYSQL *)mysql_init(data[0]->conn);
    mysql_options(data[0]->conn, MYSQL_OPT_RECONNECT, &my_true);
    if(! data[0]->conn) {
      xbuf_xcat(reply, "MySQL Error");
      return(200);
    }

    if(! mysql_real_connect(data[0]->conn, "localhost", "root", "willow", "test", 0, NULL, 0)) {
      return 500;
    }
    xbuf_cat(reply, "initialized data<br>");
  }

  if(mysql_ping(data[0]->conn) > 0) return 500; // Prevent G-WAN to crash

  mysql_query(data[0]->conn, "DELETE FROM example");

  for(int i =1; i< 10; i++) {
    char sql[1024];
    s_snprintf(sql, 1023, "INSERT INTO example (id, name, age) VALUES(%d, 'Olivier', 33)", i);
    mysql_query(data[0]->conn, sql);
  }

  int count = 0;
  // Query Database
  mysql_query(data[0]->conn, "SELECT id, name, age FROM example");
  MYSQL_RES *result = mysql_store_result(data[0]->conn);
  MYSQL_ROW *row;
  while ((row = mysql_fetch_row(result))) { 
    count++;
    xbuf_xcat(reply, ": %s : %s : %s", row[0], row[1], row[2]); 
    xbuf_xcat(reply, "<br/>");
  }
  mysql_free_result(result);

  xbuf_xcat(reply, "<br>%llUmicro seconds : %d<br/>", (getus()-start), mysql_field_count(data[0]->conn));
  xbuf_xcat(reply, "MySQL Client Version: %d", mysql_get_client_version());


  return 200;
}

因此,现在即使mysql关闭,G-WAN仍然活着,当mysql启动时,该脚本再次工作。希望能对其他人有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2013-04-29 14:38:12

MySQL宕机时的

。G-WAN脚本崩溃和G-WAN

由于您只发布了创建到MySQL的持久连接的代码(而不是稍后使用MySQL的代码),因此无法看到您的代码是如何导致G-WAN崩溃的。

但最有可能的是,当您试图使用无效套接字时,MySQL驱动程序库崩溃了。

这里的解决方案显然是通过如下方式测试套接字(其连接状态)的有效性:

代码语言:javascript
复制
ioctl(fd,FIONREAD,&bytes_available);

将其传递给MySQL客户端库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16249867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档