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 时,还是需要做些优化工作。具体请参考文末给出的链接。

(0)

相关推荐

  • MariaDB(Mysql分支)my.cnf配置文件中文注释版

    复制代码 代码如下: # /usr/share/mysql/my-huge.cnf # MariaDB 配置文件 示例模板(huge,巨型).## 本文件适用于专用数据库服务器, 内存为 1G-2G# 机器上主要只运行 MariaDB的大型系统 ,## MariaDB 程序会根据运行的操作系统平台查找一系列的配置文件,# 你可以将此模板配置文件拷贝到对应的位置(并重命名),# 要查看有哪些配置文件会被读取到,执行:# 'my_print_defaults --help' 并查看# Default

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

    在MySQL被Oracle收购以后,越来越多的人对于MySQL的前景表示了担忧,对于开源的MySQL,或多或少对于Oracle自家的数据库产品产生冲击,这个开源免费的MySQL 对于Oracle更多的是包袱而不是资产.比如淘宝就从Oracle转成了MySQL,一些大型互联网公司也在推行去IOE(I:IBM,O:Oracle,E:EMC),甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险. Percona 在介绍 Percona 之前,首要要介绍的是

  • 浅谈MySQL和mariadb区别

    MariaDB是MySQL源代码的一个分支,在意识到Oracle会对MySQL许可做什么后分离了出来(MySQL先后被Sun.Oracle收购).除了作为一个Mysql的"向下替代品",MariaDB包括的一些新特性使它优于MySQL. 这两个数据库究竟有什么本质的区别,我看mariadb文件夹BIN中还是mysql*.exe,除了MySQL会被ORACLE闭源外,而mariadb则开源,他俩之间到底还有什么本质区别没有? 区别一: MariaDB不仅仅是Mysql的一个替代品,它的主

  • MariaDB中的thread pool详细介绍和使用方法

    Thread pool是什么 MySQL是每个连接上来都要创建一个线程来执行语句.这样每一个新的连接进来即会创建一个新的线程,这种动作对MySQL本身压力比较大.Threadpool是提供一种线程代理的模型执行每个连接的语句.而MySQL内部维护一个可能接受的线程总数,减少线程太多在CPU切换等方面的压力. 使用Threadpool的好处 1.使用线程代理的模型在连接数已知可控的情况下,提前创建好过线程并利用操作系统的threadpool技术维护,能减少很多开销. 2.尽可能的使用操作系统的线程

  • 关于MariaDB安装问题小记(CMake Error at)

    今日在安装MariaDB的时候始终提示如下错误,但是我已经安装了libaio-devel库: CMake Error at cmake/build_configurations/mysql_release.cmake:128 (MESSAGE): aio is required on Linux, you need to install the required library: Debian/Ubuntu: apt-get install libaio-dev RedHat/Fedora/Or

  • C#连接mariadb(MYSQL分支)代码示例分享

    首先配置好你的MariaDb,创建test数据库,在test里创建MyTable表,脚本如下(通过HeidiSQL导出的脚本): 复制代码 代码如下: -- ---------------------------------------------------------- 主机:                           172.16.40.153-- 服务器版本:                        5.5.5-10.0.4-MariaDB-1~wheezy-log -

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

    引言 最近博客又抽风了,打开主页后提示 Error Establishing a Database Connection .仔细想想,应该就是数据库服务器 mariadb 挂了:以前也遇到过类似的问题.经过分析日志,并结合网上的资料最终解决了问题. 日志 以下是 mariadb 服务器挂掉时的比较关键的日志信息,从下面的日志信息中,我们可以很容易地看出由于内存不足,从而导致数据库服务器启动时崩溃. InnoDB: Starting crash recovery. InnoDB: Reading

  • Android 高版本API方法在低版本系统上的兼容性处理

    Android 版本更替,新的版本带来新的特性,新的方法. 新的方法带来许多便利,但无法在低版本系统上运行,如果兼容性处理不恰当,APP在低版本系统上,运行时将会crash. 本文以一个具体的例子说明如何在使用高API level的方法时处理好兼容性问题. 例子:根据给出路径,获取此路径所在分区的总空间大小. 在安卓中的文件存储使用参考中提到: 获取文件系统用量情况,在API level 9及其以上的系统,可直接调用File对象的相关方法,以下需自行计算 一般实现 就此需求而言,API leve

  • 在CentOS VPS上通过SSH安装 MySQL的方法图解

    输入yum install mysql-server 按Y继续 安装完成,设置开机启动Mysql,输入 chkconfig --levels 235 mysqld on 然后启动tomcat,输入service mysqld start 启动完毕,然后登录MYsql设置密码 输入set password for 'root'@'localhost' = password('12345678');来设置密码 至此,mysql安装完毕!然后创建数据库,首先用show databases;查看数据库

  • Android高版本API方法如何在低版本系统上做兼容性处理浅析

    前言 在最近的开发中需要获取到SIM卡的网络状态,在源码中看到一个方法: TelephonyManager tm =(TelephonyManager)context.getSystemService(TELEPHONY_SERVICE); state =tm.getDataNetworkType(); 但是报错了Call requires API level 24 (current min is 21): android.telephony.TelephonyManager#getDataNe

  • 利用c++和easyx图形库做一个低配版扫雷游戏

    游戏界面 由于这个游戏是我抱着玩一玩的心态做出来的,所以没有过多的去设计界面,也没有去找游戏的资源(图片.游戏音效等).仅使用了不同颜色的方块来表示游戏中方块的状态和种类.(绿色为初始状态(未翻转的状态),黄色为翻转后的背景颜色,蓝色表示已插旗的方块,红色代表地雷) 图1 游戏主菜单界面 图二 模式一的游戏界面(20*20 40个雷) 图三 模式二的游戏界面(10*10 20个雷) 图四 游戏成功界面 图五 游戏失败界面 2.全部代码 #include<graphics.h> #include

  • 编写shell脚本将VPS上的数据备份到Dropbox网盘的方法

    看到有人用dropbox备份网站数据,所以今天也试了一下,记得以前是一个python脚本,这是用的是bash 脚本,利用dropbox的api来上传下载的,很方便,脚本的地址是Dropbox-Uploader/dropbox_uploader.sh at master · andreafabrizi/Dropbox-Uploader · GitHub ,感谢作者分享这个脚本. 可以到git下载dropbox_uploader.sh,地址为:https://github.com/andreafab

  • 在VPS上用3Proxy架设http代理和socks代理(Ubuntu环境)

    3Proxy是俄罗斯人开发的(怎么又是俄罗斯人,前面nginx),主页在www.3proxy.ru. 3Proxy支持windows和linux等各种平台.windows下直接下载安装即可,Linux下面需要自己编译. 虽然是编译安装,但是也是毫不费力. 下载.编译.安装: wget http://www.3proxy.ru/current/3proxy-0.7-devel.tgz tar zxf 3proxy-0.7-devel.tgz cd 3proxy-0.7 make –f Makefi

  • MySQL的慢日志线上问题及优化方案

    MySQL 慢日志(slow log)是 MySQL DBA 及其他开发.运维人员需经常关注的一类信息.使用慢日志可找出执行时间较长或未走索引等 SQL 语句,为进行系统调优提供依据. 本文将结合一个线上案例,分析如何正确设置 MySQL 慢日志参数和使用慢日志功能,并介绍下网易云 RDS 对 MySQL 慢日志功能的增强. MySQL 参数组功能 网易云 RDS 实例提供了参数组管理功能,可通过参数管理界面查看绝大部分常用的 MySQL 系统参数,用户可了解当前运行值和建议值: 用户还可通过参

  • 编写shell脚本实现tomcat定时重启的方法

    最近我在学生价买的低配服务器上部署了一个很吃内存的网页,导致 tomcat 内存经常溢出而崩溃. 于是我上网找了一些教程编写了一个简单的每天定时启动 tomcat 的脚本,特此记录一下 我的环境是 centos 7 1. 在某个目录新建一个 .sh 脚本文件 vim tomcatStart.sh 2. 在 tomcatStart.sh 文件里面写入一下代码 #!/bin/bash /etc/profile tomcatPath="/usr/local/tomcat9" binPath=

  • 作为老司机使用 React 总结的 11 个经验教训

    原文作者:Jolyon Russ 本文编译:胡子大哈 翻译原文:http://huziketang.com/blog/posts/detail?postId=58e83f01a58c240ae35bb8e1 英文连接:11 lessons learned as a React contractor 转载请注明出处,保留原文链接以及作者信息 一开始在 React 路上摸爬滚打的时候,不知道该寻找些什么,但是这些年来,回头总结经验才发现,要找的已经在脑子里了.下面是我自己在学习 React 历程的一

随机推荐