2013-07-31 65 views
0

我得到以下異常Mysql Error =無法創建UNIX套接字(24)

Mysql Caught Exception =無法創建UNIX套接字(24)。

我知道UNIX系統錯誤24.這是「打開的文件過多」。

我refered這個問題,:OperationalError: (2001, "Can't create UNIX socket (24)")

但是我需要了解確切的問題。 在我的代碼中,我執行多個select查詢並存儲結果,而不是在兩者之間使用free_result方法。

難道是這個錯誤的情況:無法創建UNIX套接字(24)

這裏是我的代碼:

pthread_mutex_lock(&mysqlMutex); 
    mysql = mysql_init(NULL); 
    my_bool reconnect = 1; 
    MYSQL* connection; 
    mysql_options(mysql, MYSQL_OPT_RECONNECT, &reconnect); 
    connection = mysql_real_connect(server,user,password, database_name, 0, NULL, 0); 
    if(connection == NULL) 
    { 
      //Connection failed.Exception Handling 
    } 
    //Execute query :SELECT * from user ; 
    mysql_query(mysql, getuser_query); 

    MYSQL_RES *mysql_res = mysql_store_result(mysql); 

    // Query # 2 
    // SELECT * from usergroup. 
    mysql_query(m_pMysql, userGroup_query); 
    mysql_res = mysql_store_result(mysql); 
    // Query # 3 
    // Query # 4 

在最後:

//free mysql memory 
    mysql_free_result(mysql_res); 
    mysql_close(mysql); 
    pthread_mutex_unlock(&mysqlMutex); 
+0

我也滿足了這個問題,首先,我跟着akostadinov答案以增加可用的防衛和安全降低MySQL open_table_cache和max_connections.But它似乎,它仍然發生經過漫長再寄一次思考我的代碼可能有其他問題,並且我printf FDs,我發現返回的FD是增加的。所以我認爲它可能不會關閉FD。所以我建議你看看是否有其他人不關閉FD。 – Donny

回答

1

你可能會打開太多的併發連接到MySQL服務器。你需要增加可用的FD到mysql進程。您通常可以在您的linux發行版中使用/etc/security/limits*。 您也可以看看這個問題:Mysql decrease opened files

+0

是的,我們在服務器上處理大量文件。這是唯一的解決方案嗎?增加FD? – Mann

+0

它可以是編程的問題嗎?正如我所問,我存儲mysql結果,但不執行之間的free_result語句。 – Mann

+0

看來你正在關閉連接。而mysql/mariaDB不應該爲不涉及不適合內存的臨時表的簡單查詢打開新文件。也許你可以嘗試使用你的執行之間共享的連接池,但除非你在連接保持打開的情況下花費了大量的時間在應用程序處理中,否則它不會有幫助。默認情況下,大多數發行版中的最大fds是1024,這相當低。沒必要擔心增加到10k或某物。在手冊中你可以看到免費的結果只消耗內存,而不是FD:http://php.net/manual/bg/function.mysql-free-result.php – akostadinov