Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
G-WAN和持久MySQL连接_Mysql_G Wan - Fatal编程技术网

G-WAN和持久MySQL连接

G-WAN和持久MySQL连接,mysql,g-wan,Mysql,G Wan,再问我一个关于G-WAN和MySQL的小问题 下面的脚本运行良好。。。 我唯一的问题是MySQL何时崩溃。G-WAN脚本崩溃,G-WAN也崩溃 保持MySQL持久连接和处理MySQL宕机的嵌套方式是什么 typedef struct { MYSQL *conn; } data_t; int main(int argc, char *argv[]) { u64 start = getus(); data_t **data = (data_t**)get_env(argv, US_

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

下面的脚本运行良好。。。 我唯一的问题是MySQL何时崩溃。G-WAN脚本崩溃,G-WAN也崩溃

保持MySQL持久连接和处理MySQL宕机的嵌套方式是什么

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 ...
typedef结构{
MYSQL*康涅狄格州;
}数据;
int main(int argc,char*argv[])
{
u64 start=getus();
数据**数据=(数据**)获取环境(argv,美国服务器数据);
xbuf_t*reply=get_reply(argv);
if(!data[0])//第一次:永久指针未初始化
{
数据[0]=(数据t*)calloc(1,sizeof(数据t));
如果(!数据[0])
返回500;//内存不足
数据[0]->conn=(MYSQL*)MYSQL_init(数据[0]->conn);
如果(!数据[0]->conn){
xbuf_xcat(回复“MySQL错误”);
返回(200);
}
如果(!mysql\u real\u connect(数据[0]>conn,“localhost”,“root”,“willow”,“test”,NULL,NULL,0)){
返回500;
}
xbuf_cat(回复,“初始化数据
”; } //做我们想做的。。。
当MySQL崩溃时,G-WAN脚本崩溃,G-WAN也崩溃

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

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

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

ioctl(fd,FIONREAD,&bytes_available);

…在您将其传递到MySQL客户端库之前。

如果您在提出问题之前进行一些研究,那就太好了


请参见->

此处我的工作脚本:

#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;
}
#pragma链接/usr/lib64/mysql/libmysqlclient.so”
#pragma include“/usr/include/mysql”
#包括
#包括
#包括“gwan.h”//G-WAN导出功能
//静态MYSQL*conn=NULL;
类型定义结构{
MYSQL*康涅狄格州;
}数据;
int main(int argc,char*argv[])
{
u64 start=getus();
数据**数据=(数据**)获取环境(argv,美国服务器数据);
xbuf_t*reply=get_reply(argv);
我的布尔我的真=真;
if(!data[0])//第一次:永久指针未初始化
{
数据[0]=(数据t*)calloc(1,sizeof(数据t));
如果(!数据[0])
返回500;//内存不足
数据[0]->conn=(MYSQL*)MYSQL_init(数据[0]->conn);
mysql_选项(数据[0]->conn、mysql_OPT_RECONNECT和my_true);
如果(!数据[0]->conn){
xbuf_xcat(回复“MySQL错误”);
返回(200);
}
如果(!mysql\u real\u connect(数据[0]>conn,“localhost”,“root”,“willow”,“test”,0,NULL,0)){
返回500;
}
xbuf_cat(回复,“初始化数据
”; } if(mysql_ping(data[0]->conn)>0)返回500;//防止G-WAN崩溃 mysql_查询(数据[0]->conn,“从示例中删除”); 对于(int i=1;i<10;i++){ charsql[1024]; s_snprintf(sql,1023,“插入示例(id、姓名、年龄)值(%d,'Olivier',33)”,i); mysql_查询(数据[0]->conn,sql); } 整数计数=0; //查询数据库 mysql_查询(数据[0]->conn,“从示例中选择id、名称、年龄”); MYSQL\u RES*result=MYSQL\u store\u result(数据[0]->conn); MYSQL_行*行; 而((row=mysql\u fetch\u row(result)){ 计数++; xbuf_xcat(回复:“:%s:%s:%s”,第[0]行、第[1]行、第[2]行); xbuf_xcat(答复,
); } mysql_免费_结果(result); xbuf_xcat(回复,
%llUmicro秒数:%d
,(getus()-start),mysql_字段计数(数据[0]->conn)); xbuf_xcat(回复,“MySQL客户端版本:%d”,MySQL_get_客户端版本()); 返回200; }

因此,现在即使mysql关闭,G-WAN仍处于活动状态,当mysql启动时,脚本也能再次工作。希望它能帮助其他人。

实际上,无论是否有附加代码,它都会失败……它不属于另一个sql查询……mysql连接只是G-WAN中的一个fd变量,不关心它的值——直到它被删除为止所以,如果它没有被使用,正如您所断言的,G-WAN根本不可能受到MySQL断开连接的影响。