本文给大家分享的是mariadb 在低配 VPS 上启动时崩溃问题的处理方案,附上解决过程,有需要的小伙伴可以参考下

引言

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

日志

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

InnoDB: Starting crash recovery. InnoDB: Reading tablespace information from the .ibd files... InnoDB: Restoring possible half-written data pages from the doublewrite InnoDB: buffer... 160919 2:47:12 InnoDB: Waiting for the background threads to start 160919 2:47:13 Percona XtraDB (http://www.percona.com) 5.5.46-MariaDB-37.6 started; log sequence number 352718445 160919 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 events 160919 2:47:13 [Note] /usr/libexec/mysqld: ready for connections. Version: '5.5.47-MariaDB' socket: '/var/lib/mysql/mysql.sock' port: 3306 MariaDB Server 160919 02:47:35 mysqld_safe Number of processes running now: 0 160919 02:47:35 mysqld_safe mysqld restarted 160919 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 disabled 160919 2:47:35 InnoDB: Mutexes and rw_locks use GCC atomic builtins 160919 2:47:35 InnoDB: Compressed tables use zlib 1.2.7 160919 2:47:35 InnoDB: Using Linux native AIO 160919 2:47:35 InnoDB: Initializing buffer pool, size = 128.0M InnoDB: mmap(137756672 bytes) failed; errno 12 160919 2:47:35 InnoDB: Completed initialization of buffer pool 160919 2:47:35 InnoDB: Fatal error: cannot allocate memory for the buffer pool 160919 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: InnoDB 160919 2:47:35 [ERROR] Aborting

解决

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

使用下面的命令创建 swapfile :

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

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

mkswap /swapfile

接下来,使用下面的命令立即启用 swapfile ,这样就不用等到下次重启时自动启用:

swapon /swapfile

最后,我们在 /etc/fstab 中添加下面一行,这样可以在系统下次重启时自动生效创建的 swapfile :

/swapfile swap swap defaults 0 0

使用 cat /proc/swaps 或 free -m 查看 swapfile 的生效情况,如下图所示:

在完成上面的步骤后,我们还可以在 /etc/my.cnf 配置文件中添加一些配置信息, mariadb 资源需求,具体的配置请参考文末给出的链接。

启动

启动 apache 服务器: systemctl start httpd.service ; 启动 mariadb 服务器: systemctl start mariadb.service 。 启动完成后,再次打开网站主页,bingo,问题解决了!

总结

低配 VPS 最好还是要多增加 swap 分区大小,尤其对于使用 SSD 的 VPS 而言, swap 分区的性能也非常不错; 数据库服务器崩溃后,一定要记得学会分析日志。最简单的做法就是使用 tail 命令看看最近的崩溃日志,并根据崩溃信息寻找解决问题的办法;

WordPress 程序本身比较占资源,所以运行在低配的 VPS 时,还是需要做些优化工作。具体请参考文末给出的链接。

最新资讯
格力集团为转让格力电器股份采购券商及法律服务

格力集团为转让格力电

珠海格力集团有限公司分别采购“格力电器国有股份转让
亚马逊中国业务调整 外商难以与本地企业竞争

亚马逊中国业务调整

据The Verge报道,亚马逊周四宣布,该公司正在关闭其中国
从“电商”打到“云” 亚马逊、阿里谁更胜一筹?

从“电商”打到“云”

阿里巴巴和亚马逊,两家公司分别作为中、美两国的电商巨
爱奇艺称VIP会员权限被闪电盒子破(kai)解(she) 起诉索赔五百万

爱奇艺称VIP会员权限

因认为“闪电盒子”安卓APP在播放其影视视频节目时,会
为什么有人给自己的朋友圈点赞?

为什么有人给自己的朋

给自己点赞,是希望自己能好起来。
因拖延退费、合同扣费条款等争议 尚德机构被约谈

因拖延退费、合同扣费

京市市场监督管理局发布消息称,针对近日媒体报道的北京
最新文章
Windows10系统下安装MariaDB 的教程图解

Windows10系统下安装M

MariaDB由MySQL的创始人麦克尔·维德纽斯主导开发
Exchange在接收连接器上启用匿名中继的方法

Exchange在接收连接器

这篇文章主要介绍了Exchange在接收连接器上启用匿名中
我是如何用2个Unix命令给MariaDB SQL提速的

我是如何用2个Unix命

我试图在 MariaDB(MySQL)上运行一个简单的连接查询,但性
Window7安装MariaDB数据库及系统初始化操作分析

Window7安装MariaDB数

这篇文章主要介绍了Window7安装MariaDB数据库及系统初
Windows Server 2016 服务器配置指南 之 MariaDB数据库环境搭建方法

Windows Server 2016

这篇文章主要介绍了Windows Server 2016 服务器配置指
CentOS 7中成功安装MariaDB的方法教程

CentOS 7中成功安装Ma

这篇文章主要给大家介绍了CentOS 7中成功安装MariaDB