當前位置: 首頁>>技術問答>>正文


MySql(MariaDB)在小內存VPS上崩潰,該怎麽辦?

最近我遇到了一個奇怪的問題:我的一個小內存(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/zh-tw/article/3517.html,未經允許,請勿轉載。