Esempio n. 1
0
def backupdb():
    from dbapp.model_DbManage import DbBackupLog
    from base.options import Option
    from base.options import PersonalOption
    
    pos = PersonalOption.objects.filter(option__name="backup_sched")
    currenttime = datetime.datetime.now()
    fmt ="%Y-%m-%d %H:%M:%S"
    for i in pos:
        starttime,inc = i.value.split("|")
        starttime =datetime.datetime.strptime(starttime,fmt) 
        inc = int(inc)
        #dt_start =datetime.datetime.strptime(starttime,fmt)
        hl = DbBackupLog.objects.filter(user=i.user,imflag=False).order_by('-starttime')
        if hl.count()>0:
            ret = (hl[0].starttime - starttime).seconds*1.0/ (inc *60*60)
            if ret ==int(ret):
                dt_start = hl[0].starttime
            else:
                dt_start =starttime   
        else:
            dt_start =starttime
        k=1
        dd= datetime.datetime(currenttime.year,currenttime.month,currenttime.day,dt_start.hour,dt_start.minute,dt_start.second)
        if currenttime<dt_start:
            return
        while True:
#            dt_start_should = dt_start + datetime.timedelta(hours=  k * inc)
#            dt_start_from = dt_start_should - datetime.timedelta(seconds=60)
#            dt_start_to = dt_start_should + datetime.timedelta(seconds=60)
            dt_start_should =  dd +  datetime.timedelta(hours=  k * inc)
            dt_start_from =  dt_start_should - datetime.timedelta(seconds=60)
            dt_start_to = dt_start_should + datetime.timedelta(seconds=60)
            if currenttime<dt_start_from:
                break
            if currenttime>=dt_start_from and currenttime<=dt_start_to: 
                #print "starting  backup %s"%dt_start_should
                iCount=DbBackupLog.objects.filter(user=i.user,imflag=False,starttime__range=(dt_start_from,dt_start_to)).count()
                if not iCount:
                    ii=DbBackupLog(user=i.user,starttime= dt_start_should,imflag=False)
                    ii.save()
                break
            k+=1
    cunprocess=DbBackupLog.objects.filter(successflag='').order_by('starttime')
    if cunprocess:
        unprocess =cunprocess[0]
        backup_file=settings.APP_HOME+"\\tmp\\db_" + unprocess.starttime.strftime("%Y%m%d%H%M%S") +".json"
        try:
            p = subprocess.Popen("manage.pyc dumpdata >"+backup_file,shell=True,stderr=subprocess.PIPE)
            stderrdata = p.communicate()
            if p.returncode!=0:
                unprocess.successflag='2'
                unprocess.save()
                logger.error(stderrdata)
            elif p.returncode==0:
                unprocess.successflag='1'
                unprocess.save()
        except Exception,e:
            print e
Esempio n. 2
0
def backupdb():
    from dbapp.model_DbManage import DbBackupLog
    from base.options import Option
    from base.options import PersonalOption

    pos = PersonalOption.objects.filter(option__name="backup_sched")
    currenttime = datetime.datetime.now()
    fmt = "%Y-%m-%d %H:%M:%S"
    for i in pos:
        starttime, inc = i.value.split("|")
        starttime = datetime.datetime.strptime(starttime, fmt)
        inc = int(inc)
        #dt_start =datetime.datetime.strptime(starttime,fmt)
        hl = DbBackupLog.objects.filter(user=i.user,
                                        imflag=False).order_by('-starttime')
        if hl.count() > 0:
            ret = (hl[0].starttime - starttime).seconds * 1.0 / (inc * 60 * 60)
            if ret == int(ret):
                dt_start = hl[0].starttime
            else:
                dt_start = starttime
        else:
            dt_start = starttime
        k = 1
        dd = datetime.datetime(currenttime.year, currenttime.month,
                               currenttime.day, dt_start.hour, dt_start.minute,
                               dt_start.second)
        if currenttime < dt_start:
            return
        while True:
            #            dt_start_should = dt_start + datetime.timedelta(hours=  k * inc)
            #            dt_start_from = dt_start_should - datetime.timedelta(seconds=60)
            #            dt_start_to = dt_start_should + datetime.timedelta(seconds=60)
            dt_start_should = dd + datetime.timedelta(hours=k * inc)
            dt_start_from = dt_start_should - datetime.timedelta(seconds=60)
            dt_start_to = dt_start_should + datetime.timedelta(seconds=60)
            if currenttime < dt_start_from:
                break
            if currenttime >= dt_start_from and currenttime <= dt_start_to:
                #print "starting  backup %s"%dt_start_should
                iCount = DbBackupLog.objects.filter(
                    user=i.user,
                    imflag=False,
                    starttime__range=(dt_start_from, dt_start_to)).count()
                if not iCount:
                    ii = DbBackupLog(user=i.user,
                                     starttime=dt_start_should,
                                     imflag=False)
                    ii.save()
                break
            k += 1
    cunprocess = DbBackupLog.objects.filter(
        successflag='').order_by('starttime')
    if cunprocess:
        unprocess = cunprocess[0]
        backup_file = settings.APP_HOME + "\\tmp\\db_" + unprocess.starttime.strftime(
            "%Y%m%d%H%M%S") + ".json"
        try:
            p = subprocess.Popen("manage.pyc dumpdata >" + backup_file,
                                 shell=True,
                                 stderr=subprocess.PIPE)
            stderrdata = p.communicate()
            if p.returncode != 0:
                unprocess.successflag = '2'
                unprocess.save()
                logger.error(stderrdata)
            elif p.returncode == 0:
                unprocess.successflag = '1'
                unprocess.save()
        except Exception, e:
            print e
