4天4夜渡劫成功,解決10月1專案上線遇到的一個Mysql大坑,導致專案無法正常存取

2020-10-07 12:00:59

經歷4天4夜解決10月1專案上線遇到的一個Mysql大坑,導致專案無法正常存取

標題是不是驚訝到你了,但是確實是一個大坑,特此記錄下來,方便他人查閱。
標題雖然誇張了,但是問題確實真真實實的。

一、問題重現

由於工作室的幾個團隊需要釋出專案,參加比賽。

正好都擠在了最後2天,時間也比較緊張。

由於學弟學妹們對專案在伺服器上的部署過程並不是太熟悉,又恰巧我對這方面還略知一二,還因為我有一臺比學生機設定稍微高一點的阿里雲伺服器(幾年前阿里雲搞活動花了我好幾千買的幾年的,心痛啊)。

他們都需要提交作品的url,和演示PPT、演示視訊等材料。

url是必須要寫在PPT裡的,所以他們就比較著急呀,我的伺服器是Linux的,我玩的可能比較6,但是學弟學妹們可能就不太行了。

但是我當時也沒辦法幫他們部署到伺服器,因為我當時還在上班。我就把Linux伺服器的磁碟給初始化調,然後給他們安裝了一個windows 2008 R2的伺服器。

並且指出來了一個很好的部署方法:

設定的和開發環境一樣就行了,直接啟動idea。

這種雖然不是正規的部署方法,但是對於他們是很有效的。

三個專案:
在這裡插入圖片描述

伺服器也給他們臨時升級了下記憶體和頻寬還有儲存:
在這裡插入圖片描述

但是專案每過一段時間就會出現問題,錯誤如下:
在這裡插入圖片描述
報錯的程式碼提示:

### Cause: java.sql.SQLException: Could not retrieve transation read-only status server
; SQL []; Could not retrieve transation read-only status server; nested exception is java.sql.SQLException: Could not retrieve transation read-only status server] with root cause

java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.

二、排查問題

網上說組態檔的問題,也有的說是連線mysql的時候有問題,各方面都有,綜合所述排查起來非常的困難。

程式碼在本地跑起來是沒問題的,線上上就有問題了。

那隻能是伺服器的問題了。

就這樣斷斷續續的嘗試了4天4夜,,這4天4夜是在有時間的情況下,哈哈,並不是從天亮到天黑的那種。

往上所說的解決辦法都不起作用。

只好親自手動去一點一點排查了。

1、檢查了組態檔,沒問題;
2、檢查Mysql的組態檔。

發現Mysql的連線的超時時間和原生的Mysql的超時時間是不一致的。只有短短的120秒,所以這個地方是存在問題的,無疑了。

可以通過下方這個命令進行檢視關於時間的設定資訊:

show variables like '%timeout%'

在這裡插入圖片描述

三、解決問題

修改組態檔唄;把相關的這兩條修改一下。

可以通過set命令來暫時修改:

set wait_timeout= 86400;
set interactive_timeout= 86400;

在這裡插入圖片描述
檢視是否修改成功:
在這裡插入圖片描述

但是如果重新啟動的話,就會恢復過來預設的。

那麼就需要修改組態檔了:

[mysqld]
...省略其他的
interactive_timeout=86400
wait_timeout=86400
...省略其他的

修改之後需要重新啟動Mysql服務。

就是永久的了。

至此問題解決了。

四、關於Mysql這兩個引數的作用以及解釋

可以開啟Mysql的官方手冊:
https://dev.mysql.com/doc/refman/5.7/en

然後找到Mysql的系統變數說明:
在這裡插入圖片描述

然後搜尋一下,你需要檢視的變數:
在這裡插入圖片描述

  • wait_timeout

在這裡插入圖片描述

官方解釋:

The number of seconds the server waits for activity on a noninteractive connection before closing it.

On thread startup, the session wait_timeout value is initialized from the global wait_timeout value or from the global interactive_timeout value, depending on the type of client (as defined by the CLIENT_INTERACTIVE connect option to mysql_real_connect()). See also interactive_timeout.

伺服器關閉互動式連線前等待活動的秒數。

互動式使用者端定義為在mysql_real_connect()中使用CLIENT_INTERACTIVE選項的使用者端。又見wait_timeout

  • interactive_timeout

在這裡插入圖片描述

官方解釋:

The number of seconds the server waits for activity on an interactive connection before closing it.

An interactive client is defined as a client that uses the CLIENT_INTERACTIVE option to mysql_real_connect(). See also wait_timeout.

伺服器關閉非互動連線之前等待活動的秒數。

線上程啟動時,根據全域性wait_timeout值或全域性interactive_timeout值初始化對談wait_timeout值,取決於使用者端型別(由mysql_real_connect()的連線選項CLIENT_INTERACTIVE定義),又見interactive_timeout

五、總結

其實這就很奇怪的,Mysql的預設值是28800,為什麼我查詢到的預設值是120呢?????

通過檢視學弟安裝的Mysql我才知道,他是為了省事,直接安裝的下面這個軟體;所以還是有風險的,還是用官方的安裝比較穩!!!!

在這裡插入圖片描述

關注我微信公眾號第一時間推播給你哦:

回覆選單,更有好禮,驚喜在等著你。

在這裡插入圖片描述

快來我粉絲群:每天歡快的玩耍
在這裡插入圖片描述

TrueDei CSDN認證部落格專家 Linux 分散式 Java
不荒廢現在,不畏懼未來!我認為把知識給別人講會,講明白,自己才徹底明白。努力把文章寫好,寫明白每一篇文章,分享給更多人。