mysql 系統使用者最大檔案開啟數限制

2021-09-19 19:44:15 字數 1966 閱讀 6380

mysql 系統使用者最大檔案開啟數限制

紙上得來終覺淺,絕知此事多宕機...記錄一下自己很蠢的一次故障處理過程。

上週的時候,乙個剛上線的系統又開始反映登不上了,因為最近這個系統也老是出現這個問題,開發也一直在找問題中,所以也沒太在意。於是登上作業系統,mysql -uroot -p登入資料庫,然後就一直沒反應,登不上...

交代一下,mysql是裝在mysql使用者下的,裝的時候雖然對資料庫引數有進行調優,但是作業系統層面沒做調整,所以mysql使用者的最大檔案開啟數限制為預設的1024,用ulimit -n可以查詢。然後我在用mysql的root賬號登入資料庫的時候也是在mysql這個系統使用者下登入的,然後看了下當時伺服器的負載,cpu和記憶體這些都很正常,但是存在大量應用到資料庫的連線。

到這兒問題應該就很清楚了,系統使用者mysql檔案開啟數可能達到了最大限制,當然不能開啟更多的連線。

然而當時我並沒有想到這一點,我想到的不是換個系統使用者登入,不是停掉應用,而是重啟資料庫。。。而且這個資料庫跑的不只這乙個業務,雖然也都不是什麼重要的業務。。。

於是我就準備重啟資料庫,仍然是在mysql使用者下執行mysqladmin -uroot -p shutdown。毫無疑問,這肯定也是沒有反應的,道理跟前面root賬號連不上資料庫是一樣的,ctrl+c後有以下報錯

^cmysqladmin: connect to server at '

localhost

'failed

error:

'lost connection to mysql server at

'waiting for initial communication packet'

, system error: 4

'

然後我就做了個更蠢的操作,雖然想著可能會丟資料,殺掉了mysql程序。。。然後重啟mysql,系統也就可用了。是真的很蠢,做完之後馬上就想起有多種更好的處理方法,卻選擇了最蠢的一種。

今天再登上資料庫看的時候,發現有幾個引數跟我配置檔案裡寫的不一樣,比如max_connections、table_open_cache等,都是設定的預設值,看了下上次啟動日誌,確實也有告警

2019-03-15t08:14:03.038750z 0 [warning] changed limits: max_open_files: 1024 (requested 12010

)2019-03-15t08:14:03.038911z 0 [warning] changed limits: max_connections: 214 (requested 2000

)2019-03-15t08:14:03.038916z 0 [warning] changed limits: table_open_cache: 400 (requested 5000)

很明顯,mysql根據引數設定計算了例項需要開啟的最大檔案數超過了當前系統使用者的最大限制,於是沒有使用該引數而使用了預設值。當然啟動起來資料庫也是可用的,啟起來後也可以手動把設定引數

set

global max_connections=2000

;set

global table_open_cache=5000;

只不過就很有可能出現我之前出現的問題了,也就是資料庫連線數並沒有達到max_connections的限制,使用者仍然連線不上。需要說明的是,正常情況下就算連線數滿了,mysql仍然會為root使用者保留乙個連線,也就是root使用者是可以登入資料庫檢視問題的。

要解決也很簡單,增大作業系統使用者mysql的限制值就行了,在配置檔案/etc/security/limits.conf後面加上新的限制值就行了。

mysql   soft    nofile  32768

mysql hard nofile

65535

最大檔案開啟數

有些機器上,服務的tcp連線特別多,可能上100k 這時如果系統沒有優化好,就會出現too many open file的報錯 file max是核心可分配的最大檔案數 一般系統預設核心可分配的最大檔案數是記憶體 kb為單位 的10 左右 下面就是乙個4g的機器的資訊。cat proc sys fs...

Linux最大檔案開啟數

在linux下有時會遇到socket file can t open so many files的問題。其實linux是有檔案控制代碼限制的,而且linux預設一般都是1024 阿里雲主機預設是65535 在生產環境中很容易到達這個值,因此這裡就會成為系統的瓶頸。使用ulimit a 或者 ulim...

Linux最大檔案開啟數

linux作業系統對乙個程序開啟的檔案控制代碼數量的限制 也包含開啟的套接字數量 臨時生效 ulimit shn 10000 其實ulimit 命令身是分軟限制和硬限制,加 h就是硬限制,加 s就是軟限制。預設顯示的是軟限制,如果執行ulimit 命令修改時沒有加上 h或 s,就是兩個引數一起改變。...