apache2 error establishing a database connection

Posted in :

我的WordPress 網站掛掉了,apache 還活著,顯示這一個錯誤訊息:

establishing a database connection

試著登入伺服器後,使用本機的指令連結mysql: mysql -u root -p,結果終端機報錯:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

檢查看看 /var/log/mysql/error.log 的錯誤訊息:

[ERROR] [MY-012956] [InnoDB] Cannot allocate memory for the buffer pool

Crash cause:

MySQL buffer size is bigger than free RAM available on the server.


innodb_buffer_pool_size: 這個設定是 innodb 儲存引擎資料庫,所使用的資料及索引快取,根據記憶體的大小䀆量設定大一點,可以減低讀取資料時從硬碟讀取的次數。

在 mysql 5.7 或 mysql 8.0 檢查緩衝池位元組大小的SQL command:

SELECT @@innodb_buffer_pool_size/1024/1024;

顯示的結果應該是 128,代表預設為 128MB。

在MySQL 5.7版本之後,innodb_buffer_pool_size引數的值可以動態的設定,你可以在不啟動伺服器的情況下,重新設定緩衝區的大小。如果要修改,請在 my.cnf 中的[mysqld] 節下面新增如下配置。配置完成之後,需要重啟 MySQL 服務:

[mysqld]
innodb_buffer_pool_size = 1G # (adjust value here, 50%-70% of total RAM)

如何檢查InnoDB緩衝池大小是否設置足夠。在終端中,執行如下命令:

mysqladmin ext -ri1 -p | grep Innodb_buffer_pool_reads

你所看到的是從硬碟讀取數據到緩衝池的次數(每秒)。

附註:上面指令需要使用ctrl + c 中斷。


猜測可能是有時需要的記憶體不足,但從伺服器的記憶體使用狀態來看,使用都不會超過70%:

應該是沒有增加虛擬記憶體的必要,反正加了有保險,不加可能會掛掉,還是先加一下好了。在ubuntu 裡增加 VM 流程如下:

Creating a Swap File

sudo fallocate -l 1G /swapfile

Enabling the Swap File

sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Making the Swap File Permanent

sudo cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Tuning your Swap Settings

sudo nano /etc/sysctl.conf

在上面檔案最下面加入這二行:

vm.swappiness=10
vm.vfs_cache_pressure=50

要立馬套用到設定值,請下指令:

sudo sysctl vm.swappiness=10
sudo sysctl vm.vfs_cache_pressure=50

資料來源:

How To Add Swap Space on Ubuntu 18.04
https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-18-04

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *