当前位置 博文首页 > Python备份Mysql脚本

    Python备份Mysql脚本

    作者:admin 时间:2021-02-02 15:10

    复制代码 代码如下:

    #!/usr/bin/python 

    import os 
    import time 
    import ftplib 
    import traceback 

    #config vars 
    systempathchr="/" #路径分割符,*nix用"/" win32用"\\" 

    dbuser="root" #数据库用户名 
    dbpwd="dbpwd" #数据库密码 
    dbnamelist=["dbone","dbtwo","dbthree"] #需要备份那些数据库 

    workdir="/path/to/backup/" #本地备份文件夹 
    errlogfile="databack.log" #错误日志名 
    ftp_addr="192.168.0.2" #ftp地址 
    ftp_port="2102" #ftp端口 
    ftp_user="databack" #ftp用户名 
    ftp_pwd="backpwd" #ftp密码 
    ftp_path="/" #存放到ftp路径 

    ftpqueue=[] 


    def ftpstor(): 
        #login 
        bufsize=1024 
        ftp=ftplib.FTP() 
        try: 
            ftp.connect(ftp_addr,ftp_port) 
            ftp.login(ftp_user,ftp_pwd) 
            ftp.cwd(ftp_path) 
            for filepath in ftpqueue: 

                #open file for input as binary 
                f=open(filepath,"rb") 
                #store file as binary 
                print getfilename(filepath) 
                ftp.storbinary("STOR "+getfilename(filepath),f,bufsize) 
                f.close() 
            ftp.quit() 
        except: 
            path=os.path.join(workdir,errlogfile) 
            traceback.print_exc(file=open(path,"a")) 

         

    def dumpdb(dbname): 
        global ftpqueue 
        timeformat="%Y%m%d" 
        sqlvalformat="mysqldump -u%s -p\"%s\" \"%s\" >\"%s\"" 
        tarvalformat="tar --directory=\"%s\" -zcf \"%s\" \"%s\"" 
        nowdate=time.strftime(timeformat) 
        dumpfile=os.path.join(workdir,dbname+".dump") 
        zipfile=os.path.join(workdir,dbname+nowdate+".tar.gz") 
        sqlval=sqlvalformat % (dbuser,dbpwd,dbname,dumpfile) 

        result=os.system(sqlval) 
        tarval=tarvalformat % (workdir,zipfile,dbname+".dump") 

        result=os.system(tarval) 
        os.remove(dumpfile) 
        ftpqueue.append(zipfile) 

    def getfilename(path): 

        pt=path.rfind(systempathchr) 
        return path[pt+1:] 

    def main(): 
        for dbname in dbnamelist: 
            dumpdb(dbname) 

        ftpstor() 

    main()

    没有仔细看,不过下面这两句,推荐看看os.path模块里面的函数,可能就不用针对linux和win分别设定不同的分隔符了 引用  
    #config vars
    systempathchr="/" #路径分割符,*nix用"/" win32用"\\"  
    看到代码里面是用在得到文件名的,可以试试os.path.basename活着os.path.split了 
     
    复制代码 代码如下:

     >>> import os.path 
      >>> os.path.basename("c:\\test\\aa.txt") 
      'aa.txt' 
      >>> os.path.split("c:\\test\\aa.txt") 
      ('c:\\test', 'aa.txt') 
      >>> os.path.split("c:\\test\\aa.txt")[-1] 
      'aa.txt' 
      >>> os.path.basename("/home/test/aa.txt") 
      'aa.txt' 
      >>> os.path.split("/home/test/aa.txt") 
      ('/home/test', 'aa.txt') 
      >>> os.path.basename("/home/test/aa.txt") 
      'aa.txt'

    js
    下一篇:没有了