2011-05-12 23 views
1

我想用C編寫一個使用MYSQL C API的程序。我有一切工作,除了最近我試圖連接到服務器時出現錯誤。無論我連接哪臺服務器,它都會繼續給我「mysql server has gone away。」。我的目標基本上是訪問外部服務器並檢索一些數據。這裏是我到目前爲止的代碼:mysql服務器已經消失 - 無法修復它

conn = mysql_init(NULL); 

/* Connect to database */ 
if (!mysql_real_connect(conn, server, 
    user, password, database, 0, NULL, 0)) { 
    printf("%s",mysql_stat(conn)); 
    fprintf(stderr, "%s\n", mysql_error(conn)); 
} else { 
    printf("works"); 
} 

/* send SQL query */ 
if (mysql_query(conn, "show tables")) { 
    fprintf(stderr, "%s\n", mysql_error(conn)); 
} 

res = mysql_use_result(conn); 

/* output table name */ 
printf("MySQL Tables in mysql database:\n"); 
while ((row = mysql_fetch_row(res)) != NULL) 
    printf("%s \n", row[0]); 

/* close connection */ 
mysql_free_result(res); 
mysql_close(conn); 
} 
+0

您是否檢查了此頁:? http://dev.mysql.com/doc/refman/5.0/en/gone-away.html – 2011-05-12 07:16:03

+0

'if(mysql_query(conn,...'或'if(!mysql_query(conn,...'? – 2011-05-12 07:21:43

回答

1

我知道這是一個老問題,但我只是碰到它跑了,我想離開那些誰可能需要對未來的答案。

如果你收到錯誤「MySQL服務器已經消失」,這意味着客戶端失去了與MySQL的連接。也許MySQL服務器被關閉了,或者更可能在一段時間後沒有活動並且服務器關閉了連接。仔細閱讀MySQL文檔的這一頁,以更好地理解錯誤:dev.mysql.com/doc/refman/5.7/en/gone-away.html

嘗試將MYSQL_OPT_RECONNECT選項設置爲1並查看是否可以解決問題。設置後,客戶端將嘗試自動重新連接,如果它是關閉/超時連接,則應解決問題。有關文檔,請參閱:dev.mysql.com/doc/refman/5.7/en/auto-reconnect.html。請記住,只執行一次重新連接嘗試;如果服務器關閉或無法訪問,查詢仍可能失敗。