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

 更新时间:2016年09月20日 08:44:55   作者:克里斯的小屋  
本文给大家分享的是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 时,还是需要做些优化工作。具体请参考文末给出的链接。

相关文章

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

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

    这篇文章主要介绍了关于mongoose连接mongodb重复访问报错的解决办法的相关资料,需要的朋友可以参考下
    2016-01-01
  • 在Ubuntu系统中安装MariaDB数据库的教程

    在Ubuntu系统中安装MariaDB数据库的教程

    这篇文章主要介绍了在Ubuntu系统中安装MariaDB数据库的教程,同时也适用于其他Debian系的Linux系统,需要的朋友可以参考下
    2015-06-06
  • 我是如何用2个Unix命令给MariaDB SQL提速的

    我是如何用2个Unix命令给MariaDB SQL提速的

    我试图在 MariaDB(MySQL)上运行一个简单的连接查询,但性能简直糟糕透了。下面将介绍我是如何通过两个简单的 Unix 命令,将查询时间从 380 小时降到 12 小时以下的,需要的朋友可以参考下
    2018-08-08
  • centos编译安装mariadb的详细过程

    centos编译安装mariadb的详细过程

    这篇文章主要介绍了centos编译安装mariadb的方法,主要包括安装cmake环境及安装mariadb的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下的相关资料
    2022-08-08
  • 浅谈MySQL和mariadb区别

    浅谈MySQL和mariadb区别

    MariaDB是MySQL源代码的一个分支,在意识到Oracle会对MySQL许可做什么后分离了出来(MySQL先后被Sun、Oracle收购)。除了作为一个Mysql的“向下替代品”,MariaDB包括的一些新特性使它优于MySQL。通过本篇文章给大家介绍MySQL和mariadb区别,需要的朋友可以参考下
    2015-09-09
  • 详谈MySQL和MariaDB区别与性能全面对比

    详谈MySQL和MariaDB区别与性能全面对比

    这篇文章主要介绍了详谈MySQL和MariaDB区别与性能全面对比,需要的朋友可以参考下
    2020-02-02
  • centos中找回MariaDB数据库root用户权限的方法

    centos中找回MariaDB数据库root用户权限的方法

    这篇文章主要介绍了centos中找回MariaDB数据库root用户权限的方法,本文写的很意思,相信大家会眼前一亮,需要的朋友可以参考下
    2014-07-07
  • Mac中MariaDB数据库的安装步骤

    Mac中MariaDB数据库的安装步骤

    大家都知道MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。这篇文章我们将详细介绍在Mac中安装MariaDB数据库的步骤,有需要可以参考学习。
    2016-09-09
  • MySQL分支选择参考:Percona还是MariaDB

    MySQL分支选择参考:Percona还是MariaDB

    这篇文章主要介绍了MySQL分支选择参考:Percona还是MariaDB,本文分别讲解了Percona、MariaDB背景知识,对使用它们的选择给出了参考,需要的朋友可以参考下
    2015-03-03
  • MariaDB 数据类型详细说明

    MariaDB 数据类型详细说明

    这篇文章主要介绍了MariaDB 数据类型详细说明,需要的朋友可以参考下
    2023-05-05

最新评论