MySQL Replication Issues
At SendOutCards, we use MySQL
replication to ensure that if our main database server goes down because of
hardware failure, we'll still have an server that is up to date with our data.
In a nutshell, our main database server sends another server every update that
is performed on itself.
For non-hardware issues (IE, a bad SQL
statement that wipes out everyone's account balance), we've written a script on
our slave server that creates a complete backup of the database every night.
This system is great, in theory. Unfortunately, MySQL
replication seems to be highly problematic, at least with our database schema
and hardware setup. Before long, the slave server always becomes corrupt after
an arbitrary length of time (if you have any idea of why this might be
happening, please contact me). Due to the size of our database, we've had to
change the expire_log_days
(the number of days before the binary
log is deleted) in /etc/mysql/my.cnf
to 2 days; the reason is that
if the slave becomes corrupt and is not repaired immediately the log
information can become out of date and a repair without stopping the master
database is impossible.
To make sure we know about the situation as
soon as possible, I've written a simple python script to monitor the slave
status via cron that will send an email once an error is detected.
#!/usr/bin/env python
import MySQLdb, MySQLdb.cursors, os
## REPLACE THE FOLLOWING WITH YOUR INFORMATION
db_user = 'someuser'
db_pass = 'somepassword'
email = 'administrators@email.tld'
db = MySQLdb.connect(user=db_user, passwd=db_pass, db='mysql',
cursorclass=MySQLdb.cursors.DictCursor)
cur = db.cursor()
cur.execute('SHOW SLAVE STATUS')
row = cur.fetchone()
errno = row['Last_Errno']
error = row['Last_Error']
if errno > 0:
os.system('echo \"%s\" | mail -s \"Slave error on `hostname`\" %s' %
(error, email))
Restored from VimTips archive
This article was restored from the VimTips archive. There's probably missing images and broken links (and even some flash references), but it was still important to me to bring them back.