最近我遇到了一個奇怪的問題:我的一個小內存(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