Script to Automatically change current MySQL
server in wp-config.php to another MySQL host to minimize Wordpress
and Joomla downtimes
I'm running a two servers for a couple of home hosted websites. One
of the servers is serving as Apache
host1 and has configured
MySQL running on it and the second is used just for database
host2 - (has another MySQL configured on it).
The MySQL servers are not configured to run as a
MySQL MASTER
and MySQL SLAVE (no mysql replication), however periodically
(daily), I have a tiny shell script that is actualizing the data
from the active
SQL host2 server to
host1.
Sometimes due to electricity problems or CPU overheats the active
MySQL host at
host2 gets stoned and stops working causing
the 2 Wordpress based websites and One joomla site
inaccessible.
Until I manually get to the machine and restart
host2 the 3
sites are down from the net and as you can imagine this has a very
negative impact on the existing website indexing (PageRank) in
Google.
When I'm at home, this is not a problem as I have physical access
to the servers and if somethings gets messy I fix it quickly. The
problem comes, whether I'm travelling or in another city far from
home and there is no-one at home to give the hanged host
hard
reboot ....
Lately the problems with hang-ups of
host2 happaned 3 times
or so for 2 weeks, as a result the websites were inaccessible for
hours and since there is nobody to reboot the server for hours; the
websites keep hanging until the DB host is restarted ;;;;
To work-around this I came with the idea to write a tiny shell
script to check if
host2 is ping-able in order to assure the
Database host is not down and then if script determines
host2 (mysql) host is down it changes
wp-config.php
(set to use
host2) to a wp-config.php (which I have
beforehand configured to use)
host1.
Using the script is a temporary solution, since I have to actually
find the real hang-up causing troubles, but at least it saves me
long downtimes. Here is a
download link to
the script I called change_blog_db.sh .
I've configured the script to be run on the Apache node (host1) via
a crontab calling the script every 10 minutes, here is the
crontab:
*/10 * * * * /usr/sbin/change_blog_db.sh > /dev/null
2>&1
The script is written in a way so if it determins
host2 is
reachable a copy of
wp-config.php and Joomla's
configuration.php tuned to use
host2 is copied over
the file config originals. In order to use the script one has to
configured the head variables script section, e.g.:
host_to_ping='192.168.0.2';
blog_dir='/var/www/blog';
blog_dir2='/var/www/blog1'; blog_dir3='/var/www/joomla';
notify_mail='hipo@pc-freak.net';
wp_config_orig='wp-config.php';
wp_config_localhost='wp-config-localhost.php';
wp_config_other_host='wp-config-192.168.0.2.php';
joomla_config_orig='configuration.php';
joomla_config_other_host='configuration-192.168.0.2.php';
You will have to manually prepare;;;
wp-config-localhost.php, wp-config-192.168.0.2.php
,configuration-192.168.0.2.php, wp-config-localhost.php to be
existing files configured to with proper
host1 and
host2 IP addresses.
Hope the script will be useful to others, experiencing database
downtimes with Wordpress or Joomla installs.