最近我遇到了一个奇怪的问题:我的一个小内存(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