Esempio n. 3
0
def backupdb():
    from dbapp.model_DbManage import DbBackupLog
    from base.options import Option
    from base.options import PersonalOption
    from django.db import close_connection
    close_connection()
    pos = PersonalOption.objects.filter(option__name="backup_sched")
    currenttime = datetime.datetime.now()
    fmt ="%Y-%m-%d %H:%M:%S"
    for i in pos:
        while True:
            starttime, inc = i.value.split("|")
            starttime = datetime.datetime.strptime(starttime,fmt)#无论是否改变,重新获取
            dt = datetime.datetime(starttime.year,starttime.month,starttime.day)
            cur = datetime.datetime(currenttime.year,currenttime.month,currenttime.day)
            date_check = ((cur-dt).days*1.0)/int(inc)   #inc 单位:天
            if date_check != int(date_check):
                break
            dt_start_should= datetime.datetime(currenttime.year,currenttime.month,currenttime.day,starttime.hour,starttime.minute,starttime.second)
            dt_start_from =  dt_start_should - datetime.timedelta(seconds=10)
            dt_start_to = dt_start_should + datetime.timedelta(seconds=180)

            if currenttime >= dt_start_from and currenttime <= dt_start_to:
                iCount=DbBackupLog.objects.filter(user=i.user,imflag=False,starttime__range=(dt_start_from,dt_start_to)).count()
                if not iCount:
                    ii=DbBackupLog(user=i.user,starttime= dt_start_should,imflag=False)
                    ii.save()
            break#不执行计划备份时,跳出while循环,继续for循环。防止立即备份不执行
    cunprocess = DbBackupLog.objects.filter(successflag='').order_by('starttime')
    if cunprocess:
        unprocess =cunprocess[0]
        database_user = settings.DATABASES["default"]["USER"]
        database_password = settings.DATABASES["default"]["PASSWORD"]
        database_engine = settings.DATABASES["default"]["ENGINE"]
        database_name = settings.DATABASES["default"]["NAME"]
        database_host = settings.DATABASES["default"]["HOST"]
        database_port = settings.DATABASES["default"]["PORT"]

        try:
            backup_file = ""  
            path = get_backup_path()
            if path == "":
                unprocess.successflag = '2'
                unprocess.save()
                return
            if not os.path.exists(path):
                os.mkdir(path)
            ################# 得到数据库备份命令字符串 #######################3
            if database_engine == "django.db.backends.mysql":
                backup_file = path+"\\db_" + unprocess.starttime.strftime("%Y%m%d%H%M%S") +".sql"
                if database_password != "":
                    backup_file = "mysqldump --hex-blob -l --opt -q -R --default-character-set=utf8 -h %s -u %s -p%s --port %s --database %s >%s"%(database_host, database_user, database_password, database_port, database_name, backup_file)
                else:
                    backup_file = "mysqldump --hex-blob -l --opt -q -R --default-character-set=utf8 -h %s -u %s --port %s --database %s >%s"%(database_host, database_user, database_port, database_name, backup_file)
            elif database_engine == "sqlserver_ado":
                try:
                    int(database_name)
                    database_name='[%s]'%database_name
                except:
                    pass
                
                backup_file = path+"\\db_" + unprocess.starttime.strftime("%Y%m%d%H%M%S") +".bak"
                backup_file = '''sqlcmd -U %s -P %s -S %s -Q "backup database %s to disk='%s'"'''%(database_user,database_password,database_host,database_name,backup_file)
            elif database_engine == "django.db.backends.oracle":
                path = os.environ["path"]
                list = path.split(";")
                oracle_path = ""
                for i  in list:
                    if "oraclexe" in i:
                        oralce_path = i
                backup_file = path+"\\db_" + unprocess.starttime.strftime("%Y%m%d%H%M%S") +".dmp"
                backup_file = "%s\\exp %s/%s@%s file='%s'"%(oracle_path,database_user,database_password,database_name,backup_file)
            elif database_engine == "django.db.backends.postgresql_psycopg2":
                backup_file = path+"\\db_" + unprocess.starttime.strftime("%Y%m%d%H%M%S") +".bak"
                backup_file = 'pg_dump -h %s -c -p %s -U %s %s >%s'%(database_host,database_port,database_user,database_name,backup_file)
                
                
            p = subprocess.Popen(backup_file.encode('gbk'), shell=True, stderr=subprocess.PIPE)
            p.wait()
            stderrdata = p.communicate()
            if p.returncode != 0:
                unprocess.successflag = '2'
                unprocess.save()
                logger.error(stderrdata)
            elif p.returncode == 0:
                unprocess.successflag = '1'
                unprocess.save()
        except Exception,e:
            print e  
