溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

mysql系統(tǒng)用戶(hù)最大文件打開(kāi)數(shù)限制的示例分析

發(fā)布時(shí)間:2021-07-29 13:51:07 來(lái)源:億速云 閱讀:118 作者:小新 欄目:MySQL數(shù)據(jù)庫(kù)

這篇文章給大家分享的是有關(guān)mysql系統(tǒng)用戶(hù)最大文件打開(kāi)數(shù)限制的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

mysql是裝在mysql用戶(hù)下的,裝的時(shí)候雖然對(duì)數(shù)據(jù)庫(kù)參數(shù)有進(jìn)行調(diào)優(yōu),但是操作系統(tǒng)層面沒(méi)做調(diào)整,所以mysql用戶(hù)的最大文件打開(kāi)數(shù)限制為默認(rèn)的1024,用ulimit -n可以查詢(xún)。然后我在用mysql的root賬號(hào)登錄數(shù)據(jù)庫(kù)的時(shí)候也是在mysql這個(gè)系統(tǒng)用戶(hù)下登錄的,然后看了下當(dāng)時(shí)服務(wù)器的負(fù)載,cpu和內(nèi)存這些都很正常,但是存在大量應(yīng)用到數(shù)據(jù)庫(kù)的連接。

mysql系統(tǒng)用戶(hù)最大文件打開(kāi)數(shù)限制的示例分析

到這兒?jiǎn)栴}應(yīng)該就很清楚了,系統(tǒng)用戶(hù)mysql文件打開(kāi)數(shù)可能達(dá)到了最大限制,當(dāng)然不能打開(kāi)更多的連接。

然而當(dāng)時(shí)我并沒(méi)有想到這一點(diǎn),我想到的不是換個(gè)系統(tǒng)用戶(hù)登錄,不是停掉應(yīng)用,而是重啟數(shù)據(jù)庫(kù)。。。而且這個(gè)數(shù)據(jù)庫(kù)跑的不只這一個(gè)業(yè)務(wù),雖然也都不是什么重要的業(yè)務(wù)。。。

于是我就準(zhǔn)備重啟數(shù)據(jù)庫(kù),仍然是在mysql用戶(hù)下執(zhí)行mysqladmin -uroot -p shutdown。毫無(wú)疑問(wèn),這肯定也是沒(méi)有反應(yīng)的,道理跟前面root賬號(hào)連不上數(shù)據(jù)庫(kù)是一樣的,ctrl+C后有以下報(bào)錯(cuò)

^Cmysqladmin: connect to server at 'localhost' failed
error: 'Lost connection to MySQL server at 'waiting for initial communication packet', system error: 4'

然后我就做了個(gè)更蠢的操作,雖然想著可能會(huì)丟數(shù)據(jù),殺掉了mysql進(jìn)程。。。然后重啟mysql,系統(tǒng)也就可用了。是真的很蠢,做完之后馬上就想起有多種更好的處理方法,卻選擇了最蠢的一種。

今天再登上數(shù)據(jù)庫(kù)看的時(shí)候,發(fā)現(xiàn)有幾個(gè)參數(shù)跟我配置文件里寫(xiě)的不一樣,比如max_connections、table_open_cache等,都是設(shè)置的默認(rèn)值,看了下上次啟動(dòng)日志,確實(shí)也有告警

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根據(jù)參數(shù)設(shè)置計(jì)算了實(shí)例需要打開(kāi)的最大文件數(shù)超過(guò)了當(dāng)前系統(tǒng)用戶(hù)的最大限制,于是沒(méi)有使用該參數(shù)而使用了默認(rèn)值。當(dāng)然啟動(dòng)起來(lái)數(shù)據(jù)庫(kù)也是可用的,啟起來(lái)后也可以手動(dòng)把設(shè)置參數(shù)

set global max_connections=2000;
set global table_open_cache=5000;

只不過(guò)就很有可能出現(xiàn)我之前出現(xiàn)的問(wèn)題了,也就是數(shù)據(jù)庫(kù)連接數(shù)并沒(méi)有達(dá)到max_connections的限制,用戶(hù)仍然連接不上。需要說(shuō)明的是,正常情況下就算連接數(shù)滿(mǎn)了,mysql仍然會(huì)為root用戶(hù)保留一個(gè)連接,也就是root用戶(hù)是可以登錄數(shù)據(jù)庫(kù)查看問(wèn)題的。

要解決也很簡(jiǎn)單,增大操作系統(tǒng)用戶(hù)mysql的限制值就行了,在配置文件/etc/security/limits.conf后面加上新的限制值就行了。

mysql  soft  nofile 32768
mysql  hard  nofile 65535

感謝各位的閱讀!關(guān)于“mysql系統(tǒng)用戶(hù)最大文件打開(kāi)數(shù)限制的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI