I had an “error connecting to database” when accessing one of my wordpress website hosted on Digital Ocean.
ps ax | grep mysqld
mysqld isn’t a running process. Clearly mysql was stopped for some reason.
Checking the error log, it shows that there is a problem starting InnoDB. Seems like insufficient memory.
140610 2:04:05 [Note] /usr/sbin/mysqld: Shutdown complete 140610 2:04:06 InnoDB: Initializing buffer pool, size = 128.0M InnoDB: mmap(137363456 bytes) failed; errno 12 140610 2:04:06 InnoDB: Completed initialization of buffer pool 140610 2:04:06 InnoDB: Fatal error: cannot allocate memory for the buffer pool
Hence i check my available memory:
Indeed, I have not much free memory to start mysql..
total used free shared buffers cached Mem: 490 456 34 0 1 76 -/+ buffers/cache: 378 111 Swap: 0 0 0
To recover, I restart apache2 to free up some memory
sudo service apache2 restart
And with that, my free memory increased from 34MB to 153MB, which is enough to restart mysql.
sudo service mysql restart
Question now is:
How to prevent this error again (when memory runs low)?
The tiny droplet I have has 512MB RAM, and 20GB on SSD harddisk.
It’s a waste not to create swap memory out of the 20GB SSD!
So, add a few GB of swap memory to your Ubuntu.
# Confirm you have no swap sudo swapon -s # Allocate 1GB (or more if you wish) in /swapfile sudo fallocate -l 1G /swapfile # Make it secure sudo chmod 600 /swapfile ls -lh /swapfile # Activate it sudo mkswap /swapfile sudo swapon /swapfile # Confirm again there's indeed more memory now free -m sudo swapon -s # Configure fstab to use swap when instance restart sudo nano /etc/fstab # Add this line to /etc/fstab, save and exit /swapfile none swap sw 0 0 # Change swappiness to 10, so that swap is used only when 10% RAM is unused # The default is too high at 60 echo 10 | sudo tee /proc/sys/vm/swappiness echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf
Without spending a cent, memory increased!