線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3396
推到 Plurk!
推到 Facebook!

MySQL server has gone away

答題得分者是:carstyc
kostin
一般會員


發表:18
回覆:43
積分:22
註冊:2010-03-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-11-03 11:50:49 IP:122.127.xxx.xxx 訂閱
小弟目前使用 MySQL 4.1版 , 用BCB6開發 ,
安裝在工業電腦上 OS WinXP , PC設定 不關閉螢幕 , 不關閉硬碟 , 有螢幕保護
小弟的程式在一般使用下沒有問題 , 一切正常

問題發生在<休眠>的時候
當程式進入<休眠>狀態時 , PC會進入螢幕保護 ,
程式會繼續讀寫資料庫(同一欄位 同一筆資料 用來做WatchDOG)

在我上班的時間做開機持續做測試 早上8:30 ~18:00
都不會出現 "MySQL server has gone away" 訊息
但是下班後隔天再來時 , 程式不會直接出現"MySQL server has gone away" ,
而是當我使用程式時 動到資料庫時 才會發生 "MySQL server has gone away"

上網查了一下資料 用過的方法如下 : 請各位前輩指教
方法1.
wait_timeout=2880000 <- 把時間改大 有延長出現訊息的時間
interactive_timeout = 2880000 <- 把時間改大 有延長出現訊息的時間

方法2.
wait_timeout=0 <- 聽說會變得無限制 不會還是會出現訊息
interactive_timeout = 0 <- 聽說會變得無限制 不會還是會出現訊息

方法3.
有人說問題發生在 日期切換的時候 也就是例如 2010/11/02 23:59:59 -> 2010/11/03 00:00:00 的時候
可是我去改時間設定然後測試 不會發生錯誤耶
//***********************************************************************************************************************
請問各位前輩 程式希望可以24小時持續使用
請問還有什麼方法 可以解決嗎? 謝謝
------
工程師的世界太深奧了 ~ 總是有不斷的驚奇發生
在解決問題的當下 , 才能確認我的存在
在得到幫助的當下 , 才能發現我不孤單
編輯記錄
kostin 重新編輯於 2010-11-02 21:51:55, 註解 無‧
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-11-03 17:36:19 IP:203.79.xxx.xxx 訂閱
通常  MySQL server has gone away 是因為 Connection 太久沒用才會出現 Mysql 自動把connection 回收...

解法有2...

1.就是每隔一段時間...讓connection 動一下...就是隨便下個SQL查一下東西.....反正就是有動作...在timeout 時間內....mysql 應該不會主動斷掉。
2.你何必要把 Connection 持續開著...當你資料查詢完後... 連connection 也一併close....當下次要Query時...才再去連接connection..就不會有這個問題了...

以上供您參考...謝謝



===================引 用 kostin 文 章===================
小弟目前使用 MySQL 4.1版? , 用BCB6開發? ,
安裝在工業電腦上? OS? WinXP , PC設定 不關閉螢幕?, 不關閉硬碟 , 有螢幕保護
小弟的程式在一般使用下沒有問題? , ?一切正常

問題發生在<休眠>的時候?
當程式進入<休眠>狀態時? , ?PC會進入螢幕保護 ,?
程式會繼續讀寫資料庫(同一欄位 同一筆資料? 用來做WatchDOG)

在我上班的時間做開機持續做測試 早上8:30 ~18:00???
都不會出現 "MySQL server has gone away"? 訊息
但是下班後隔天再來時?, ?程式不會直接出現"MySQL server has gone away"? ,
而是當我使用程式時 動到資料庫時? 才會發生 "MySQL server has gone away"

上網查了一下資料 用過的方法如下 :? 請各位前輩指教
方法1.
wait_timeout=2880000 ? <- 把時間改大??? 有延長出現訊息的時間
interactive_timeout = 2880000??? ?<- 把時間改大??? 有延長出現訊息的時間

方法2.
wait_timeout=0 ??? ?<-?? 聽說會變得無限制 ? 不會還是會出現訊息
interactive_timeout =?0??? <-?? 聽說會變得無限制?? ?? 不會還是會出現訊息

方法3.
有人說問題發生在? 日期切換的時候?? 也就是例如 2010/11/02? 23:59:59?? -> 2010/11/03? 00:00:00? 的時候
可是我去改時間設定然後測試??? 不會發生錯誤耶
//***********************************************************************************************************************
請問各位前輩?? 程式希望可以24小時持續使用
??? ?請問還有什麼方法 可以解決嗎???? 謝謝
kostin
一般會員