Esempio n. 4
0
def backupdb():
    from dbapp.model_DbManage import DbBackupLog
    from base.options import Option
    from base.options import PersonalOption
    from django.db import close_connection
    close_connection()
    pos = PersonalOption.objects.filter(option__name="backup_sched")
    currenttime = datetime.datetime.now()
    fmt = "%Y-%m-%d %H:%M:%S"
    for i in pos:
        while True:
            starttime, inc = i.value.split("|")
            starttime = datetime.datetime.strptime(starttime,
                                                   fmt)  #无论是否改变,重新获取
            dt = datetime.datetime(starttime.year, starttime.month,
                                   starttime.day)
            cur = datetime.datetime(currenttime.year, currenttime.month,
                                    currenttime.day)
            date_check = ((cur - dt).days * 1.0) / int(inc)  #inc 单位:天
            if date_check != int(date_check):
                break
            dt_start_should = datetime.datetime(
                currenttime.year, currenttime.month, currenttime.day,
                starttime.hour, starttime.minute, starttime.second)
            dt_start_from = dt_start_should - datetime.timedelta(seconds=10)
            dt_start_to = dt_start_should + datetime.timedelta(seconds=180)

            if currenttime >= dt_start_from and currenttime <= dt_start_to:
                iCount = DbBackupLog.objects.filter(
                    user=i.user,
                    imflag=False,
                    starttime__range=(dt_start_from, dt_start_to)).count()
                if not iCount:
                    ii = DbBackupLog(user=i.user,
                                     starttime=dt_start_should,
                                     imflag=False)
                    ii.save()
            break  #不执行计划备份时,跳出while循环,继续for循环。防止立即备份不执行
    cunprocess = DbBackupLog.objects.filter(
        successflag='').order_by('starttime')
    if cunprocess:
        unprocess = cunprocess[0]
        database_user = settings.DATABASES["default"]["USER"]
        database_password = settings.DATABASES["default"]["PASSWORD"]
        database_engine = settings.DATABASES["default"]["ENGINE"]
        database_name = settings.DATABASES["default"]["NAME"]
        database_host = settings.DATABASES["default"]["HOST"]
        database_port = settings.DATABASES["default"]["PORT"]

        try:
            backup_file = ""
            path = get_backup_path()
            if path == "":
                unprocess.successflag = '2'
                unprocess.save()
                return
            if not os.path.exists(path):
                os.mkdir(path)
            ################# 得到数据库备份命令字符串 #######################3
            if database_engine == "django.db.backends.mysql":
                backup_file = path + "\\db_" + unprocess.starttime.strftime(
                    "%Y%m%d%H%M%S") + ".sql"
                if database_password != "":
                    backup_file = "mysqldump --hex-blob -l --opt -q -R --default-character-set=utf8 -h %s -u %s -p%s --port %s --database %s >%s" % (
                        database_host, database_user, database_password,
                        database_port, database_name, backup_file)
                else:
                    backup_file = "mysqldump --hex-blob -l --opt -q -R --default-character-set=utf8 -h %s -u %s --port %s --database %s >%s" % (
                        database_host, database_user, database_port,
                        database_name, backup_file)
            elif database_engine == "sqlserver_ado":
                try:
                    int(database_name)
                    database_name = '[%s]' % database_name
                except:
                    pass

                backup_file = path + "\\db_" + unprocess.starttime.strftime(
                    "%Y%m%d%H%M%S") + ".bak"
                backup_file = '''sqlcmd -U %s -P %s -S %s -Q "backup database %s to disk='%s'"''' % (
                    database_user, database_password, database_host,
                    database_name, backup_file)
            elif database_engine == "django.db.backends.oracle":
                path = os.environ["path"]
                list = path.split(";")
                oracle_path = ""
                for i in list:
                    if "oraclexe" in i:
                        oralce_path = i
                backup_file = path + "\\db_" + unprocess.starttime.strftime(
                    "%Y%m%d%H%M%S") + ".dmp"
                backup_file = "%s\\exp %s/%s@%s file='%s'" % (
                    oracle_path, database_user, database_password,
                    database_name, backup_file)
            elif database_engine == "django.db.backends.postgresql_psycopg2":
                backup_file = path + "\\db_" + unprocess.starttime.strftime(
                    "%Y%m%d%H%M%S") + ".bak"
                backup_file = 'pg_dump -h %s -c -p %s -U %s %s >%s' % (
                    database_host, database_port, database_user, database_name,
                    backup_file)

            p = subprocess.Popen(backup_file.encode('gbk'),
                                 shell=True,
                                 stderr=subprocess.PIPE)
            p.wait()
            stderrdata = p.communicate()
            if p.returncode != 0:
                unprocess.successflag = '2'
                unprocess.save()
                logger.error(stderrdata)
            elif p.returncode == 0:
                unprocess.successflag = '1'
                unprocess.save()
        except Exception, e:
            print e