MySQL 5.6和5.7 内存参数优化 降低内存占用量为30MB左右

现在我们站长使用的VPS的内存一般在512M或1G左右,但是我们安装的MySQL 5.6、5.7默认启动占用内存400多M,碰到我们这种小内存的VPS,MySQL内存占用率明显偏高,将会导致MySQL崩溃,经常出现网站过一两个小时后MySQL自动停止,网站打开出现数据库连接出错的报警。

以前我使用vultr的512M内存的VPS,安装宝塔面板中的MySQL 5.6后,经常出现上述现象,采取两种方法来解决问题:卸载MySQL 5.6,重新安装MySQL 5.5;MySQL内存参数优化,降低内存占用量。

这里我来介绍第二种方法,通过MySQL 5.6内存参数优化降低MySQL内存占用量过大引起的错误问题。

通过编辑/etc/my.cnf文件在[mysqld]下增加或修改参数,可以复制关键词查找到下面的参数来调整,修改前可以复制一份备份,防止出现错误,引起不必要的麻烦。

MySQL 5.6相比于前代GA版本性能提升显著,但默认缓存设置对于小型站点并不合理。通过修改my.ini文件中的performance_schema_max_table_instances参数,能够有效降低内存占用。

以下是5.6默认的设置

performance_schema_max_table_instances = 12500

table_definition_cache = 1400

table_open_cache = 2000

可以调成,或者在小点都可以。

performance_schema_max_table_instances = 200

table_definition_cache = 100

table_open_cache = 100

这个三个参数,调低值后内存能明显减小,现在MySQL使用内存约60MB左右,这样大大降低默认使用的内存。

让我们来进一步调整参数

对于InnoDB表来说,innodb_buffer_pool_size的作用就相当于key_buffer_size对于MyISAM表的作用一样。InnoDB使用该参数指定大小的内存来缓冲数据和索引。我们的VPS内存本来就小,所以这个参数也可以设置小一点。

innodb_buffer_pool_size=2M

再进一步调整: MySQL 5.6默认启用performance_schema,占用很多内存,可以禁用。

完整配置文件如下,内存占用到22M

我的MySQL配置如下,如果你使用的CentOS 6 64位,并且是yum安装的(一键脚本)可以自己按照如下照抄,我的是CentOS 6 64位系统

先ssh登录服务器或VPS,在vi /etc/my.cnf

# For advice on how to change settings please see

# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

[mysqld]

#

# Remove leading # and set to the amount of RAM for the most important data

# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.

# innodb_buffer_pool_size = 128M

#

# Remove leading # to turn on a very important data integrity option: logging

# changes to the binary log between backups.

# log_bin

#

# Remove leading # to set options mainly useful for reporting servers.

# The server defaults are faster for transactions and fast SELECTs.

# Adjust sizes as needed, experiment to find the optimal values.

# join_buffer_size = 128M

# sort_buffer_size = 2M

# read_rnd_buffer_size = 2M

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

#symbolic-links=0

skip-external-locking

key_buffer_size = 8M

max_allowed_packet = 1M

table_open_cache = 4

sort_buffer_size = 64K

read_buffer_size = 256K

read_rnd_buffer_size = 256K

net_buffer_length = 2K

thread_stack = 240K

#innodb_use_native_aio = 0

innodb_buffer_pool_size=2M

performance_schema_max_table_instances=50

table_definition_cache=50

table_open_cache=32

max_connections=50

max_user_connections=35

wait_timeout=10

interactive_timeout=15

long_query_time=5

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Recommended in standard MySQL setup

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

目前,网站再也没有出现过数据库停止错误,对于我们这些小的VPS还是有很大的效果的,会不会出现一些其他的问题,暂时还不清楚。以上的方法也适用于MySQL 5.7内存优化。

MySQL 5.6和5.7 内存参数优化 降低内存占用量为30MB左右:等您坐沙发呢!

发表评论

表情
还能输入210个字