当前位置: 首页>>技术问答>>正文


MySql(MariaDB)在小内存VPS上崩溃,该怎么办?

qingchuan 技术问答 , , , 去评论

最近我遇到了一个奇怪的问题:我的一个小内存(512MB)虚拟专用服务器上,MariaDB数据库经常崩溃。经过一些短暂的搜索,我发现了MariaDB在小型RAM机器上有什么潜在的问题,以及如何解决这个问题。

首先,如果您有这种问题,请检查MariaDB日志:

tail -n 100 /var/log/mariadb/mariadb.log

你可能会发现这样的情况:

160608 12:08:05 InnoDB: Completed initialization of buffer pool
160608 12:08:05 InnoDB: Fatal error: cannot allocate memory for the buffer pool
160608 12:08:05 [ERROR] Plugin 'InnoDB' init function returned error.
160608 12:08:05 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
160608 12:08:05 [ERROR] mysqld: Out of memory (Needed 128917504 bytes)

经过一番研究,我发现mysql需要很多资源用于性能模式(Peformance Schema),而禁用它将有助于小内存机器正常运行。参靠在低内存虚拟机上启动MySQL

sudo vim /etc/my.cnf

添加:

performance_schema = off

放到下面这个section:

[mysqld]

为了确保数据库服务器能在崩溃时重新启动,在使用Systemd的操作系统上,如CentOS 7,您需要执行以下操作:

打开以下文件进行编辑:

sudo vim /etc/systemd/system/mariadb.service

添加下面几行:

.include /lib/systemd/system/mariadb.service

[Service]
Restart=always
RestartSec=3

然后您需要重新启动从而重导Systemd配置:

sudo systemctl daemon-reload

并重新启动MariaDB服务:

systemctl restart mariadb

为确保Systemd重新启动服务,您可以执行以下操作:

ps -ef|grep maria

你会看到如下内容:

mysql    26647 26368  0 Jun12 ?        00:06:22 /usr/libexec/mysqld ....

尝试使用下面的命令杀死进程:

kill 26647

等待3秒钟,并检查MariaDB是否重新启动:

ps -ef|grep maria

本文翻译自:MySql (MariaDB) crashes on small RAM VPS, what to do

本文由《纯净的天空》出品。文章地址: https://vimsky.com/article/3517.html,未经允许,请勿转载。