<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0
    MYSQL BUG?。?020
    描述:
       MYSQL網站BUG公示
    錯誤MESSAGE:
    ????
    Connection?was?closed?due?to?the?following?exception:

    **?BEGIN?NESTED?EXCEPTION?**?

    java.sql.SQLException
    MESSAGE:?Communication?link?failure:?java.net.SocketException,?underlying?cause:?Software?caused?connection?abort:?recv?failed

    **?BEGIN?NESTED?EXCEPTION?**?

    java.net.SocketException
    MESSAGE:?Software?caused?connection?abort:?recv?failed

    STACKTRACE:

    java.net.SocketException:?Software?caused?connection?abort:?recv?failed
    ????at?java.net.SocketInputStream.socketRead0(Native?Method)
    ????at?java.net.SocketInputStream.
    read(SocketInputStream.java:129)
    ????at?java.io.BufferedInputStream.fill(BufferedInputStream.java:
    183)
    ????at?java.io.BufferedInputStream.read1(BufferedInputStream.java:
    222)
    ????at?java.io.BufferedInputStream.
    read(BufferedInputStream.java:277)
    ????at?com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:
    1385)
    ????at?com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:
    1532)
    ????at?com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:
    1923)
    ????at?com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:
    1163)
    ????at?com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:
    1272)
    ????at?com.mysql.jdbc.Connection.execSQL(Connection.java:
    2236)
    ????at?com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:
    1555)
    ????at?net.sf.hibernate.impl.BatcherImpl.getResultSet(BatcherImpl.java:
    89)
    ????at?net.sf.hibernate.loader.Loader.getResultSet(Loader.java:
    880)
    ????at?net.sf.hibernate.loader.Loader.doQuery(Loader.java:
    273)
    ????at?net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:
    138)
    ????at?net.sf.hibernate.loader.Loader.doList(Loader.java:
    1063)
    ????at?net.sf.hibernate.loader.Loader.list(Loader.java:
    1054)
    ????at?net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:
    854)
    ????at?net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:
    1554)
    ????at?net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:
    1531)
    ????at?net.sf.hibernate.impl.SessionImpl.
    delete(SessionImpl.java:1678)
    ????at?net.sf.hibernate.impl.SessionImpl.
    delete(SessionImpl.java:1664)
    出錯原因:
       我們的系統一天24小時運行,但在夜晚的時候是沒有人連接的,因此Socket連接就超時了。早上嘗試做任何事情(比如:登錄)都將以失敗告終,除非我們關閉連接或者重新建立連接。3.0.11后才會發生這種情況。
       現在我們使用的MYSQL版本號為4.016,問題一樣。
    專家建議:
       [Mark Matthews],翻譯如下:
       注意:我不贊成Autoreconnect功能,在以后的發行版本中,它最終會被移除。在這種特殊情況下,它不起作用的原因是:在3.0.11以后,autoreconnect的方法變得更加安全了并且和阿utoCommit狀態有關聯,這樣的話就能使當前‘in-flight’事務失?。ㄈ绻阍谑『?,再次試圖連接事務,就會重新被連接)。請查看相關解釋文檔,文檔的修復故障中包括如何正確實用這個屬性。無論在哪種情況下,   如果TCP/IP在沒有連接的情況下并且還不會冒著數據庫被癱瘓的危險,是沒有百分之百的方式使得JDBC驅動器被自動重連接的,這也是為何要移除Autoreconnect功能的原因。不管網絡發生什么情況,    JDBC 都不會說明這個連接是否處于連接狀態。JDBC driver 客戶端負責處理網絡故障,只有應用程序本身(實際上是應用程序的開發者)知道如何正確應對事務失敗的情況。在服務器上過期的‘Waittimeout’基本上是服務器給與的強制性網絡故障。你通過把‘Waittimeout’設置的高點兒就可以改正它,盡管如此,作為一個開發者,你的代碼應該包含相關的異常處理并采取適當的恢復措施,不要都把它們傳到調用堆中。
       連接錯誤總是有一個SQL狀態‘08’。如果你發現它的話,你可以再連接一次并重試事務(如果是適當的話)
       不管什么原因,如果這樣不起作用的話,配置你的連接池來測試是否處于連接狀態并且那些長時間閑置連接(所有的連接池都能這樣做,但是它們的配置取決于池子)。
    作者說明:在MYSQL4.1以后的版本當中,沒有“wait_timeout”變量,由
    interactiveClient代替
    參考資料:http://dev.mysql.com/doc/connector/j/en/cj-configuration-properties.html
    ???? [
    Kirk Wylie]:翻譯如下:
       
    如果有一個事務在運行的話,就能得到一個特別簡單的例子:
        
    ---如果連接在autoCommit模式下,autoReconnect是安全的。
        
    ---如果連接不在autoCommit模式下,但是沒有打開的事務,autoReconnect是安全的。(因為連接可能在池在里面)
        ---如果連接不在autoCommit模式下,有打開的事務,這樣就會拋出異常。
       
    這樣會解決你不在autoRecom\nnect模式下的憂慮并且會保留應用程序的功能性。
       盡管如此,在它改變的時候,在改變日志中沒有任何記錄說明發生了改變,這點令我很煩。由于這種改變很可能破壞我的應用程序,這種變化因該添加到CHANGE文件中。

      如下是我個人的做法:
      (STRUTS+SPRING+HIBERNATE)
      1、把mysql的變量
    interactiveClient由默認的28800(8個小時)延長。并告知用戶多長時間后,重新啟動TOMCAT服務器。不過,MYSQL5.0.12版本以前的所有版本,只要你設置成了默認語言為GBK,所有對interactive_timeout(wait_timeout)的時候如何設置,重新連接或者重新啟動MYSQL后,都是28800,現在我使用的5.0.18后,使用GBK,沒有問題。
      2、在HIBERNATE當中加入:
       
    ..
    <property?name="hibernate.connection.url">jdbc:mysql://192.168.100.111/eai?autoReconnect=true</property>
    <property?name="enableDeprecatedAutoreconnect">true</property>
    <!--? 如下的語句是使用第三方的DBCP來建立連接池 -->
    <property name="dbcp.maxActive">100</property>
    <property name="dbcp.whenExhaustedAction">1</property>
    <!--? 看到了沒有,這個maxWait一定要大于MYSQL默認的28800(秒) -->
    <property name="dbcp.maxWait">30000</property>
    <property name="dbcp.maxIdle">10</property>

    <property name="dbcp.ps.maxActive">100</property>
    <property name="dbcp.ps.whenExhaustedAction">1</property>
    <property name="dbcp.ps.maxWait">30000</property>
    <property name="dbcp.ps.maxIdle">10</property>
    ..
    ????
     如上兩種方法均可,推薦大家使用第二種方法,來遮擋一下MYSQL的BUG。
    如果有不對之處,請大家提出自己的見解。

    posted on 2006-08-04 20:16 SIMONE 閱讀(486) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: va天堂va亚洲va影视中文字幕| 亚洲国产aⅴ成人精品无吗| 美女黄频视频大全免费的| 女人被免费视频网站| 亚洲人成7777| av大片在线无码免费| 亚洲一级毛片免费看| 毛色毛片免费观看| 亚洲人成无码网站在线观看 | 亚洲日韩AV一区二区三区四区| 最近中文字幕大全中文字幕免费| 18亚洲男同志videos网站| 91人人区免费区人人| 亚洲精品中文字幕无码AV| 日日麻批免费40分钟日本的| 亚洲喷奶水中文字幕电影| 精品久久8x国产免费观看| 亚洲资源最新版在线观看| 毛片免费观看网站| 校园亚洲春色另类小说合集| 免费二级毛片免费完整视频| 9久热这里只有精品免费| 亚洲av无码成h人动漫无遮挡| 57pao一国产成视频永久免费| 免费国产综合视频在线看| 国产vA免费精品高清在线观看| 久久91亚洲人成电影网站| 99久久久国产精品免费牛牛四川 | 91免费国产在线观看| 亚洲性无码AV中文字幕| 亚洲av成人一区二区三区在线观看| 午夜免费国产体验区免费的| 亚洲国产美女精品久久久久∴| 69视频免费在线观看| 亚洲欧美日韩中文字幕一区二区三区 | 区久久AAA片69亚洲| 91人人区免费区人人| 精品久久久久久久久亚洲偷窥女厕| 亚洲中文字幕丝袜制服一区| 99久久99热精品免费观看国产| 亚洲а∨精品天堂在线|