自动备份mysql数据库,保留7天的备份。省出的时间刷掘金摸鱼。

171 阅读1分钟
import os
import time
import datetime
import shutil 
# 自动备份数据库,并删除七天前文件
#数据库ip
DB_HOST = "你的数据库地址"
#数据库端口
DB_PORT = "端口号"
#数据库用户名
DB_USER = "用户名"
#数据库密码
DB_USER_PASSWORD = "密码"
#备份的数据库
DB_NAMES = "数据库名"
#备份到的路径
BACKUP_PATH = "/backmysql/"
 
# 当前时间.

def delmysql():
    '''
    获取取文件夹下所有文件的名字并删除七天前文件
    '''
    DATETIME = time.strftime('%Y%m%d')
    path = "/backmysql/"
    datanames = os.listdir(path)
    for i in datanames:
        cc=int(int(i)+6)   
        if cc < int(DATETIME):  # 删除七天前备份    
            pathcc =path+str(i)
            if os.path.exists(pathcc):  # 如果文件存在
                # 删除文件,可使用以下两种方法。              
                #os.remove(pathcc)  #只能删除文件不能删除文件夹
                shutil.rmtree(pathcc)
            else:
                print("文件夹不存在"+pathcc)
            
def backmysql1():
    DATETIME = time.strftime('%Y%m%d')
    TODAYBACKUPPATH = BACKUP_PATH + DATETIME
        # 检查备份文件夹是否已经存在。 如果不存在,将创建它    
    if not os.path.exists(TODAYBACKUPPATH):
        os.makedirs(TODAYBACKUPPATH)
    today = datetime.datetime.now()
    for item in os.listdir(BACKUP_PATH):
        try:
            foldername = os.path.split(item)[1]
            day = datetime.datetime.strptime(foldername, "%Y%m%d")
            diff = today - day
            if diff.days >= 60:
                #print( BACKUP_PATH + item)
                shutil.rmtree(BACKUP_PATH + item)
        except:
            pass
 
    # 用于检查是否要在DB_NAME中进行单个数据库备份还是分配多个备份的代码 .
    DBS = DB_NAMES.split(",")
    for DB_NAME in DBS:
        # 备份.
        DB_PATH = TODAYBACKUPPATH + "/" + DB_NAME + ".sql"
        #print("- - - baking '" + DB_NAME + ".zip'")
        dumpcmd = "mysqldump -h" + DB_HOST + " -u" + DB_USER + " -p" + DB_USER_PASSWORD + " " + DB_NAME +" > "+ DB_PATH    
        os.system(dumpcmd)
if __name__=='__main__':     
   try:     
        DATETIME = time.strftime('%Y%m%d')
        TODAYBACKUPPATH = BACKUP_PATH + DATETIME
        while True:  
            now = datetime.datetime.now() 
            #print(now.hour, now.minute)
            if now.hour == 21 and now.minute == 00: # 每天九点运行程序
               backmysql1()
               print("备份成功 : "+TODAYBACKUPPATH+"sport.sql")
               delmysql()
               print("删除成功 :"+ DATETIME+"七天前的内容")
        # 每隔60秒检测一次
            print("程序运行中")
            time.sleep(60)           
   except Exception as e:
        print(str(e))   

本文正在参加「技术专题19期 漫谈数据库技术」活动