MySQL占用內(nèi)存過大解決方案圖文詳解
前言
對于部分小資玩家來說,服務(wù)器數(shù)量和內(nèi)存往往是很有限的,像我個人的服務(wù)器配置就是2核4G5M。
4G內(nèi)存對于Java玩家來說,真的不大,開幾個中間件+自己的微服務(wù)真的還蠻擠的,然后又?jǐn)偵螹ySQL這個大冤種。我本機(jī)上的MySQL僅僅只占幾M內(nèi)存(雖然我不怎么用,但是本機(jī)MySQL確實(shí)是開著的):

而服務(wù)器的則要占400M,怎么說其實(shí)沒什么吞吐量,純粹是自己玩一玩,這內(nèi)存占用屬實(shí)有點(diǎn)吃不消啊。。。

解決方案
了解到可以通過修改配置來減小MySQL的內(nèi)存占用,便嘗試了一下,并進(jìn)行了記錄。由于我同時有兩臺服務(wù)器,一臺裝的是windows service 2016,還有一臺裝的是CentOS7,兩臺情況都是差不多的,故同時做兩份記錄,供大家參考。
1. 找到配置文件
- Windows Service 2016
配置文件的默認(rèn)位置是 C:\ProgramData\MySQL\MySQL Server 8.0\my.ini,如果有修改,則根據(jù)自己的實(shí)際情況找到。

- CentOS7
配置文件的默認(rèn)路徑在 /etc/my.cnf,如果有修改,則根據(jù)自己的實(shí)際情況找到。
2. 修改配置文件
Windows上可以用Ctrl + F 進(jìn)行搜索,Linux上可以用 ‘/key’ 進(jìn)行搜索,不會的話可以參考一下百度。
我們需要找到并修改的東西一共有三個:
1.找到 table_definition_cache,我們修改為400
官方解釋為:可以存儲在定義緩存中的表定義數(shù)(來自.frm文件)。如果使用大量表,可以創(chuàng)建大型表定義緩存以加快表的打開速度。與普通的表緩存不同,表定義緩存占用更少的空間,并且不使用文件描述符。最小值和默認(rèn)值均為400。
2.找到 table_open_cache,我們修改為256
MySQL每打開一個表,都會讀入一些數(shù)據(jù)到table_open_cache緩存中,當(dāng)MySQL在這個緩存中找不到相應(yīng)信息時,才會去磁盤上讀取。
官方解釋為:所有線程的打開表數(shù)。增加該值會增加mysqld所需的文件描述符的數(shù)量。因此,您必須確保在[mysqld safe]部分的變量“open files limit”中將允許打開的文件量設(shè)置為至少4096。
3.找到 performance_schema ,修改為off
如果找不到這個的話,直接在合適的地方加上 performance_schema = off 即可。
用于監(jiān)控MySQL server在一個較低級別的運(yùn)行過程中的資源消耗、資源等待等情況,關(guān)閉之后可以節(jié)省開銷,不會使server的行為發(fā)生變化。
修改完之后保存退出。
3. 重啟MySQL
- Windows Service 2016
以管理員身份啟動控制臺,輸入 net stop mysql,然后再輸入 net start mysql。
重啟之后還占62M。

- CentOS7
控制臺輸入 service mysqld restart 即可重啟。

如果不行的話,可以試試 /etc/init.d/mysqld restart 這個指令。
重啟之后占用92M,比Windows那臺多點(diǎn)。

后記
通過這種方法確實(shí)可以降低mysql的內(nèi)存占用,但我這只是通過降低性能來換取內(nèi)存罷了,如果對吞吐量要求比較高的情況,那肯定是不能這樣直接修改的,得根據(jù)實(shí)際請求進(jìn)行調(diào)整才行。
到此這篇關(guān)于MySQL占用內(nèi)存過大解決的文章就介紹到這了,更多相關(guān)MySQL占用內(nèi)存過大內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux配置mysql數(shù)據(jù)庫遠(yuǎn)程連接失敗的解決方法
這篇文章主要為大家詳細(xì)介紹了linux配置mysql數(shù)據(jù)庫遠(yuǎn)程連接失敗的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
MySQL server has gone away錯誤提示解決方法
今天遇到類似的情景,MySQL只是冷冷的說:MySQL server has gone away。2008-11-11
MySQL?中如何歸檔數(shù)據(jù)的實(shí)現(xiàn)方法
本文主要介紹了MySQL?中如何歸檔數(shù)據(jù)的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
MySQL同步數(shù)據(jù)Replication的實(shí)現(xiàn)步驟
本文主要介紹了MySQL同步數(shù)據(jù)Replication的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03

