MySQL server has gone away |
答題得分者是:carstyc
|
kostin
一般會員 ![]() ![]() 發表:18 回覆:43 積分:22 註冊:2010-03-11 發送簡訊給我 |
小弟目前使用 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 發送簡訊給我 |
通常 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 發送簡訊給我 |
感謝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 發送簡訊給我 |
|
carstyc
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:16 回覆:254 積分:329 註冊:2003-07-18 發送簡訊給我 |
你有描述到你從 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 發送簡訊給我 |
感謝 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 發送簡訊給我 |
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..就不會有這個問題了... 以上供您參考...謝謝 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |