Z przyczyn obiektywnych lub też nie – po prawie rocznym korzystaniu z usług, zmuszony zostałem do zmienienia dotychczasowego serwera dedykowanego z webtropii na ovh. Plusem tych zmian, dość znaczącym zresztą, jest kontakt z serwisem – w wypadku ovh – całkowicie bezproblemowy i szybki, stojący w opozycji do lakonicznych tłumaczeń łamaną angielszczyzną pracowników supportu z niemiec. Dodatkowym plusem jest naprawdę przejrzysty panel ( wielojęzyczny ), w którym właściwie wszystkie możliwe operacje związane z wykupionym serwerem da się załatwić “od ręki”. Uwagę moją przykuło dodatkowe miejsce na backup na serwerze ftp – równe powierzchni dysku. Z uwagi na to że jestem strasznie leniwy a backupów nie chciało mi się ( i pewnie nie będzie chciało jeszcze przez długi czas ) regularnie samodzielnie wykonywać, “na szybko” popełniłem poniższy skrypt – który ( mam nadzieję ) przyda się nie tylko użytkownikom ovh. Prawa autorskie na licencji RPL – czyli Religion Public License ( Bierzcie i jedzcie z tego wszyscy ).

#!/usr/bin/python

from ftplib import FTP
from time import strftime
import MySQLdb, os, sys, string, commands

### CONFIG
dbrootpasswd="haslorootamysql"
ftphostname ="hostftp"
ftpuserlogin="loginuzytkownikaftp"
ftpuserpass ="haslouzytkownikaftp"
maindirect  ="/sciezka/do/katalogu/ze/skryptem"
keeps	    ="11"  # liczba dni backupu które należy zachować na serwerze.

def WriteLog(backupDate):
    logw = open("ftp-backup.log", "a")
    logw.write(backupDate +".tar\n")
    commands.getstatusoutput("mkdir "+backupDate)
    logw.close()

def MySQLBackup(backupDate):
    print "Getting MySQL backup.."
    commands.getstatusoutput("mysqldump -u root -p"+dbrootpasswd+" --all-databases > "+backupDate+"/"+backupDate+".db")
    print "Database backup complete."

def HostingBackup(backupDate):
    print "Packing up hosting directory."
    commands.getstatusoutput("tar -cf "+backupDate+"/home-"+backupDate+".tar /home/hosting")
    print "Hosting directory packed."

def FtpSendThatShit(backupDate):
    print "Sending everything to backup server."
    ftp = FTP(ftphostname,ftpuserlogin,ftpuserpass)
    ftp.storbinary("STOR "+backupDate+".tar", open(backupDate+".tar", "rb"), 1024)
    ftp.quit()
    print "Everything ok. Quitting."

def FtpCheckOld(oldDate):
    print "Cleaning old stufffffff pufff.."
    ftp = FTP(ftphostname,ftpuserlogin,ftpuserpass)
    ftp.delete(backupDate+".tar")
    ftp.quit()
    print "Puffff....."

def CleanLocal(backupDate):
    print "Local filesystem cleaned."
    commands.getstatusoutput("rm -fr "+backupDate+"*")

os.chdir(maindirect)
try:
    log = open("ftp-backup.log", "r")
    logList = log.readlines()
    log.close()
    backupDate = strftime("%Y-%m-%d")
    print "Backup: "+backupDate
    try:
	logDate = logList[len(logList)-1].split('\n')
	oldDate = logList[len(logList)-11].split('\n')
	if logDate[0] == backupDate +".tar":
    	    print "Backup for today was created."
	    exit(-1)
	else:
	    WriteLog(backupDate)
	    MySQLBackup(backupDate)
	    HostingBackup(backupDate)
    except:
	    WriteLog(backupDate)
	    MySQLBackup(backupDate)
	    HostingBackup(backupDate)
    print "And now.. packing up everything.."
    commands.getstatusoutput("tar -cf "+backupDate+".tar "+backupDate)
    try:
        FtpSendThatShit(backupDate)
    except:
        print "Something is fucked up."
    try:
	FtpCheckOld(oldDate)
    except:
	print "Nothing to clean.."
    CleanLocal(backupDate)

except:
    commands.getstatusoutput("touch ftp-backup.log")
    commands.getstatusoutput("echo \"error\" > ftp-backup.log")
    print "Small error, try again."
    exit(-1)