Tuesday, April 23, 2024

WordPress網站出現Error establishing a database connection

WordPress網站出現Error establishing a database connection(建立數據庫連接時出錯),查看發現Apache狀態正常,而MySQL/MariaDB服務已經停止運行,重啟服務器或者用service mysqld restart命令(MySQL數據庫)或者systemctl restart mariadb.service命令(MariaDB數據庫)可以暫時解決問題,過一段時間還會出現。

查看/etc/my.cnf,找到MySQL/MariaDB錯誤日誌的位置(比如log-error=/var/log/mariadb/mariadb.log),查看日誌,發現了很多處[ERROR] mysqld: Out of memory。

分析原因應該是Apache2在網站訪問高峰時佔用內存過高,MySQL/MariaDB因運行內存不足,會自動退出所致。

解決方法:
1、將Apache2換成Nginx或其他輕量級Web服務器。
2、不想更換Apache2的可以增大服務器物理內存或添加Swap交換文件。
3、不想更換Apache2也不想增加服務器物理內存,且網站訪問量不大,可以嘗試修改Apache2配置文件(文件路徑/etc/httpd/conf/httpd.conf)。Apache2目前有三種穩定的MPM(Multi-Processing Module,多進程處理模塊)模式,分別是prefork,worker和event。(查看Apache2的MPM模式,可以使用httpd -V命令。)

編輯/etc/httpd/conf/httpd.conf文件,添加下面內容:

<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 100
MaxRequestWorkers 100
MaxConnectionsPerChild 2000
</IfModule>

說明:

<IfModule mpm_prefork_module>
StartServers 5 #推薦設置:小=默認 中=20~50 大=50~100
MinSpareServers 5 #推薦設置:與StartServers保持一致
MaxSpareServers 10 #推薦設置:小=20 中=30~80 大=80~120
ServerLimit 150 #推薦設置:小=500 中=500~1500 大型=1500~3000
MaxRequestWorkers 150 #推薦設置:小=500 中=500~1500 大型=1500~3000
MaxRequestsPerChild 0 #推薦設置:小=10000 中或大=10000~500000
</IfModule>

備註:在Apache2.3.13以前的版本MaxRequestWorkers被稱為MaxClients。此外,設置ServerLimit參數最好與MaxRequestWorkers的值保持一致。

One comment

  1. 其實nginx也會出現這種情況,結果發現是數據庫掛了

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.