解决mysql 5.x占用内存过高的问题
来源:奈福网络 时间:2019-01-11 03:13:02
上海网站建设上海网页设计奈福网络科技今天给客户配置一台服务器,但此服务器的硬件配置比较低,内存只有2GB,当MySQL数据库安装好之后,就发现MySQL占用的内存高达400MB,系统剩余的内存少的可怜,所以我们必须要降低MySQL数据库的占用资源。
接下来,就让我们奈福网络的小伙伴给大家分享一下,如何解决mysql数据库占用内存过高的问题。
MySQL 5.5默认存储引擎是innodb,所以一启动就占用了三四百兆的虚拟内存,我们一般用的存储引擎是MyISAM,另外使用MyISAM对于文件备份系统也比较便利,因此我们需要禁用innodb,设置默认的引擎为MyISAM。
接下来,就让我们奈福网络的小伙伴给大家分享一下,如何解决mysql数据库占用内存过高的问题。
MySQL 5.5默认存储引擎是innodb,所以一启动就占用了三四百兆的虚拟内存,我们一般用的存储引擎是MyISAM,另外使用MyISAM对于文件备份系统也比较便利,因此我们需要禁用innodb,设置默认的引擎为MyISAM。
解决方法:
在[mysqld]里面加入:
default-storage-engine = MyISAM
innodb=OFF
skip-innodb
重启mysql即可。
---
To disable InnoDB, use --innodb=OFF or --skip-innodb(新版mysql中已经被loose-skip-innodb取代)
---
MySQL 5.6+
innodb是MySQL被ORACLE收购后开发的,支持事务和行级锁等高级功能,但是并不是所有人都需要INNODB的,对大部分人来说,以前的MYISAM引擎就够了,一般会选择将默认引擎改为MYISAM,但是innodb还是会耗费内存和硬盘,这时候,就需要把innodb彻底禁用。
在以前的MySQL中,一般可以这么设置就行了:
代码如下:
default-storage-engine=MYISAM
innodb=OFF
但是在最新的MySQL5.6里,这么设置是没法启动的,需要再增加一句设置:
代码如下:
default-storage-engine=MYISAM
default-tmp-storage-engine=MYISAM
loose-skip-innodb
不仅如此,还需要添加以下配置,否则程序会很容易退出的:
代码如下:
loose-innodb-trx=0
loose-innodb-locks=0
loose-innodb-lock-waits=0
loose-innodb-cmp=0
loose-innodb-cmp-per-index=0
loose-innodb-cmp-per-index-reset=0
loose-innodb-cmp-reset=0
loose-innodb-cmpmem=0
loose-innodb-cmpmem-reset=0
loose-innodb-buffer-page=0
loose-innodb-buffer-page-lru=0
loose-innodb-buffer-pool-stats=0
loose-innodb-metrics=0
loose-innodb-ft-default-stopword=0
loose-innodb-ft-inserted=0
loose-innodb-ft-deleted=0
loose-innodb-ft-being-deleted=0
loose-innodb-ft-config=0
loose-innodb-ft-index-cache=0
loose-innodb-ft-index-table=0
loose-innodb-sys-tables=0
loose-innodb-sys-tablestats=0
loose-innodb-sys-indexes=0
loose-innodb-sys-columns=0
loose-innodb-sys-fields=0
loose-innodb-sys-foreign=0
loose-innodb-sys-foreign-cols=0
禁用innodb之后,重启MySQL服务,如果发现占用内存仍然很高,那么请接着设置:
performance_schema_max_table_instances=200
table_definition_cache=200
table_open_cache=128
最重要的在这里,划重点哦!
MySQL的最大连接数,很多人设置好了上面的参数,但无论怎么重启mysql服务,内存就是下不来,问题就在此处,此处如果设置过高,占用内存也是很厉害的,可以根据自己的实际情况设置:
MySQL的最大连接数,很多人设置好了上面的参数,但无论怎么重启mysql服务,内存就是下不来,问题就在此处,此处如果设置过高,占用内存也是很厉害的,可以根据自己的实际情况设置:
max_connections = 100
---
相关参考:
https://www.huweishen.com/help/php/1590.html
https://www.cnblogs.com/musings/p/5913225.html