How to monitor server for error establishing a database connection

The question:

I know there are tools like pingdom.com and uptimerobot.com that will monitor your site and let you know if they’re down, but I find that my WordPress site is experiencing the dreaded “error establishing a database connection” more often than desired, and I’d like to get some sort of notification when that happens (but not in the form of a user complaint!). Pingdom and Uptimerobot do not consider that an error, and thus do not push any notifications.

Are there any simple tools or methods that will monitor my site for that specific problem (and perhaps other problems?) that may not be caught otherwise.

[Edit]
1. I’m referring specifically to the the well-known WordPress error that often occurs due to various DB connectivity reasons. When the error occurs, visiting the site returns the default white page with text shown below.

  1. For the purposes of this question, I’m not interested in why it occurs or how to fix it, but instead, I’d simply like to figure out how to automatically monitor it and get notified. Thanks.

enter image description here

The Solutions:

Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.

Method 1

You can actually use Pingdom to check for this kind of error, rather than a straight forward check for a response from the server you can configure the check to look for a particular string on the page. For instance, if your page has some kind of consistent bit of text on the homepage then you can look for that.

This Pingdom post has some info about checking for strings:

Make the most of your HTTP check: best practice for optional settings

You can also check that it doesn’t have particular string, so you should be able to make it flag it as down if it shows the text “Error establishing a database connection”.

Method 2

You can override the message with a file wp-content/db-error.php.

Then, in this file you can log the error or send a e-mail to alert there is a problem. I recommand you to not send a e-mail on every error because you can receive a lot of e-mails in a few seconds.

Method 3

How are you connecting to the database? Could you not catch an exception that sends an email to yourself?

With WordPress I assume it’s PHP, so…

            try {
                    // connect to database
            } catch(PDOException $ex) {
                    $this->output_error_string .= "$ex";
                    mail(/* send mail */);
            }

Method 4

There are probably several external ways to do it which are not wordpress specific, like doing an http get once a minute (or more) of the home page and check its content. can even be done from a local host or from a different one.

WordPress side solution, in a twist on what @sdexp suggests, is to override the wpdb class by providing your own implementation of it (in a wpdb.php file placed in /wp-content) which differ from the core one just by the action being done when connection fails. This is obviously a soft fork of wpdb but that class do not change a lot and with smart use of the php magic methods call, set and get in your implementation you can minimize the possibility of future failure even further.

Still your best path is to use external service. Monitoring is surprisingly something that not very easy to get right if you haven’t done such a thing before. Which service? StackOverflow or ServerFault are probably much better places to ask as it is really not a wordpress specific issue.

Method 5

You can use Testomato, which detects exactly this type of error automatically, no setup is needed.

Testomato has an extensive database of common errors and will send you
an alert as soon as we find one on your website.

See also How to Automatically Monitor a WordPress Website Using Testomato


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Comment