0

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 ...
4

3 に答える 3

0

MySQLがダウンしたとき。G-WAN スクリプトのクラッシュと G-WAN も

MySQL への永続的な接続を作成するコードのみを公開するため (後で MySQL を使用するコードは公開しない)、コードがどのように G-WAN をクラッシュさせるかを確認する方法はありません。

しかし、これは無効なソケットを使用しようとしたときにクラッシュする MySQL ドライバー ライブラリである可能性が最も高いです。

ここでの解決策は、次のような方法でソケットの有効性 (接続状態) をテストすることです。

ioctl(fd,FIONREAD,&bytes_available);

...MySQL クライアント ライブラリに渡す前に。

于 2013-04-29T06:38:12.013 に答える