这两天打开博客总显示建立数据库连接时出错,头两次手动重启了一下。结果今天又发生类似事情,知道肯定是数据库出现了问题,于是查看了MariaDB日志/var/log/mariadb/mariadb.log

通过日志, 可以看到是由于内存不足所导致的数据库崩溃:

170902 4:21:18 [ERROR] Plugin 'InnoDB' init function returned error.
170902 4:21:18 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
170902 4:21:18 [ERROR] mysqld: Out of memory (Needed 128917504 bytes)
170902 4:21:18 [Note] Plugin 'FEEDBACK' is disabled.
170902 4:21:18 [ERROR] Unknown/unsupported storage engine: InnoDB
170902 4:21:18 [ERROR] Aborting
170902 4:21:18 [Note] /usr/libexec/mysqld: Shutdown complete

既然知道了原因,那也就有了解决方法。首先通过free -m命令查看内用使用情况,看到swap分区大小为0,既然如此那就需要手动添加一个swap分区。

1. 进入一个目录创建SWAP分区文件:

cd /var

然后创建一个文件,大小为1G:( if:输入文件,of:输出文件,bs:块大小 1024bytes, count:有多少个这样大小的块 1048576 = 1024*1024 )

dd if=/dev/zero of=swapfile bs=1024 count=1048576

2. 创建SWAP文件:

mkswap swapfile

3. 之后设置它的权限:(不这样设置会出现系统警告 swapon: /var/swapfile: insecure permissions 0644, 0600 suggested.)

chmod 0600 swapfile

4. 立即激活SWAP文件:

swapon swapfile

5. 设置开机挂载这个SWAP文件

echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab

6. 继续使用 free -m 命令,查看分区使用情况。

附:删除SWAP分区

1. 使用swapoff命令关闭系统交换区:

swapoff /swapfile

2. 修改fstab文件:

vim /etc/fstab

3. 删除分区文件

文件 rm -rf /swapfile

参考文档:VPS优化之添加swap交换分区