出現的問題: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
解決: 原因1: 首先,請確定用戶端電腦能否ping通伺服器電腦。不能估計是原因2,可以的話可以繼續本方法。
大部分原因是由於資料庫回收了串連,而系統的緩衝池不知道,繼續使用被回收的串連所致的。
以MySQL為例:
第一種解決辦法,就是將mysql回收空閑串連的時間變長,mysql預設回收時間是8小時,可以在mysql目錄下的my.ini中增加下面配置,將時間改為1天。單位是秒,最大好像是24天:
[mysqld]
wait_timeout=86400
第二種解決辦法,可以通過配置,讓緩衝池去測試連接是否被回收,如果被回收,則不繼續使用,以dbcp為例:
#SQL查詢,用來驗證從串連池取出的串連
dbcp.validationQuery=SELECT 1
#指明串連是否被空閑串連回收器(如果有)進行檢驗,如果檢測失敗,則串連將被從池中去除
dbcp.testWhileIdle=true
#在空閑串連回收器線程運行期間休眠的時間值,以毫秒為單位,一般比minEvictableIdleTimeMillis小
dbcp.timeBetweenEvictionRunsMillis=300000
#在每次空閑串連回收器線程(如果有)運行時檢查的串連數量,最好和maxActive一致
dbcp.numTestsPerEvictionRun=50
#串連池中串連,在時間段內一直空閑,被逐出串連池的時間(1000*60*60),以毫秒為單位
dbcp.minEvictableIdleTimeMillis=3600000
原因2: windows防火牆不允許訪問。關閉防火牆,或者允許指定連接埠訪問。
原因3: 1。改表法。可能是你的帳號不允許從遠程登陸,只能在localhost。這個時候只要在localhost的那台電腦,登入mysql後,更改 "mysql" 資料庫裡的 "user" 表裡的 "host" 項,從"localhost"改稱"%" 1.mysql -u root -pvmwaremysql>use mysql;mysql>update user set host = '%' where user = 'root';mysql>select host, user from user; 2. 授權法。例如,你想myuser使用mypassword從任何主機串連到mysql伺服器的話。 GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; 如果你想允許使用者myuser從ip為192.168.1.3的主機串連到mysql伺服器,並使用mypassword作為密碼 GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; 3.在window內建的防火牆裡的例外添加3306連接埠 總結: mysql -u root -p mysql>use mysql; mysql>select 'host' from user where user='root'; mysql>update user set host = '%' where user ='root'; mysql>flush privileges; mysql>select 'host' from user where user='root'; 第一句是以許可權使用者root登入 第二句:選擇mysql庫 第三句:查看mysql庫中的user表的host值(即可進行串連訪問的主機/IP名稱) 第四句:修改host值(以萬用字元%的內容增加主機/IP地址),當然也可以直接增加IP地址 第五句:重新整理MySQL的系統許可權相關表 第六句:再重新查看user表時,有修改。。 重起mysql服務即可完成。
如果第一個方法不行,在網上查了一下,少執行一個語句 mysql>FLUSH PRIVILEGES 使修改生效.就可以了