mariadb 在低配 VPS 上崩溃问题处理方案

日期:2020-01-25编辑作者:编程

引言

自从自己维护blog以后,基本一个月内,都会出现1,2次这种错误,以前解决的办法很简单,就是把虚拟机重启一下就可以。经常是网友在微信,qq,微博提醒我blog挂掉。

最近博客又抽风了,打开主页后提示 Error Establishing a Database Connection 。仔细想想,应该就是数据库服务器 mariadb 挂了;以前也遇到过类似的问题。经过分析日志,并结合网上的资料最终解决了问题。

刚好国庆期间碰上,就顺便提高一下自己的运维能力,看看具体的原因。

日志

tail /var/log/mariadb/mariadb.log

以下是 mariadb 服务器挂掉时的比较关键的日志信息,从下面的日志信息中,我们可以很容易地看出由于内存不足,从而导致数据库服务器启动时崩溃。

看到大概的错误

InnoDB: Starting crash recovery.InnoDB: Reading tablespace information from the .ibd files...InnoDB: Restoring possible half-written data pages from the doublewriteInnoDB: buffer...160919 2:47:12 InnoDB: Waiting for the background threads to start160919 2:47:13 Percona XtraDB () 5.5.46-MariaDB-37.6 started; log sequence number 352718445160919 2:47:13 [ERROR] mysqld: Out of memory (Needed 128917504 bytes)160919 2:47:13 [Note] Plugin 'FEEDBACK' is disabled.160919 2:47:13 [Note] Server socket created on IP: '0.0.0.0'.160919 2:47:13 [Note] Event Scheduler: Loaded 0 events160919 2:47:13 [Note] /usr/libexec/mysqld: ready for connections.Version: '5.5.47-MariaDB' socket: '/var/lib/mysql/mysql.sock' port: 3306 MariaDB Server160919 02:47:35 mysqld_safe Number of processes running now: 0160919 02:47:35 mysqld_safe mysqld restarted160919 2:47:35 [Note] /usr/libexec/mysqld (mysqld 5.5.47-MariaDB) starting as process 28614 ...160919 2:47:35 InnoDB: The InnoDB memory heap is disabled160919 2:47:35 InnoDB: Mutexes and rw_locks use GCC atomic builtins160919 2:47:35 InnoDB: Compressed tables use zlib 1.2.7160919 2:47:35 InnoDB: Using Linux native AIO160919 2:47:35 InnoDB: Initializing buffer pool, size = 128.0MInnoDB: mmap(137756672 bytes) failed; errno 12160919 2:47:35 InnoDB: Completed initialization of buffer pool160919 2:47:35 InnoDB: Fatal error: cannot allocate memory for the buffer pool160919 2:47:35 [ERROR] Plugin 'InnoDB' init function returned error.160919 2:47:35 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.160919 2:47:35 [ERROR] mysqld: Out of memory (Needed 128917504 bytes)160919 2:47:35 [ERROR] mysqld: Out of memory (Needed 96681984 bytes)160919 2:47:35 [ERROR] mysqld: Out of memory (Needed 72499200 bytes)160919 2:47:35 [Note] Plugin 'FEEDBACK' is disabled.160919 2:47:35 [ERROR] Unknown/unsupported storage engine: InnoDB160919 2:47:35 [ERROR] Aborting

161004 11:21:05 InnoDB: Fatal error: cannot allocate memory for the buffer pool161004 11:21:05 [ERROR] Plugin 'InnoDB' init function returned error.161004 11:21:05 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.161004 11:21:15 [Note] Plugin 'FEEDBACK' is disabled.161004 11:21:16 [ERROR] Unknown/unsupported storage engine: InnoDB161004 11:21:16 [ERROR] Aborting

解决

其实我也能猜到,肯定是数据库的内存使用有啥问题。

在使用 free -m 查看内存信息时,发现 swap 分区大小为 0。难怪说数据库服务器无法启动呢,在内存不够用的情况下,又无法使用 swap 分区,自然崩溃了。由于 VPS 使用了 SSD,性能自然不错。下面我们给服务器系统 CentOS 7 添加 1024M 的 swap 分区,采用的方法是创建一个 swap 文件:

有错误,其实就是利用google,基本就有答案

使用下面的命令创建 swapfile :

我使用的青云的虚拟机,swap分区,就是1G,所以应该也不需要创建。

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

www.129028.com金沙,编辑 /etc/my.cnf,

使用下面的命令配置 swap 文件:

[mysqld]innodb_buffer_pool_size=64M

mkswap /swapfile

重启mysql

本文由www.129028.com金沙发布于编程,转载请注明出处:mariadb 在低配 VPS 上崩溃问题处理方案

关键词:

关于mongoose连接mongodb重复访问报错的解决办法

www.129028.com金沙,具体代码如下所示: var express = require('express');var mongoose = require('mongoose');var router = express.Router();va...

详细>>

尚德机构COO杜铮:做成人教育就是在和“人性”做斗争

11月26日,2019GET教育科技大会在北京举行,尚德机构COO杜铮受邀出席并发表演讲。他表示,教育本身是一件“反人性”...

详细>>

Redis简介

Redis官方网网站是: 。 Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用...

详细>>

施乐致信惠普董事会www.129028.com金沙:我们会让你们的股东同意

11月27日消息,据外媒报道,美国当地时间周一,施乐首席执行官约翰·维森丁致信给惠普公司董事会,宣称计划直接...

详细>>