Heads up! This post was written 15 years ago. Some information might be outdated or may have changed since then.
Преди наколко дни си сглобих едно скриптче на Python което да ми архивира и праща базата данни към email-а през определен период от време (cron). Скриптчето е тествано и работи на сървърите на Superhosting.bg
import commands
import sys
import time
import os
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders

db_host = '127.0.0.1'
db_user = "username_for_database"
db_pass = "*******************"
email_user = ""
email_smtp_server = "*.superhosting.bg"
email_from_user = "Yuks "
email_smtp_login_user = "[email protected]"
email_smtp_login_pass = "*******"
email_smtp_server_port = "25"
email_smtp_sent_to = ["[email protected]"]
temp_folder = "/home/*****/scripts/backup_db/"

def backup_db(currentDatabase):
    backupFile = temp_folder + currentDatabase + ".sql"
    backupFilePath = temp_folder + currentDatabase + ".sql"
    zipFile = temp_folder + currentDatabase + ".tgz"
    commands.getoutput("mysqldump --host=%s --opt --user=%s --password=%s %s > %s" % (db_host, db_user, db_pass, currentDatabase, backupFilePath))
    os.chdir(temp_folder)
    commands.getoutput("/bin/tar cfz %s %s" % (zipFile, backupFile))
    os.remove(backupFilePath)

def sendMail(to, subject, text, files=[]):
    assert type(to)==list
    assert type(files)==list

    msg = MIMEMultipart()
    msg['From'] = email_from_user
    msg['To'] = COMMASPACE.join(to)
    msg['Date'] = formatdate(localtime=True)
    msg['Subject'] = subject

    msg.attach( MIMEText(text) )

    for file in files:
        part = MIMEBase('application', "octet-stream")
        part.set_payload( open(file,"rb").read() )
        Encoders.encode_base64(part)
        part.add_header('Content-Disposition', 'attachment; filename="%s"'
                       % os.path.basename(file))
        msg.attach(part)

    smtp = smtplib.SMTP(email_smtp_server,email_smtp_server_port)
    smtp.login(email_smtp_login_user, email_smtp_login_pass)
    smtp.sendmail(email_from_user, to, msg.as_string() )
    smtp.close()

def backup_and_send(bdatabase):
    backup_db(bdatabase)
    sendMail(email_smtp_sent_to,"Database archive of " + bdatabase,"Database " + bdatabase,[temp_folder + bdatabase + ".tgz"])
    os.chdir(temp_folder)
    os.remove(bdatabase + ".tgz")
    #print "ok!"

backup_and_send(sys.argv[1])
За да работи коректно е нужно да се променят някои от параметрите и по конкретно
db_host = '127.0.0.1'                               // сървъра на mysql  
db_user = "username_for_database"          // потребителското име за достъп до Mysql 
db_pass = "*******************"// паролата за достъп до Mysql  
email_user = ""    
email_smtp_server = "*.superhosting.bg"// smtp сървъра за изпращане на mail 
email_from_user = "Yuks <[email protected]>"// полето от на изпращания емаил 
email_smtp_login_user = "[email protected]"// потребителя за smtp сървъра 
email_smtp_login_pass = "*****"//паролата за smtp сървъра 
email_smtp_server_port = "25" // порта за smtp сървъра 
email_smtp_sent_to = ["[email protected]"]  // email адреса до който ще се праща 
temp_folder = "/home/*****/backup_db/"// временна директория с права за писане
Работата със скрипта е по следния начин: python /full/path/to/script/script.py database_to_archive Може да се свали и от тук

Back to all posts