Python – архивиране на MySQL база данни
0
- 19.08.2010 (Четвъртък)
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 <admin@yuksbg.net>"
email_smtp_login_user = "admin@yuksbg.net"
email_smtp_login_pass = "*******"
email_smtp_server_port = "25"
email_smtp_sent_to = ["backUp@yuksbg.net"]
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 <admin@yuksbg.net>"// полето от на изпращания емаил email_smtp_login_user = "admin@yuksbg.net"// потребителя за smtp сървъра email_smtp_login_pass = "*****"//паролата за smtp сървъра email_smtp_server_port = "25" // порта за smtp сървъра email_smtp_sent_to = ["archive@yuksbg.net"] // email адреса до който ще се праща temp_folder = "/home/*****/backup_db/"// временна директория с права за писанеРаботата със скрипта е по следния начин:
python /full/path/to/script/script.py database_to_archive
Може да се свали и от тук 