發表:18
回覆:43
積分:22
註冊:2010-03-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-11-03 18:39:59 IP:122.127.xxx.xxx 訂閱
感謝carstyc 大大的回覆
我的程式有類似WatchDOG功能 每分鐘會去讀寫一次資料庫
所以我想我的程式有一直 用到資料庫
當初會去寫 "每分鐘會去讀寫一次資料庫 " 這功能 就是怕MySQL會主動斷掉
還是寫完後 還會出現 gone away ><
===================引 用 carstyc 文 章===================
通常 MySQL server has gone away 是因為 Connection 太久沒用才會出現 Mysql 自動把connection 回收...

解法有2...

1.就是每隔一段時間...讓connection 動一下...就是隨便下個SQL查一下東西.....反正就是有動作...在timeout 時間內....mysql 應該不會主動斷掉。
2.你何必要把 Connection 持續開著...當你資料查詢完後... 連connection 也一併close....當下次要Query時...才再去連接connection..就不會有這個問題了...

以上供您參考...謝謝
------
工程師的世界太深奧了 ~ 總是有不斷的驚奇發生
在解決問題的當下 , 才能確認我的存在
在得到幫助的當下 , 才能發現我不孤單
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-11-04 05:31:34 IP:203.67.xxx.xxx 訂閱
改用 MySQL 5.x 呢 ?
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-11-04 06:53:46 IP:219.84.xxx.xxx 訂閱
你有描述到你從 8:30 - 18:00  ,程式是正常執行不會有問題....

但電腦有休眠,但隔天要用的時候,需要Query資料庫時才出現錯誤。

我實在有點懷疑.....白天的時候程式能正常執行,表示每分鐘去Query一次,其實應該已經不會發生Connection被回收的問題才對...

問題應該出在休眠的那段期間, 程式到底還有沒有每分鐘發出Query.....這個可能需要你想個辦法,比如多增加一個Table,把每次Query的時間先記錄下來,然後隔天再來看看是不是有持續在Query。


另外我還是建議,在Query完後,直接把Connection關閉掉,對你的程式只是多加一行 Connction->close 的動作,當你的Query元件要查詢時,它會自動去對Connection做連接,這一部份可以不用加寫程式碼,所以應該不用改很多code....如此便可一勞永逸的解決這個問題....

供您參考,謝謝


===================引 用 kostin 文 章===================
感謝carstyc 大大的回覆
我的程式有類似WatchDOG功能 每分鐘會去讀寫一次資料庫
所以我想我的程式有一直 用到資料庫
當初會去寫 "每分鐘會去讀寫一次資料庫" 這功能 就是怕MySQL會主動斷掉
還是寫完後 還會出現 gone away ><
===================引 用 carstyc 文 章===================
通常 MySQL server has gone away 是因為 Connection 太久沒用才會出現 Mysql 自動把connection 回收...

解法有2...

1.就是每隔一段時間...讓connection 動一下...就是隨便下個SQL查一下東西.....反正就是有動作...在timeout 時間內....mysql 應該不會主動斷掉。
2.你何必要把 Connection 持續開著...當你資料查詢完後... 連connection 也一併close....當下次要Query時...才再去連接connection..就不會有這個問題了...

以上供您參考...謝謝
kostin
一般會員


發表:18
回覆:43
積分:22
註冊:2010-03-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-11-22 08:41:38 IP:122.127.xxx.xxx 訂閱
感謝 carstyc 大大的回覆 小弟經由您的建議
從 11/18 測試至今早 沒有出現問題了 實在感謝
另外再請教
小弟原本測試時 是在每次Query完後加上

ADOQuery1->Connection->Connected=false;
ADOCommand1->Connection->Connected=false;
ADOConnection1->Connected =false;

今天再看一次您的回覆是寫

ADOQuery1->Connection->Close();
ADOCommand1->Connection->Close();
ADOConnection1->Close();

Q1: 有需要三個元件都 Close()嗎??
Q2: 這兩種用法又什麼差嗎??

謝謝 感恩
===================引 用 carstyc 文 章===================
你有描述到你從 8:30 - 18:00 ,程式是正常執行不會有問題....

但電腦有休眠,但隔天要用的時候,需要Query資料庫時才出現錯誤。

我實在有點懷疑.....白天的時候程式能正常執行,表示每分鐘去Query一次,其實應該已經不會發生Connection被回收的問題才對...

