伺服器上的WEB項目反覆出現MySQL資料庫連接失敗解決辦法,mysql資料庫連接
一個原因是沒有關閉MySQL的定時任務計劃,每天淩晨MySQL會預設運行一個自動更新的定時任務計劃,如果沒有關閉,就會自動中斷連線。
解決辦法:
1、這是一個基本的許可權問題。去MySQL安裝目錄下,按右鍵MySQL檔案夾,進入安全選項卡下,單擊“編輯使用者組”,在“組和使用者”選擇你的電腦的使用者,選擇允許的情況下所有的項,應用並關閉。
2、這是一個Windows的任務計劃服務,刪除即可,開始右鍵/電腦管理/工作排程器/工作排程器庫/MySQL/Installer/ManifestUpdate,按右鍵並選擇“禁用”。
另一個原因是MySQL資料庫的資料庫連接有生存期限制,如果在規定時間內沒有操作資料庫連線物件,串連就會被關閉。也就是常說的MySQL的8小時問題
MySQL伺服器預設串連的“wait_timeout”是8小時,也就是說一個Connection空閑超過8個小時,MySQL將自動斷開該 Connection。但是資料庫連接池並不知道串連已經斷開了,如果程式正巧使用到這個已經斷開的串連,程式就會報錯誤。
先來瞭解一下資料庫連接池:
用JAVA代碼操作資料庫需要資料庫連接對象,一個使用者至少要用到一個串連。現在假設有成千上百萬個使用者,就要建立十分巨大數量的連線物件,這會使資料庫承受極大的壓力,為瞭解決這種現象,一種技術出現了,這就是資料庫連接池。
所謂資料庫連接池,可以看作在使用者和資料庫之間建立一個“池”,這個池中有若干個連線物件,當使用者想要串連資料庫,就要先從串連池中擷取連線物件,然後操作資料庫。一旦串連池中的連線物件被拿光了,下一個想要操作資料庫的使用者必須等待,等待其他使用者釋放連線物件,把它放回串連池中,這時候等待的使用者才能擷取連線物件,從而操作資料庫。
- 以下是兩個串連池的簡單實現~
代碼來自:https://www.cnblogs.com/vmax-tam/p/4158802.html
代碼來自:https://www.cnblogs.com/xiaotiaosi/p/6398371.html
代碼我就不搬過來了,重點講講如何解決問題
方法一:修改資料庫的等待時間
1、首先重啟MySQL服務,開始→右鍵→電腦管理→服務,找到MySQL的服務,重新啟動
2、設定MySQL最大等待時間,運行MySQL 5.7 Command Line Client,輸入密碼後,拷貝運行以下程式碼片段:
show variables LIKE '%timeout%';show global variables LIKE '%timeout%';set global wait_timeout=2147483;set wait_timeout=2147483;set global interactive_timeout=31536000;set interactive_timeout=31536000;
3、重啟Tomcat
方法二:讓自己編寫的資料庫連接池代碼產生資料庫連接對象時,增加一個自動重新整理的功能,間隔時間自動產生一個新的資料庫連接對象。也就是定期使用串連池內的串連,使得它們不會因為閑置逾時而被 MySQL 斷開。
方法三:串連資料庫的時候加上autoReconnect=true這個參數:
jdbc:mysql://localhost:3306/accounant?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
方法四:減少串連池內串連的生存周期,使之小於上述項中所設定的“wait_timeout”的值。
方法五:將“testOnBorrow”設定為false,而將“testWhileIdle”設定為true,再設定好“testBetweenEvictionRunsMillis”值(小於8小時)。那些被MySQL關閉的串連就不會被清除出去,避免“8小時問題”。
例:http://www.totcms.com/html/201602-29/20160229114145.htm
Apache官方文檔給出的配置樣本可參見:http://tomcat.apache.org/tomcat-9.0-doc/