小内存VPS上MySQL5.5内存优化——禁用Innodb引擎

近来发现Vps上的内存不够用,是由于Mysql启动后不断扩大内存引起的,于是查了下内存增大原因,发现原来mysql5.5默认使用innodb了。INNODB是MySQL被ORACLE收购后开发的,支持事务和行级锁等高级功能,但是并不是所有人都需要INNODB引擎,虽然它弥补了MYSQL缺乏事务支持的毛病,但是它的磁盘性能一直是让人比较担忧的。另外比较老的PHP系统,大多是采用MYISAM引擎在MYSQL建表,似乎INNODB根本用不上场,这时候可以考虑将INNODB禁掉。对大部分人来说,以前的MYISAM引擎就够了,一般会选择将默认引擎改为MYISAM,但是INNODB还是会耗费内存和硬盘,这时候,就需要把INNODB彻底禁用。为了减少内存,为了尽量使其能稳定运行Vps,Mysql内存减少是关键。

关闭Mysql5.5.8的Innodb引擎,记录步骤如下:

1、确定版本。查看MySQL版本
mysql -V
或者可以登录MySQL使用select version();或status;命令查看

2、关闭MySQL
service mysql stop
如果上面的命令无法关闭MySQL,则使用kill -9命令强制杀掉进程;

3、编辑my.cnf文件(通常位于/etc/mysql/my.cnf)[mysqld]下面的配置:
1)将default-storage-engine=INNODB前的注释掉(#)去掉在[mysqld]下面加入:default-storage-engine = MyISAM
2)将skip-innodb这行注释(不加上#); 如大版本的Mysql如:Mysql5.5,skip-innodb在Mysql5.5.18中已经改成loose-skip-innodb了!
3)innodb=OFF

4、对于MySQL 5.5而言,不仅如此,还需要添加以下配置,否则程序会很容易退出的:

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

5、在最新的MySQL5.6里,这么设置是没法启动的,需要再增加一句设置:

default-tmp-storage-engine=MYISAM

不仅如此,还需要添加以下配置,否则程序会很容易退出的:

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
6、在数据库目录中把ibdata1、ib_logfile0、ib_logfile1 这三个文件删掉。也可不用删除,我个人觉得删除保险点儿,呵呵:
rm -Rf /data0/data/ib_logfile0 /data0/data/ib_logfile1 /data0/data/ibdata1

7、start mysql:
kill -9 mysql
usleep 100000
nohup /usr/local/webserver/mysql/bin/mysqld_safe –user=mysql &

8.启动时看日志是否真关闭了InnoDB引擎:
这行是关键:111105 10:27:39 [Note] Plugin 'InnoDB' is disabled.
启动日志如下:
211111105 10:27:38 mysqld_safe Starting mysqld daemon with databases from /data0/data
111105 10:27:38 [Warning] Could not increase number of max_open_files to more than 10240 (request: 1048636)
111105 10:27:39 [Warning] option 'innodb-buffer-pool-size': signed value 2097152 adjusted to 5242880
111105 10:27:39 [Note] Plugin 'InnoDB' is disabled.
……
….
..

9.终端进入Mysql后查看配置后的情况,没有了Innodb:
mysql> show engines;
show variables like '%storage_engine%';
+————————+——–+
| Variable_name          | Value  |
+————————+——–+
| default_storage_engine | MyISAM |
| storage_engine         | MyISAM |
+————————+——–+

10.内存占用明显减少,改动前后:
PID USER       PR  NI  VIRT    RES   SHR S %CPU %MEM    TIME+  COMMAND 30622
mysql           18   0  211m   26m  5796 S  0.0     9.2          0:27.83 mysqld
mysql           15   0  47516  12m  5036 S  0.0     4.4          0:00.34 mysqld

果然,Innodb还是很耗费内存的,尤其是对一个小内存的Vps机器来说,而最主要是的Innodb还会在运行中消耗比启动时更大的内存,只是为了提高Innodb的性能罢了,所以,我的Vps果断关掉它,而要是自己生产服务器,还是建议打开并使用Innodb,更何况
现在的Mysql默认就是Innodb,在性能上都不是相当不错的。

另外MYSQL 5.6 比 5.5占用了更多的物理内存,虚拟内存跟5.5使用差不多(5.5也是一个虚拟内存消耗大户)。性能上比5.5提升了30%左右(根据官方文档,没作具体测试)。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注