2012-06-22 53 views
1

我使用odbc連接mysql。我通過下面的代碼開始ODBC:8小時不活動後ODBC崩潰

ConnectString = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=mydb; User=userdb;Password=pwddb;Option=3;",case odbc:connect(ConnectString, [{scrollable_cursors,off}]) of ...  

8小時後的不活動(或多或少)的,ODBC crashs:

=CRASH REPORT==== 22-Jun-2012::02:09:27 === crasher: 
    initial call: odbc:init/1 
    pid: <0.113.0> 
    registered_name: [] 
    exception exit: {stopped,{'EXIT',<0.108.0>,killed}} 
     in function gen_server:terminate/6 (gen_server.erl, line 737) 
    ancestors: [odbc_sup,<0.111.0>] 
    messages: [{'EXIT',#Port<0.967>,normal}] 
    links: [<0.112.0>] 
    dictionary: [] 
    trap_exit: true 
    status: running 
    heap_size: 377 
    stack_size: 24 
    reductions: 2237 neighbours: 

是在時間限制的連接?

回答

3

Mysql有一個變量wait_timeout,用於控制服務器等待客戶端執行某些操作的時間。默認值是28800秒。隨便,28800秒是8小時,所以你可能想檢查你的服務器配置,並將其設置爲一個更大的值。

除此之外,您應該讓您的工作人員終止,並讓監督員像平常一樣重新啓動它。或者(如果使用gen_server或gen_fsm)設置一個超時來發出一個查詢或一個ping來保持每個小時左右的連接,以保持工作者的生命。

最好!

+1

...或者在某些情況下嘗試不保持開放連接而不發送任何查詢。 –

+0

@Emil,+1提示。 – 2012-06-23 08:25:24

+0

與mysql_ping? – Bertaud