mac環(huán)境下mysql5.7版本頻繁提示MySQL server has gone away
問題表象
表象為:在頻繁插入數(shù)據(jù)時候報錯:
查看日志,也可以在MySQL客戶端輸入如下指令來獲取:
show variables like ‘log_error’;
日志中顯示:
[Warning] mysql File Descriptor 1130 exceeded FD_SETSIZE=1024
從日志可以發(fā)現(xiàn),是mysql打算持有的文件描述符數(shù)量超過了系統(tǒng)的限制。
查資料
雖然知道問題就是文件打開過多的問題,但是怎么解決又不知道了。直到我找到如下問題以及回答:https://stackoverflow.com/questions/35347378/ (看elplatt的回答)。
題主的異常LOG和我的是一致的,所以我就開始嘗試答案中所說的兩個參數(shù):
table_open_cache
max_connections
查看參數(shù)目前值
修改之前得先了解自己的MySQL這兩個值目前是多少,不能瞎改。在MySQL客戶端內(nèi)輸入如下指令獲取目前值:
show variables like ‘table_open_cache’;
show variables like ‘max_connections’;
著手修改參數(shù)
我發(fā)現(xiàn)我的table_open_cache參數(shù)值是2000。這明顯超過了日志中最大值1024,所以將MySQL此值縮小。
修改/etc/my.cnf:
[mysqld]
table_open_cache=500
然后重啟MySQL。發(fā)現(xiàn)已經(jīng)成功!問題不再復(fù)現(xiàn)。
開始我是將table_open_cache設(shè)置為1025,發(fā)現(xiàn)還是超了一些,為1043。所以想,這個參數(shù)只控制的是緩存表文件描述符的個數(shù),但是mysql還會打開其他文件啊,比如各種日志文件等。那設(shè)置為1025肯定就不行了,得再小點,因為我是本地測試庫,所以隨意改為500,也不牽扯什么性能,能跑通程序就行。
我沒有設(shè)置max_connections這個參數(shù),因為我發(fā)現(xiàn)我只設(shè)置table_open_cache一個參數(shù)就能解決我的問題。
祝你好運。


浙公網(wǎng)安備 33010602011771號