Python – архивиране на MySQL база данни
Published on 19.08.2010
Преди наколко дни си сглобих едно скриптче на 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 <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 <[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
Може да се свали и от тук