成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL為什么莫名其妙的斷開連接以及解決方案!

數據庫 MySQL
在部署完成后,網站當時可以正常工作,但是第二天訪問網站的時候卻會遇到一個500 Server Error。應考慮在程序中進行數據庫操作之前檢驗數據庫連接的有效性或者將數據庫的autoReconnect屬性設置為true來避免這個問題。

前言

最近遇到在將本地的項目部署到服務器上之后遇到的一個奇怪問題:

在部署完成后,網站當時可以正常工作,但是第二天訪問網站的時候卻會遇到一個500 Server Error。

從日志中可以看出是MySQL數據庫出現了異常:

翻譯如下:

最后一個數據包在 83827560 ms 之前被成功接收,最后一個數據包在83827560 ms 之前被成功發送。比服務的配置參數wait_timeout的值要長。

日志中給出的建議如下:

翻譯如下:

你應考慮在程序中進行數據庫操作之前檢驗數據庫連接的有效性或者將數據庫的autoReconnect屬性設置為true來避免這個問題

關于wait_timeout和autoReconnect下面我們會依次分析介紹!

原因分析

我們進入mysql的命令行查詢超時時間:

28800單位是秒轉化成小時就是8小時,看出MySQL的默認設置,當一個連接的空閑時間超過8小時后,MySQL就會斷開該連接。

所以發現問題出在如果超過這個wait_timeout時間(默認是8小時)對數據庫沒有任何操作,那么MySQL會自動關閉數據庫連接以節省資源。

數據庫連接自動斷開的問題確實是在第二天發生了,也就是在一個晚上沒有對數據庫進行操作(顯然超過了8小時)的情況下發生的這個問題。

大家用命令show processlist; 可以查看Sleep狀態的進程Sleep,同時可以看到每個進程Sleep多久了:

下面介紹下解決和優化辦法!

解決方法

1. autoReconnect

這個參數表示在mysql超時斷開連接后會自動重新連接,配置的話,只需要在連接mysql的語句寫上autoReconnect=true:

jdbc:mysql://127.0.0.1:3306/stock_tweet?autoReconnect=true 

下面是MySQL官網對autoReconnect的解釋:

同時可以看到官網不推薦使用這個參數,因為它有一些副作用,具體介紹下:

  • 原有連接上的事務將會被回滾,事務的提交模式將會丟失;
  • 原有連接持有的表的鎖將會全部釋放;
  • 原有連接關聯的會話Session將會丟失,重新恢復的連接關聯的將會是一個新的會話Session;
  • 原有連接定義的用戶變量將會丟失;
  • 原有連接定義的預編譯SQL將會丟失;
  • 原有連接失效,新的連接恢復后,MySQL將會使用新的記錄行來存儲連接中的性能數據;

2. 修改配置

涉及到兩個配置參數interactive_timeout和wait_timeout:

  • wait_timeout 指的是mysql在關閉一個非交互的連接之前所要等待的秒數
  • interactive_time 指的是mysql在關閉一個交互的連接之前所要等待的秒數

對于交互和非交互連接,說得直白一點就是,通過mysql客戶端連接數據庫是交互式連接,通過jdbc連接數據庫是非交互式連接。

配置方法:

(1) 會話方式

msyql> set global wait_timeout=2880000;
msyql> set global interactive_timeout=2880000;

這種方式只對當前會話生效.

(2) 修改配置文件方式

修改/etc/my.cnf文件,在 [mysqld] 節中設置:

之后再重啟下服務器就好了!

注意:

  • 將wait_timeout這個值設置得大了,可能會導致空閑連接過多。
  • 如果你的MySQL Server有大量的閑置連接,他們不僅會白白消耗內存,而且如果連接一直在累加而不斷開,最終肯定會達到MySQL Server的連接上限數,這會報'too many connections'的錯誤。

3. 連接池配置

因為連接池的配置也會影響項目和MySQL的連接,所以也需要對數據庫連接池的一些配置做一定修改

我們以Spring Boot 2.0默認的數據庫連接池HikariCP為例

主要是下面這幾個配置

(1) maximum-pool-size:

最大連接數,超過這個數,新的數據庫訪問線程會被阻,缺省值:10。

常見的錯誤是設置一個太大的值,連接數多反而性能下降。

參考計算公式是:

#core_count:CPU個數,effective_spindle_count:硬盤個數
connections = ((core_count * 2) + effective_spindle_count)

例如:一個4核,1塊硬盤的服務器,連接數 = (4 * 2) + 1 = 9,湊個整數,10就可以了。

(2) minimum-idle:

最小的連接數目。

(3) max-lifetime:

最大的連接時間,用來設置一個connection在連接池中的存活時間。

缺省:30分鐘。強烈建議設置比數據庫超時時長少一點(MySQL的wait_timeout參數一般為8小時)。

(4) idle-timeout:

一個連接idle狀態的最長時間,超時則被釋放。

責任編輯:趙寧寧 來源: 月伴飛魚
相關推薦

2022-04-27 10:02:20

MySQL數據庫

2011-07-13 09:59:55

2021-12-09 09:01:21

iOS 15蘋果 APP

2010-02-22 16:44:15

CentOS Mysq

2021-02-14 13:25:46

Windows 10Windows微軟

2019-05-21 09:54:45

貸款網貸賬戶

2009-10-20 09:57:31

Windows 7系統崩潰

2010-06-18 14:02:13

2021-09-13 05:18:36

硬盤應用WizTree

2021-08-11 22:48:07

Windows 10Windows微軟

2010-12-05 19:43:51

2019-10-10 15:14:35

人工智能機器學習技術

2020-12-11 08:41:00

高可用Chaos 系統

2019-07-29 07:29:05

2010-06-04 18:24:20

2019-05-10 15:36:25

物聯網IOT技術

2021-07-29 10:59:41

物聯網IOT

2010-10-22 14:20:35

SQL SERVER連

2009-07-31 11:41:12

光纖連接數據中心

2018-11-12 11:12:46

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 69视频在线播放 | 人人干超碰| 在线观看免费av网 | 久久亚洲欧美日韩精品专区 | 一级黄在线观看 | 国产精品一区二区在线 | 欧美日韩在线播放 | 日本一区二区不卡 | av免费网址| 国产精品中文字幕在线 | 久久av一区 | 亚洲第一成人影院 | www.欧美.com| 自拍偷拍中文字幕 | 麻豆av电影网 | 精品国产一区二区三区久久久久久 | 亚洲视频一区在线观看 | 人人色视频 | 国产视频精品免费 | 日本人爽p大片免费看 | 91色综合 | 国产中文字幕亚洲 | 日韩精品久久久 | 国产农村妇女精品一二区 | 国产亚洲精品久久19p | 久久高清 | 操操日| 日本在线中文 | h视频免费在线观看 | 成年人免费网站 | 黄色大片网站 | 综合久久综合久久 | 一区二视频 | 欧美一级二级在线观看 | 日韩一区二区黄色片 | 蜜月aⅴ免费一区二区三区 99re在线视频 | av片网站| 九九久久国产精品 | 亚洲精品不卡 | 国产一区欧美 | 亚洲一区二区久久 |