#!/usr/bin/env python
import os
import time
import MySQLdb
import sys
SENDMAIL = "/usr/sbin/sendmail" # sendmail location
username = "backupuser"
password = "backuppass"
hostname = "localhost"
filestamp = time.strftime('%d-%m-%Y')
# Get a list of databases on the mysql server
database_list_command="mysql -u %s -p%s -h %s --silent -N -e 'show databases'" % (username, password, hostname)
for database in os.popen(database_list_command).readlines():
database = database.strip()
# Check if the auto backup module is enabled and get the notification data
notify_db = MySQLdb.connect( user=username,passwd=password,db=database)
c = notify_db.cursor()
try:
c.execute("SELECT `notify_email`,`enabled` FROM `backup_config` WHERE 1 LIMIT 1")
result = c.fetchone()
notify_to = result[0]
enabled = result[1]
except MySQLdb.Error, e:
continue
if enabled == 1:
filename = "/backups/mysql/%s-%s.sql" % (database, filestamp)
os.popen("mysqldump -u %s -p%s -h %s -e --opt -c %s | gzip -c > %s.gz" % (username, password, hostname, database, filename))
FROM = "backup@mydomainhere.com.au"
if notify_to == "":
notify_to = "backup@mydomainhere.com.au"
TO = [notify_to] # using a list to make it easier to support multiple addresses
SUBJECT = "Backup Complete Notification"
TEXT = "The latest database backup has been complete."
# Prepare actual message
message = """From: %s\nTo: %s\nSubject: %s\n\n%s""" % (FROM, ", ".join(TO), SUBJECT, TEXT)
# Send the mail
p = os.popen("%s -t -i" % SENDMAIL, "w")
p.write(message)
status = p.close()
if status:
print "Sendmail exit status", status