問題應該出在休眠的那段期間, 程式到底還有沒有每分鐘發出Query.....這個可能需要你想個辦法,比如多增加一個Table,把每次Query的時間先記錄下來,然後隔天再來看看是不是有持續在Query。


另外我還是建議,在Query完後,直接把Connection關閉掉,對你的程式只是多加一行 Connction->close 的動作,當你的Query元件要查詢時,它會自動去對Connection做連接,這一部份可以不用加寫程式碼,所以應該不用改很多code....如此便可一勞永逸的解決這個問題....

供您參考,謝謝


===================引 用 kostin 文 章===================
感謝carstyc 大大的回覆
我的程式有類似WatchDOG功能 每分鐘會去讀寫一次資料庫
所以我想我的程式有一直 用到資料庫
當初會去寫 "每分鐘會去讀寫一次資料庫" 這功能 就是怕MySQL會主動斷掉
還是寫完後 還會出現 gone away ><
===================引 用 carstyc 文 章===================
通常 MySQL server has gone away 是因為 Connection 太久沒用才會出現 Mysql 自動把connection 回收...

解法有2...

1.就是每隔一段時間...讓connection 動一下...就是隨便下個SQL查一下東西.....反正就是有動作...在timeout 時間內....mysql 應該不會主動斷掉。
2.你何必要把 Connection 持續開著...當你資料查詢完後... 連connection 也一併close....當下次要Query時...才再去連接connection..就不會有這個問題了...

以上供您參考...謝謝
------
工程師的世界太深奧了 ~ 總是有不斷的驚奇發生
在解決問題的當下 , 才能確認我的存在
在得到幫助的當下 , 才能發現我不孤單
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-11-22 08:48:00 IP:203.79.xxx.xxx 訂閱
ADOQuery1->Connection  跟  ADOCommand1->Connection  都是指到  ADOConnection1

所以你只要 ADOConnection1-> Connected = false; 即可....


===================引 用 kostin 文 章===================
感謝?carstyc? 大大的回覆?? 小弟經由您的建議??
從 11/18 測試至今早? 沒有出現問題了? 實在感謝
另外再請教
小弟原本測試時? 是在每次Query完後加上?

ADOQuery1->Connection->Connected=false;
ADOCommand1->Connection->Connected=false;
ADOConnection1->Connected =false;

今天再看一次您的回覆是寫

ADOQuery1->Connection->Close();
ADOCommand1->Connection->Close();
ADOConnection1->Close();

Q1: 有需要三個元件都 Close()嗎??
Q2: 這兩種用法又什麼差嗎??

謝謝? 感恩
===================引 用 carstyc 文 章===================
你有描述到你從 8:30 - 18:00 ,程式是正常執行不會有問題....

但電腦有休眠,但隔天要用的時候,需要Query資料庫時才出現錯誤。

我實在有點懷疑.....白天的時候程式能正常執行,表示每分鐘去Query一次,其實應該已經不會發生Connection被回收的問題才對...

問題應該出在休眠的那段期間, 程式到底還有沒有每分鐘發出Query.....這個可能需要你想個辦法,比如多增加一個Table,把每次Query的時間先記錄下來,然後隔天再來看看是不是有持續在Query。


另外我還是建議,在Query完後,直接把Connection關閉掉,對你的程式只是多加一行 Connction->close 的動作,當你的Query元件要查詢時,它會自動去對Connection做連接,這一部份可以不用加寫程式碼,所以應該不用改很多code....如此便可一勞永逸的解決這個問題....

供您參考,謝謝


===================引 用 kostin 文 章===================
感謝carstyc 大大的回覆
我的程式有類似WatchDOG功能 每分鐘會去讀寫一次資料庫
所以我想我的程式有一直 用到資料庫
當初會去寫 "每分鐘會去讀寫一次資料庫" 這功能 就是怕MySQL會主動斷掉
還是寫完後 還會出現 gone away ><
===================引 用 carstyc 文 章===================
通常 MySQL server has gone away 是因為 Connection 太久沒用才會出現 Mysql 自動把connection 回收...

解法有2...

1.就是每隔一段時間...讓connection 動一下...就是隨便下個SQL查一下東西.....反正就是有動作...在timeout 時間內....mysql 應該不會主動斷掉。
2.你何必要把 Connection 持續開著...當你資料查詢完後... 連connection 也一併close....當下次要Query時...才再去連接connection..就不會有這個問題了...

以上供您參考...謝謝
系統時間:2018-01-18 23:26:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!