WordPress is one of the most popular open source content management systems in the world. Although it initially focused on blogging, over the years it has evolved into a more flexible platform for websites in general. After almost fifteen years of development, it is quite polished and reliable, but problems still arise.
If you’ve recently tried to load a WordPress site and instead saw the message “Error establishing database connection», The reason is most often one of the following:
- The database has collapsed, often due to insufficient memory on the server.
- Database login credentials are incorrect in WordPress config
- Tables in WordPress database have been corrupted
Let’s go through these questions one at a time to determine how they affect you and how to fix them.
This tutorial assumes the following:
- You start WordPress on a machine, you have a command line and
- The database runs on the same server as WordPress (typical for setting up your own server for WordPress, less typical for shared WordPress hosting)
- You know the database username, password and database name created for WordPress. This information should be created during the initial setup of your WordPress installation.
Step 1 – Check Server Memory Resources
A good first step to debugging this problem is to try to log into the server to see that the system is up and MySQL is running.
Login to the server via SSH:
ssh [email protected]_server_ip
If you need help logging into the server, see How to connect to Linux using SSH.
Note: If you are confident that your fittings are correct, but you are still having trouble logging in, it could be that your server is out of memory or under very heavy load. This could be due to a sudden spike in traffic to your site and could explain the WordPress error. You may need to reboot the server before you can login.
Now that we have logged in successfully, let’s check that our MySQL server is running:
sudo netstat -plt
Команда netstat displays information about the network system of our server. In this case, we need the names of the programs (
-p) listens for connections (
-l) to a TCP socket (
-t). Check the output on the screen
mysqldare highlighted below:
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 localhost:mysql *:* LISTEN 1958/mysqld tcp 0 0 *:ssh *:* LISTEN 2205/sshd tcp 0 0 localhost:smtp *:* LISTEN 2361/master tcp6 0 0 [::]:http [::]:* LISTEN 16091/apache2 tcp6 0 0 [::]:ssh [::]:* LISTEN 2205/sshd tcp6 0 0 ip6-localhost:smtp [::]:* LISTEN 2361/master
If your output is similar, we know MySQL is running and listening for a connection. If you don’t see MySQL listed, try starting MySQL manually. On most systems, it will look like this:
sudo systemctl start mysql
Some Linux distributions (CentOS in particular) use
mysqld instead of service
mysql… Replace depending on the system.
MySQL should work. To check, repeat the command
netstat which we used above and check the output for the process
MySQL and WordPress need a good amount of memory to run properly. If MySQL crashes due to a low memory situation, we should see evidence of this in our error logs. Let’s see:
zgrep -a "allocate memory" /var/log/mysql/error.log*
zgrep will search through the log – files, including old files that were archived as files with the extension
.tar.gz… We are looking for a string containing
allocate memory, in any file
error.log* in the catalog
2017-04-11T17:38:22.604644Z 0 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
If you see one or more lines like above, the MySQL server crashed and became unavailable. If it is only one line, then you may temporarily experience unusual traffic. If there are many error lines, the server is regularly running out of memory. In any case, the best solution is to migrate to the server with more available memory. With most cloud providers, it is a simple matter to upgrade your existing server with minimal downtime.
If you don’t see any output after running the command
zgrep, your server is down not because of memory. If your site still throws errors, move on to the next step where we will look at our WordPress configuration and make sure the MySQL login information is correct.
Step 2 – Verifying the Login Database Credentials
If you’ve just moved your WordPress and chose between servers or hosting provider, you may need to update your database connection details. They are stored on the server in a PHP file named
First, let’s find our file
sudo find / -name "wp-config.php"
This search will go through everything in the root directory (
/), and will find a file named
wp-config.php… If such a file exists, then the full path will appear in the output:
Now use your favorite text editor to open the config file. We will use the editor here
sudo nano /var/www/html/wp-config.php
This will open a text file full of configuration variables and explanatory text. At the beginning of our database connection information:
/** The name of the database for WordPress */ define('DB_NAME', 'database_name'); /** MySQL database username */ define('DB_USER', 'database_username'); /** MySQL database password */ define('DB_PASSWORD', 'database_password');
Make sure these three variables are correct based on your entries. If they don’t look right, update as needed, save and exit (
CTRL-O, and then,
CTRL-X if you use
nano). Even if the information looked correct, it is worth trying to connect to the database from the command line just to be sure. Copy and paste the details directly from the config file into the following command:
mysqlshow -u database_username -p
You will be prompted for a password. Paste it in and click
ENTER… If you get the error Access Denied, your username or password is incorrect. Otherwise the command
mysqlshow will show all databases that the specified user has access to:
+--------------------+ | Databases | +--------------------+ | information_schema | | database_name | +--------------------+
Make sure one of the databases exactly matches the one in your WordPress config file. If this happens, you have verified that your configuration is correct and that WordPress should be able to log into the database successfully. Go to your website to see that the error is gone.
Still not working? The next thing to try is to repair the database.
Step 3 – Restoring the WordPress Database
Sometimes, due to a failed update, a database crash or a faulty plugin, your WordPress database can become corrupted. This problem can present itself as a database connection error, so if your problem is not the MySQL server or configuration file, try restoring your database.
WordPress provides a built-in database recovery utility. It is disabled by default because it has no access control and could be a security issue. We will enable this feature, make repairs, and then disable it.
Open the file
sudo nano /var/www/html/wp-config.php
On any blank line, insert the following:
This defines a variable that specifies in WordPress that the restore feature should be enabled.
Save and close the file. Switch to your browser and load the following URL, making sure to replace your site’s domain or IP address for the dedicated site:
To load the database recovery page:
Click the button Database Repairand you will be taken to the results page where you can see receipts and repairs in real time:
After completing the process, make sure by opening the file
wp-config.php again, and delete the line we inserted.
Have you noticed any renovation work being done? Try your site again and check if the error is gone. If a non-repairable problem was found, you may need to restore the database from a backup if you have a database backup available. Please see our tutorial on how to import and export databases in MySQL for an addition to our article on how to do it.
If the problems with the database are not resolved, then we still haven’t found the problem. These may be temporary problems, see another tutorial here to fix this problem.
Most of the “Error establishing database connection” problems should have been resolved with the three steps above. However, there could be no more elusive questions that continue to present themselves in this way. Here are a few more articles that may be helpful in catching and neutralizing the cause of this error:
- A frequent source of high traffic (and thus reduced performance and errors) is a brute force attack on a common WordPress installation. You can neutralize the attack by following the guide on how to protect WordPress against XML-RPC attacks.
- You can save server resources by implementing caching on your WordPress installation. There are many caching plugins in WordPress. Our tutorial on how to set up Redis caching to speed up WordPress will show you how to set up a particularly performant Redis cache.